API reference
Price Sync
Price Sync endpoints.
| Method | Path | Summary |
|---|---|---|
POST | /v1/account/connections/{connectionId}/price-sync | Sync now: read the CRM and update the listed locations (or all linked ones you can see). With a date ahead, schedule the CRM prices for that day |
POST | /v1/account/connections/{connectionId}/price-sync/preview | Preview a date: what the CRM prices would be on that day at each location, against what is published |
GET | /v1/account/connections/{connectionId}/price-syncs | Recent price syncs, newest first, for the locations you can see |
GET | /v1/account/connections/{connectionId}/pricing-mapping | A connection's price sync mapping, and whether its CRM can supply prices |
PUT | /v1/account/connections/{connectionId}/pricing-mapping | Save a price sync mapping after proving it against the CRM; with price sync on, the linked locations sync at once |
GET | /v1/account/connections/{connectionId}/pricing-mapping/suggestions | What the CRM holds (record types, values, templates) and map entries suggested from matching its names to your catalog. Nothing counts until you accept it |
POST | /v1/account/connections/{connectionId}/pricing-mapping/test | Run a mapping against the CRM for every linked location and show what it would set, publishing nothing |
GET | /v1/account/connections/{connectionId}/pricing-mapping/versions | A connection's price sync mapping versions, newest first |
GET | /v1/account/price-sync | The account's price source, if any, and each location's latest sync with what the CRM says for every cell |
Sync now: read the CRM and update the listed locations (or all linked ones you can see). With a date ahead, schedule the CRM prices for that day#
POST /v1/account/connections/{connectionId}/price-sync
Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
connectionId | string (conn_… ID) | Yes | ID (conn_…) |
Request body
application/json, required.
| Field | Type | Required | Description |
|---|---|---|---|
effectiveFrom | string (date-time) | No | — |
groupIds | array<string (grp_… ID)> | No | Up to 500 items. |
rateDate | string (date) | No | — |
Response 200
| Field | Type | Required | Description |
|---|---|---|---|
results | array<object> | Yes | — |
results[].changes | integer | Yes | — |
results[].errorCode | string | null | Yes | — |
results[].groupId | string | Yes | — |
results[].held | string | null | Yes | — |
results[].outcome | enum | Yes | One of: "unchanged", "drafted", "published", "submitted", "failed". |
results[].version | integer | null | Yes | — |
Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.
Example
curl -X POST "$ANSWERSTACK_API_URL/v1/account/connections/{connectionId}/price-sync" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"effectiveFrom": "2026-01-15T15:30:00Z",
"groupIds": [
"grp_2ZPh7XbT0v9Ao4iJ3qK1mN8sRgE"
],
"rateDate": "2026-01-15"
}'Preview a date: what the CRM prices would be on that day at each location, against what is published#
POST /v1/account/connections/{connectionId}/price-sync/preview
Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
connectionId | string (conn_… ID) | Yes | ID (conn_…) |
Request body
application/json, required.
| Field | Type | Required | Description |
|---|---|---|---|
groupIds | array<string (grp_… ID)> | No | Up to 500 items. |
rateDate | string (date) | Yes | — |
Response 200
| Field | Type | Required | Description |
|---|---|---|---|
locations | array<PriceSyncPreview> | Yes | — |
locations[].cells | array<object> | Yes | — |
locations[].cells[].cents | integer | null | Yes | — |
locations[].cells[].optionIds | array<string> | Yes | — |
locations[].cells[].problem | enum | null | Yes | One of: "nothing_found", "not_single", "part_failed", "out_of_range". |
locations[].cells[].records | array<string> | Yes | — |
locations[].cells[].ruleId | string | Yes | — |
locations[].cells[].serviceId | string | Yes | — |
locations[].changes | array<object> | Yes | — |
locations[].changes[].after | object | object | null | Yes | — |
locations[].changes[].after.cents | integer | Yes | (variant 1) Between 1 and 99999999. |
locations[].changes[].after.kind | constant | Yes | (variant 1) Always "starting_at". |
locations[].changes[].after.kind | constant | Yes | (variant 2) Always "on_request". |
locations[].changes[].before | object | object | null | Yes | — |
locations[].changes[].before.cents | integer | Yes | (variant 1) Between 1 and 99999999. |
locations[].changes[].before.kind | constant | Yes | (variant 1) Always "starting_at". |
locations[].changes[].before.kind | constant | Yes | (variant 2) Always "on_request". |
locations[].changes[].optionIds | array<string> | Yes | — |
locations[].changes[].ruleId | string | Yes | — |
locations[].changes[].serviceId | string | Yes | — |
locations[].groupId | string | Yes | — |
locations[].groupName | string | Yes | — |
locations[].notOffered | array<string> | Yes | — |
locations[].problems | integer | Yes | — |
locations[].unmapped | array<object> | Yes | — |
locations[].unmapped[].key | string | Yes | 1–64 characters. |
locations[].unmapped[].label | string | Yes | Up to 200 characters. |
locations[].unmapped[].locationRef | string | null | Yes | 1–128 characters. |
locations[].unmapped[].ref | string | Yes | 1–128 characters. |
locations[].unmapped[].type | string | Yes | 1–64 characters. |
Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.
Example
curl -X POST "$ANSWERSTACK_API_URL/v1/account/connections/{connectionId}/price-sync/preview" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"rateDate": "2026-01-15"
}'Recent price syncs, newest first, for the locations you can see#
GET /v1/account/connections/{connectionId}/price-syncs
Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token). Bearer token: Authorization: Bearer <token> (An API token (ans_pat_ or ans_svc_). Only routes that list a scope here accept one, and only with that scope.).
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
connectionId | string (conn_… ID) | Yes | ID (conn_…) |
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
groupId | string (grp_… ID) | No | ID (grp_…) |
Response 200
| Field | Type | Required | Description |
|---|---|---|---|
syncs | array<PriceSyncRecord> | Yes | — |
syncs[].cells | array<object> | Yes | — |
syncs[].cells[].cents | integer | null | Yes | — |
syncs[].cells[].optionIds | array<string> | Yes | — |
syncs[].cells[].problem | enum | null | Yes | One of: "nothing_found", "not_single", "part_failed", "out_of_range". |
syncs[].cells[].records | array<string> | Yes | — |
syncs[].cells[].ruleId | string | Yes | — |
syncs[].cells[].serviceId | string | Yes | — |
syncs[].changes | array<object> | Yes | — |
syncs[].changes[].after | object | object | null | Yes | — |
syncs[].changes[].after.cents | integer | Yes | (variant 1) Between 1 and 99999999. |
syncs[].changes[].after.kind | constant | Yes | (variant 1) Always "starting_at". |
syncs[].changes[].after.kind | constant | Yes | (variant 2) Always "on_request". |
syncs[].changes[].before | object | object | null | Yes | — |
syncs[].changes[].before.cents | integer | Yes | (variant 1) Between 1 and 99999999. |
syncs[].changes[].before.kind | constant | Yes | (variant 1) Always "starting_at". |
syncs[].changes[].before.kind | constant | Yes | (variant 2) Always "on_request". |
syncs[].changes[].optionIds | array<string> | Yes | — |
syncs[].changes[].ruleId | string | Yes | — |
syncs[].changes[].serviceId | string | Yes | — |
syncs[].effectiveFrom | string (date-time) | null | Yes | — |
syncs[].errorCode | string | null | Yes | — |
syncs[].finishedAt | string (date-time) | null | Yes | — |
syncs[].groupId | string | Yes | — |
syncs[].heldReason | string | null | Yes | — |
syncs[].id | string | Yes | — |
syncs[].mappingVersion | integer | Yes | — |
syncs[].outcome | enum | null | Yes | One of: "unchanged", "drafted", "published", "submitted", "failed". |
syncs[].priceBookVersion | integer | null | Yes | — |
syncs[].problems | integer | Yes | — |
syncs[].rateDate | string | Yes | — |
syncs[].recordCount | integer | Yes | — |
syncs[].startedAt | string (date-time) | Yes | — |
syncs[].trigger | enum | Yes | One of: "schedule", "manual", "mapping_change", "scheduled_date". |
syncs[].unmapped | integer | Yes | — |
Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.
Example
curl -X GET "$ANSWERSTACK_API_URL/v1/account/connections/{connectionId}/price-syncs" \
-H "Authorization: Bearer $ACCESS_TOKEN"A connection's price sync mapping, and whether its CRM can supply prices#
GET /v1/account/connections/{connectionId}/pricing-mapping
Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token). Bearer token: Authorization: Bearer <token> (An API token (ans_pat_ or ans_svc_). Only routes that list a scope here accept one, and only with that scope.).
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
connectionId | string (conn_… ID) | Yes | ID (conn_…) |
Response 200
| Field | Type | Required | Description |
|---|---|---|---|
available | boolean | Yes | — |
current | object | null | Yes | — |
current.authorId | string | null | Yes | — |
current.createdAt | string (date-time) | Yes | — |
current.mapping | object | Yes | — |
current.mapping.links | array<object> | Yes | Up to 1000 items. Default: []. |
current.mapping.links[].groupId | string (grp_… ID) | Yes | ID (grp_…) |
current.mapping.links[].locationRefs | array<string> | Yes | Up to 5 items. |
current.mapping.locationMaps | array<object> | Yes | Up to 1000 items. Default: []. |
current.mapping.locationMaps[].entries | array<object> | Yes | Up to 1000 items. |
current.mapping.locationMaps[].groupId | string (grp_… ID) | Yes | ID (grp_…) |
current.mapping.locationSettings | array<object> | Yes | Up to 1000 items. Default: []. |
current.mapping.locationSettings[].apply | enum | No | One of: "review", "auto". |
current.mapping.locationSettings[].groupId | string (grp_… ID) | Yes | ID (grp_…) |
current.mapping.locationSettings[].limits | object | No | — |
current.mapping.locationSettings[].whenNothing | enum | No | One of: "keep", "on_request". |
current.mapping.maps | array<object> | Yes | Up to 5000 items. Default: []. |
current.mapping.maps[].key | string | Yes | 1–64 characters. |
current.mapping.maps[].locationRef | string | null | Yes | 1–128 characters. |
current.mapping.maps[].match | object | object | object | object | Yes | — |
current.mapping.maps[].target | object | object | object | Yes | — |
current.mapping.maps[].type | string | Yes | 1–64 characters. |
current.mapping.overrides | array<object | object> | Yes | Up to 5000 items. Default: []. |
current.mapping.overrides[].action | enum | Yes | (variant 1) One of: "off". |
current.mapping.overrides[].groupId | string (grp_… ID) | Yes | (variant 1) ID (grp_…) |
current.mapping.overrides[].ruleId | string | Yes | (variant 1) 1–64 characters. |
current.mapping.overrides[].action | enum | Yes | (variant 2) One of: "change". |
current.mapping.overrides[].groupId | string (grp_… ID) | Yes | (variant 2) ID (grp_…) |
current.mapping.overrides[].rule | object | Yes | (variant 2) |
current.mapping.overrides[].ruleId | string | Yes | (variant 2) 1–64 characters. |
current.mapping.rules | array<object> | Yes | Up to 500 items. Default: []. |
current.mapping.rules[].adjust | object | null | Yes | — |
current.mapping.rules[].appliesTo | object | Yes | — |
current.mapping.rules[].choose | object | Yes | Default: \{"filters":[],"pinnedRef":null\}. |
current.mapping.rules[].combine | enum | Yes | One of: "lowest", "average", "single". Default: "lowest". |
current.mapping.rules[].groupIds | array<string (grp_… ID)> | Yes | Up to 500 items. Default: []. |
current.mapping.rules[].id | string | Yes | 1–64 characters. |
current.mapping.rules[].plus | array<object | object> | Yes | Up to 3 items. Default: []. |
current.mapping.rules[].round | object | null | Yes | — |
current.mapping.rules[].source | string | Yes | 1–64 characters. |
current.mapping.rules[].value | string | Yes | 1–64 characters. |
current.mapping.settings | object | Yes | Default: \{"apply":"review","enabled":false,"limits":\{"holdRemovals":true,"maxChangePercent":10,"maxChangedCells":null\},"rateDate":"today","rounding":\{"direction":"up","stepCents":5000\},"schedule":\{"hour":2,"kind":"nightly"\},"whenNothing":"keep"\}. |
current.mapping.settings.apply | enum | Yes | One of: "review", "auto". Default: "review". |
current.mapping.settings.enabled | boolean | Yes | Default: false. |
current.mapping.settings.limits | object | Yes | Default: \{"holdRemovals":true,"maxChangePercent":10,"maxChangedCells":null\}. |
current.mapping.settings.rateDate | enum | Yes | One of: "today", "first_of_next_month". Default: "today". |
current.mapping.settings.rounding | object | Yes | Default: \{"direction":"up","stepCents":5000\}. |
current.mapping.settings.schedule | object | object | object | Yes | Default: \{"hour":2,"kind":"nightly"\}. |
current.mapping.settings.whenNothing | enum | Yes | One of: "keep", "on_request". Default: "keep". |
current.note | string | null | Yes | — |
current.version | integer | Yes | — |
Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.
Example
curl -X GET "$ANSWERSTACK_API_URL/v1/account/connections/{connectionId}/pricing-mapping" \
-H "Authorization: Bearer $ACCESS_TOKEN"Save a price sync mapping after proving it against the CRM; with price sync on, the linked locations sync at once#
PUT /v1/account/connections/{connectionId}/pricing-mapping
Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
connectionId | string (conn_… ID) | Yes | ID (conn_…) |
Request body
application/json, required.
| Field | Type | Required | Description |
|---|---|---|---|
mapping | object | Yes | — |
mapping.links | array<object> | No | Up to 1000 items. Default: []. |
mapping.links[].groupId | string (grp_… ID) | Yes | ID (grp_…) |
mapping.links[].locationRefs | array<string> | Yes | Up to 5 items. |
mapping.locationMaps | array<object> | No | Up to 1000 items. Default: []. |
mapping.locationMaps[].entries | array<object> | Yes | Up to 1000 items. |
mapping.locationMaps[].entries[].key | string | Yes | 1–64 characters. |
mapping.locationMaps[].entries[].locationRef | string | null | No | 1–128 characters. |
mapping.locationMaps[].entries[].match | object | object | object | object | Yes | — |
mapping.locationMaps[].entries[].target | object | object | object | Yes | — |
mapping.locationMaps[].entries[].type | string | Yes | 1–64 characters. |
mapping.locationMaps[].groupId | string (grp_… ID) | Yes | ID (grp_…) |
mapping.locationSettings | array<object> | No | Up to 1000 items. Default: []. |
mapping.locationSettings[].apply | enum | No | One of: "review", "auto". |
mapping.locationSettings[].groupId | string (grp_… ID) | Yes | ID (grp_…) |
mapping.locationSettings[].limits | object | No | — |
mapping.locationSettings[].limits.holdRemovals | boolean | No | Default: true. |
mapping.locationSettings[].limits.maxChangePercent | number | null | No | Between 0 and 1000. |
mapping.locationSettings[].limits.maxChangedCells | integer | null | No | Between 1 and 10000. |
mapping.locationSettings[].whenNothing | enum | No | One of: "keep", "on_request". |
mapping.maps | array<object> | No | Up to 5000 items. Default: []. |
mapping.maps[].key | string | Yes | 1–64 characters. |
mapping.maps[].locationRef | string | null | No | 1–128 characters. |
mapping.maps[].match | object | object | object | object | Yes | — |
mapping.maps[].match.by | enum | Yes | (variant 1) One of: "id". |
mapping.maps[].match.ref | string | Yes | (variant 1) 1–128 characters. |
mapping.maps[].match.by | enum | Yes | (variant 2) One of: "name". |
mapping.maps[].match.name | string | Yes | (variant 2) 1–120 characters. |
mapping.maps[].match.by | enum | Yes | (variant 3) One of: "contains". |
mapping.maps[].match.text | string | Yes | (variant 3) 1–120 characters. |
mapping.maps[].match.by | enum | Yes | (variant 4) One of: "starts_with". |
mapping.maps[].match.text | string | Yes | (variant 4) 1–120 characters. |
mapping.maps[].target | object | object | object | Yes | — |
mapping.maps[].target.kind | enum | Yes | (variant 1) One of: "service". |
mapping.maps[].target.serviceId | string (srv_… ID) | Yes | (variant 1) ID (srv_…) |
mapping.maps[].target.kind | enum | Yes | (variant 2) One of: "option". |
mapping.maps[].target.optionId | string (sopt_… ID) | Yes | (variant 2) ID (sopt_…) |
mapping.maps[].target.kind | enum | Yes | (variant 3) One of: "ignore". |
mapping.maps[].type | string | Yes | 1–64 characters. |
mapping.overrides | array<object | object> | No | Up to 5000 items. Default: []. |
mapping.overrides[].action | enum | Yes | (variant 1) One of: "off". |
mapping.overrides[].groupId | string (grp_… ID) | Yes | (variant 1) ID (grp_…) |
mapping.overrides[].ruleId | string | Yes | (variant 1) 1–64 characters. |
mapping.overrides[].action | enum | Yes | (variant 2) One of: "change". |
mapping.overrides[].groupId | string (grp_… ID) | Yes | (variant 2) ID (grp_…) |
mapping.overrides[].rule | object | Yes | (variant 2) |
mapping.overrides[].rule.adjust | object | null | No | (variant 2) |
mapping.overrides[].rule.appliesTo | object | Yes | (variant 2) |
mapping.overrides[].rule.choose | object | No | (variant 2) Default: \{"filters":[],"pinnedRef":null\}. |
mapping.overrides[].rule.combine | enum | No | (variant 2) One of: "lowest", "average", "single". Default: "lowest". |
mapping.overrides[].rule.groupIds | array<string (grp_… ID)> | No | (variant 2) Up to 500 items. Default: []. |
mapping.overrides[].rule.plus | array<object | object> | No | (variant 2) Up to 3 items. Default: []. |
mapping.overrides[].rule.round | object | null | No | (variant 2) |
mapping.overrides[].rule.source | string | Yes | (variant 2) 1–64 characters. |
mapping.overrides[].rule.value | string | Yes | (variant 2) 1–64 characters. |
mapping.overrides[].ruleId | string | Yes | (variant 2) 1–64 characters. |
mapping.rules | array<object> | No | Up to 500 items. Default: []. |
mapping.rules[].adjust | object | null | No | — |
mapping.rules[].adjust.cents | integer | No | Between -99999999 and 99999999. |
mapping.rules[].adjust.percent | number | No | Between -90 and 500. |
mapping.rules[].appliesTo | object | Yes | — |
mapping.rules[].appliesTo.optionIds | array<string (sopt_… ID)> | No | Up to 2 items. Default: []. |
mapping.rules[].appliesTo.serviceId | string (srv_… ID) | Yes | ID (srv_…) |
mapping.rules[].choose | object | No | Default: \{"filters":[],"pinnedRef":null\}. |
mapping.rules[].choose.filters | array<object> | No | Up to 10 items. Default: []. |
mapping.rules[].choose.pinnedRef | string | null | No | 1–128 characters. |
mapping.rules[].combine | enum | No | One of: "lowest", "average", "single". Default: "lowest". |
mapping.rules[].groupIds | array<string (grp_… ID)> | No | Up to 500 items. Default: []. |
mapping.rules[].id | string | Yes | 1–64 characters. |
mapping.rules[].plus | array<object | object> | No | Up to 3 items. Default: []. |
mapping.rules[].plus[].choose | object | No | (variant 1) Default: \{"filters":[],"pinnedRef":null\}. |
mapping.rules[].plus[].combine | enum | No | (variant 1) One of: "lowest", "average", "single". Default: "lowest". |
mapping.rules[].plus[].kind | enum | Yes | (variant 1) One of: "records". |
mapping.rules[].plus[].source | string | Yes | (variant 1) 1–64 characters. |
mapping.rules[].plus[].value | string | Yes | (variant 1) 1–64 characters. |
mapping.rules[].plus[].cents | integer | Yes | (variant 2) Between 0 and 99999999. |
mapping.rules[].plus[].kind | enum | Yes | (variant 2) One of: "typed". |
mapping.rules[].round | object | null | No | — |
mapping.rules[].round.direction | enum | Yes | One of: "up", "down", "nearest". |
mapping.rules[].round.stepCents | integer | Yes | Between 1 and 1000000. |
mapping.rules[].source | string | Yes | 1–64 characters. |
mapping.rules[].value | string | Yes | 1–64 characters. |
mapping.settings | object | No | Default: \{"apply":"review","enabled":false,"limits":\{"holdRemovals":true,"maxChangePercent":10,"maxChangedCells":null\},"rateDate":"today","rounding":\{"direction":"up","stepCents":5000\},"schedule":\{"hour":2,"kind":"nightly"\},"whenNothing":"keep"\}. |
mapping.settings.apply | enum | No | One of: "review", "auto". Default: "review". |
mapping.settings.enabled | boolean | No | Default: false. |
mapping.settings.limits | object | No | Default: \{"holdRemovals":true,"maxChangePercent":10,"maxChangedCells":null\}. |
mapping.settings.limits.holdRemovals | boolean | No | Default: true. |
mapping.settings.limits.maxChangePercent | number | null | No | Between 0 and 1000. |
mapping.settings.limits.maxChangedCells | integer | null | No | Between 1 and 10000. |
mapping.settings.rateDate | enum | No | One of: "today", "first_of_next_month". Default: "today". |
mapping.settings.rounding | object | No | Default: \{"direction":"up","stepCents":5000\}. |
mapping.settings.rounding.direction | enum | Yes | One of: "up", "down", "nearest". |
mapping.settings.rounding.stepCents | integer | Yes | Between 1 and 1000000. |
mapping.settings.schedule | object | object | object | No | Default: \{"hour":2,"kind":"nightly"\}. |
mapping.settings.schedule.hour | integer | Yes | (variant 1) Between 0 and 23. |
mapping.settings.schedule.kind | enum | Yes | (variant 1) One of: "nightly". |
mapping.settings.schedule.hour | integer | Yes | (variant 2) Between 0 and 23. |
mapping.settings.schedule.kind | enum | Yes | (variant 2) One of: "weekly". |
mapping.settings.schedule.weekday | integer | Yes | (variant 2) Between 0 and 6. |
mapping.settings.schedule.kind | enum | Yes | (variant 3) One of: "manual". |
mapping.settings.whenNothing | enum | No | One of: "keep", "on_request". Default: "keep". |
note | string | No | Up to 500 characters. |
Response 200
| Field | Type | Required | Description |
|---|---|---|---|
sync | array<object> | Yes | — |
sync[].changes | integer | Yes | — |
sync[].errorCode | string | null | Yes | — |
sync[].groupId | string | Yes | — |
sync[].held | string | null | Yes | — |
sync[].outcome | enum | Yes | One of: "unchanged", "drafted", "published", "submitted", "failed". |
sync[].version | integer | null | Yes | — |
test | PriceSyncTest | Yes | — |
test.broken | array<object> | Yes | — |
test.broken[].key | string | Yes | 1–64 characters. |
test.broken[].locationRef | string | null | Yes | 1–128 characters. |
test.broken[].match | object | object | object | object | Yes | — |
test.broken[].match.by | constant | Yes | (variant 1) Always "id". |
test.broken[].match.ref | string | Yes | (variant 1) 1–128 characters. |
test.broken[].match.by | constant | Yes | (variant 2) Always "name". |
test.broken[].match.name | string | Yes | (variant 2) 1–120 characters. |
test.broken[].match.by | constant | Yes | (variant 3) Always "contains". |
test.broken[].match.text | string | Yes | (variant 3) 1–120 characters. |
test.broken[].match.by | constant | Yes | (variant 4) Always "starts_with". |
test.broken[].match.text | string | Yes | (variant 4) 1–120 characters. |
test.broken[].target | object | object | object | Yes | — |
test.broken[].target.kind | constant | Yes | (variant 1) Always "service". |
test.broken[].target.serviceId | string (srv_… ID) | Yes | (variant 1) ID (srv_…) |
test.broken[].target.kind | constant | Yes | (variant 2) Always "option". |
test.broken[].target.optionId | string (sopt_… ID) | Yes | (variant 2) ID (sopt_…) |
test.broken[].target.kind | constant | Yes | (variant 3) Always "ignore". |
test.broken[].type | string | Yes | 1–64 characters. |
test.issues | array<object> | Yes | — |
test.issues[].message | string | Yes | — |
test.issues[].path | string | Yes | — |
test.locations | array<PriceSyncPreview> | Yes | — |
test.locations[].cells | array<object> | Yes | — |
test.locations[].cells[].cents | integer | null | Yes | — |
test.locations[].cells[].optionIds | array<string> | Yes | — |
test.locations[].cells[].problem | enum | null | Yes | One of: "nothing_found", "not_single", "part_failed", "out_of_range". |
test.locations[].cells[].records | array<string> | Yes | — |
test.locations[].cells[].ruleId | string | Yes | — |
test.locations[].cells[].serviceId | string | Yes | — |
test.locations[].changes | array<object> | Yes | — |
test.locations[].changes[].after | object | object | null | Yes | — |
test.locations[].changes[].before | object | object | null | Yes | — |
test.locations[].changes[].optionIds | array<string> | Yes | — |
test.locations[].changes[].ruleId | string | Yes | — |
test.locations[].changes[].serviceId | string | Yes | — |
test.locations[].groupId | string | Yes | — |
test.locations[].groupName | string | Yes | — |
test.locations[].notOffered | array<string> | Yes | — |
test.locations[].problems | integer | Yes | — |
test.locations[].unmapped | array<object> | Yes | — |
test.locations[].unmapped[].key | string | Yes | 1–64 characters. |
test.locations[].unmapped[].label | string | Yes | Up to 200 characters. |
test.locations[].unmapped[].locationRef | string | null | Yes | 1–128 characters. |
test.locations[].unmapped[].ref | string | Yes | 1–128 characters. |
test.locations[].unmapped[].type | string | Yes | 1–64 characters. |
test.recordCount | integer | Yes | — |
version | integer | Yes | — |
Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.
Example
curl -X PUT "$ANSWERSTACK_API_URL/v1/account/connections/{connectionId}/pricing-mapping" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mapping": {
"links": [],
"locationMaps": [],
"locationSettings": [],
"maps": [],
"overrides": [],
"rules": [],
"settings": {
"apply": "review",
"enabled": false,
"limits": {
"holdRemovals": true,
"maxChangePercent": 10,
"maxChangedCells": null
},
"rateDate": "today",
"rounding": {
"direction": "up",
"stepCents": 5000
},
"schedule": {
"hour": 2,
"kind": "nightly"
},
"whenNothing": "keep"
}
}
}'What the CRM holds (record types, values, templates) and map entries suggested from matching its names to your catalog. Nothing counts until you accept it#
GET /v1/account/connections/{connectionId}/pricing-mapping/suggestions
Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
connectionId | string (conn_… ID) | Yes | ID (conn_…) |
Response 200
| Field | Type | Required | Description |
|---|---|---|---|
suggestions | array<object> | Yes | — |
suggestions[].because | string | Yes | — |
suggestions[].entry | object | Yes | — |
suggestions[].entry.key | string | Yes | 1–64 characters. |
suggestions[].entry.locationRef | string | null | Yes | 1–128 characters. |
suggestions[].entry.match | object | object | object | object | Yes | — |
suggestions[].entry.match.by | enum | Yes | (variant 1) One of: "id". |
suggestions[].entry.match.ref | string | Yes | (variant 1) 1–128 characters. |
suggestions[].entry.match.by | enum | Yes | (variant 2) One of: "name". |
suggestions[].entry.match.name | string | Yes | (variant 2) 1–120 characters. |
suggestions[].entry.match.by | enum | Yes | (variant 3) One of: "contains". |
suggestions[].entry.match.text | string | Yes | (variant 3) 1–120 characters. |
suggestions[].entry.match.by | enum | Yes | (variant 4) One of: "starts_with". |
suggestions[].entry.match.text | string | Yes | (variant 4) 1–120 characters. |
suggestions[].entry.target | object | object | object | Yes | — |
suggestions[].entry.target.kind | enum | Yes | (variant 1) One of: "service". |
suggestions[].entry.target.serviceId | string (srv_… ID) | Yes | (variant 1) ID (srv_…) |
suggestions[].entry.target.kind | enum | Yes | (variant 2) One of: "option". |
suggestions[].entry.target.optionId | string (sopt_… ID) | Yes | (variant 2) ID (sopt_…) |
suggestions[].entry.target.kind | enum | Yes | (variant 3) One of: "ignore". |
suggestions[].entry.type | string | Yes | 1–64 characters. |
suggestions[].value | object | Yes | — |
suggestions[].value.key | string | Yes | 1–64 characters. |
suggestions[].value.label | string | Yes | Up to 200 characters. |
suggestions[].value.locationRef | string | null | Yes | 1–128 characters. |
suggestions[].value.ref | string | Yes | 1–128 characters. |
suggestions[].value.type | string | Yes | 1–64 characters. |
templates | array<object> | Yes | — |
templates[].id | string | Yes | 1–64 characters. |
templates[].keys | array<string> | Yes | Up to 5 items. |
templates[].label | string | Yes | 1–120 characters. |
templates[].type | string | Yes | 1–64 characters. |
templates[].value | string | Yes | 1–64 characters. |
types | array<object> | Yes | — |
types[].filters | array<object> | Yes | Up to 20 items. |
types[].filters[].key | string | Yes | 1–64 characters. |
types[].filters[].kind | enum | Yes | One of: "boolean", "number", "text", "list". |
types[].filters[].label | string | Yes | 1–80 characters. |
types[].label | string | Yes | 1–80 characters. |
types[].money | array<object> | Yes | Up to 20 items. |
types[].money[].key | string | Yes | 1–64 characters. |
types[].money[].label | string | Yes | 1–80 characters. |
types[].named | array<object> | Yes | Up to 20 items. |
types[].named[].key | string | Yes | 1–64 characters. |
types[].named[].label | string | Yes | 1–80 characters. |
types[].named[].perLocation | boolean | Yes | Default: false. |
types[].rateByDate | boolean | Yes | Default: false. |
types[].type | string | Yes | 1–64 characters. |
values | array<object> | Yes | — |
values[].key | string | Yes | 1–64 characters. |
values[].label | string | Yes | Up to 200 characters. |
values[].locationRef | string | null | Yes | 1–128 characters. |
values[].ref | string | Yes | 1–128 characters. |
values[].type | string | Yes | 1–64 characters. |
Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.
Example
curl -X GET "$ANSWERSTACK_API_URL/v1/account/connections/{connectionId}/pricing-mapping/suggestions" \
-H "Authorization: Bearer $ACCESS_TOKEN"Run a mapping against the CRM for every linked location and show what it would set, publishing nothing#
POST /v1/account/connections/{connectionId}/pricing-mapping/test
Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
connectionId | string (conn_… ID) | Yes | ID (conn_…) |
Request body
application/json, required.
| Field | Type | Required | Description |
|---|---|---|---|
mapping | object | No | — |
mapping.links | array<object> | No | Up to 1000 items. Default: []. |
mapping.links[].groupId | string (grp_… ID) | Yes | ID (grp_…) |
mapping.links[].locationRefs | array<string> | Yes | Up to 5 items. |
mapping.locationMaps | array<object> | No | Up to 1000 items. Default: []. |
mapping.locationMaps[].entries | array<object> | Yes | Up to 1000 items. |
mapping.locationMaps[].entries[].key | string | Yes | 1–64 characters. |
mapping.locationMaps[].entries[].locationRef | string | null | No | 1–128 characters. |
mapping.locationMaps[].entries[].match | object | object | object | object | Yes | — |
mapping.locationMaps[].entries[].target | object | object | object | Yes | — |
mapping.locationMaps[].entries[].type | string | Yes | 1–64 characters. |
mapping.locationMaps[].groupId | string (grp_… ID) | Yes | ID (grp_…) |
mapping.locationSettings | array<object> | No | Up to 1000 items. Default: []. |
mapping.locationSettings[].apply | enum | No | One of: "review", "auto". |
mapping.locationSettings[].groupId | string (grp_… ID) | Yes | ID (grp_…) |
mapping.locationSettings[].limits | object | No | — |
mapping.locationSettings[].limits.holdRemovals | boolean | No | Default: true. |
mapping.locationSettings[].limits.maxChangePercent | number | null | No | Between 0 and 1000. |
mapping.locationSettings[].limits.maxChangedCells | integer | null | No | Between 1 and 10000. |
mapping.locationSettings[].whenNothing | enum | No | One of: "keep", "on_request". |
mapping.maps | array<object> | No | Up to 5000 items. Default: []. |
mapping.maps[].key | string | Yes | 1–64 characters. |
mapping.maps[].locationRef | string | null | No | 1–128 characters. |
mapping.maps[].match | object | object | object | object | Yes | — |
mapping.maps[].match.by | enum | Yes | (variant 1) One of: "id". |
mapping.maps[].match.ref | string | Yes | (variant 1) 1–128 characters. |
mapping.maps[].match.by | enum | Yes | (variant 2) One of: "name". |
mapping.maps[].match.name | string | Yes | (variant 2) 1–120 characters. |
mapping.maps[].match.by | enum | Yes | (variant 3) One of: "contains". |
mapping.maps[].match.text | string | Yes | (variant 3) 1–120 characters. |
mapping.maps[].match.by | enum | Yes | (variant 4) One of: "starts_with". |
mapping.maps[].match.text | string | Yes | (variant 4) 1–120 characters. |
mapping.maps[].target | object | object | object | Yes | — |
mapping.maps[].target.kind | enum | Yes | (variant 1) One of: "service". |
mapping.maps[].target.serviceId | string (srv_… ID) | Yes | (variant 1) ID (srv_…) |
mapping.maps[].target.kind | enum | Yes | (variant 2) One of: "option". |
mapping.maps[].target.optionId | string (sopt_… ID) | Yes | (variant 2) ID (sopt_…) |
mapping.maps[].target.kind | enum | Yes | (variant 3) One of: "ignore". |
mapping.maps[].type | string | Yes | 1–64 characters. |
mapping.overrides | array<object | object> | No | Up to 5000 items. Default: []. |
mapping.overrides[].action | enum | Yes | (variant 1) One of: "off". |
mapping.overrides[].groupId | string (grp_… ID) | Yes | (variant 1) ID (grp_…) |
mapping.overrides[].ruleId | string | Yes | (variant 1) 1–64 characters. |
mapping.overrides[].action | enum | Yes | (variant 2) One of: "change". |
mapping.overrides[].groupId | string (grp_… ID) | Yes | (variant 2) ID (grp_…) |
mapping.overrides[].rule | object | Yes | (variant 2) |
mapping.overrides[].rule.adjust | object | null | No | (variant 2) |
mapping.overrides[].rule.appliesTo | object | Yes | (variant 2) |
mapping.overrides[].rule.choose | object | No | (variant 2) Default: \{"filters":[],"pinnedRef":null\}. |
mapping.overrides[].rule.combine | enum | No | (variant 2) One of: "lowest", "average", "single". Default: "lowest". |
mapping.overrides[].rule.groupIds | array<string (grp_… ID)> | No | (variant 2) Up to 500 items. Default: []. |
mapping.overrides[].rule.plus | array<object | object> | No | (variant 2) Up to 3 items. Default: []. |
mapping.overrides[].rule.round | object | null | No | (variant 2) |
mapping.overrides[].rule.source | string | Yes | (variant 2) 1–64 characters. |
mapping.overrides[].rule.value | string | Yes | (variant 2) 1–64 characters. |
mapping.overrides[].ruleId | string | Yes | (variant 2) 1–64 characters. |
mapping.rules | array<object> | No | Up to 500 items. Default: []. |
mapping.rules[].adjust | object | null | No | — |
mapping.rules[].adjust.cents | integer | No | Between -99999999 and 99999999. |
mapping.rules[].adjust.percent | number | No | Between -90 and 500. |
mapping.rules[].appliesTo | object | Yes | — |
mapping.rules[].appliesTo.optionIds | array<string (sopt_… ID)> | No | Up to 2 items. Default: []. |
mapping.rules[].appliesTo.serviceId | string (srv_… ID) | Yes | ID (srv_…) |
mapping.rules[].choose | object | No | Default: \{"filters":[],"pinnedRef":null\}. |
mapping.rules[].choose.filters | array<object> | No | Up to 10 items. Default: []. |
mapping.rules[].choose.pinnedRef | string | null | No | 1–128 characters. |
mapping.rules[].combine | enum | No | One of: "lowest", "average", "single". Default: "lowest". |
mapping.rules[].groupIds | array<string (grp_… ID)> | No | Up to 500 items. Default: []. |
mapping.rules[].id | string | Yes | 1–64 characters. |
mapping.rules[].plus | array<object | object> | No | Up to 3 items. Default: []. |
mapping.rules[].plus[].choose | object | No | (variant 1) Default: \{"filters":[],"pinnedRef":null\}. |
mapping.rules[].plus[].combine | enum | No | (variant 1) One of: "lowest", "average", "single". Default: "lowest". |
mapping.rules[].plus[].kind | enum | Yes | (variant 1) One of: "records". |
mapping.rules[].plus[].source | string | Yes | (variant 1) 1–64 characters. |
mapping.rules[].plus[].value | string | Yes | (variant 1) 1–64 characters. |
mapping.rules[].plus[].cents | integer | Yes | (variant 2) Between 0 and 99999999. |
mapping.rules[].plus[].kind | enum | Yes | (variant 2) One of: "typed". |
mapping.rules[].round | object | null | No | — |
mapping.rules[].round.direction | enum | Yes | One of: "up", "down", "nearest". |
mapping.rules[].round.stepCents | integer | Yes | Between 1 and 1000000. |
mapping.rules[].source | string | Yes | 1–64 characters. |
mapping.rules[].value | string | Yes | 1–64 characters. |
mapping.settings | object | No | Default: \{"apply":"review","enabled":false,"limits":\{"holdRemovals":true,"maxChangePercent":10,"maxChangedCells":null\},"rateDate":"today","rounding":\{"direction":"up","stepCents":5000\},"schedule":\{"hour":2,"kind":"nightly"\},"whenNothing":"keep"\}. |
mapping.settings.apply | enum | No | One of: "review", "auto". Default: "review". |
mapping.settings.enabled | boolean | No | Default: false. |
mapping.settings.limits | object | No | Default: \{"holdRemovals":true,"maxChangePercent":10,"maxChangedCells":null\}. |
mapping.settings.limits.holdRemovals | boolean | No | Default: true. |
mapping.settings.limits.maxChangePercent | number | null | No | Between 0 and 1000. |
mapping.settings.limits.maxChangedCells | integer | null | No | Between 1 and 10000. |
mapping.settings.rateDate | enum | No | One of: "today", "first_of_next_month". Default: "today". |
mapping.settings.rounding | object | No | Default: \{"direction":"up","stepCents":5000\}. |
mapping.settings.rounding.direction | enum | Yes | One of: "up", "down", "nearest". |
mapping.settings.rounding.stepCents | integer | Yes | Between 1 and 1000000. |
mapping.settings.schedule | object | object | object | No | Default: \{"hour":2,"kind":"nightly"\}. |
mapping.settings.schedule.hour | integer | Yes | (variant 1) Between 0 and 23. |
mapping.settings.schedule.kind | enum | Yes | (variant 1) One of: "nightly". |
mapping.settings.schedule.hour | integer | Yes | (variant 2) Between 0 and 23. |
mapping.settings.schedule.kind | enum | Yes | (variant 2) One of: "weekly". |
mapping.settings.schedule.weekday | integer | Yes | (variant 2) Between 0 and 6. |
mapping.settings.schedule.kind | enum | Yes | (variant 3) One of: "manual". |
mapping.settings.whenNothing | enum | No | One of: "keep", "on_request". Default: "keep". |
Response 200
| Field | Type | Required | Description |
|---|---|---|---|
broken | array<object> | Yes | — |
broken[].key | string | Yes | 1–64 characters. |
broken[].locationRef | string | null | Yes | 1–128 characters. |
broken[].match | object | object | object | object | Yes | — |
broken[].match.by | constant | Yes | (variant 1) Always "id". |
broken[].match.ref | string | Yes | (variant 1) 1–128 characters. |
broken[].match.by | constant | Yes | (variant 2) Always "name". |
broken[].match.name | string | Yes | (variant 2) 1–120 characters. |
broken[].match.by | constant | Yes | (variant 3) Always "contains". |
broken[].match.text | string | Yes | (variant 3) 1–120 characters. |
broken[].match.by | constant | Yes | (variant 4) Always "starts_with". |
broken[].match.text | string | Yes | (variant 4) 1–120 characters. |
broken[].target | object | object | object | Yes | — |
broken[].target.kind | constant | Yes | (variant 1) Always "service". |
broken[].target.serviceId | string (srv_… ID) | Yes | (variant 1) ID (srv_…) |
broken[].target.kind | constant | Yes | (variant 2) Always "option". |
broken[].target.optionId | string (sopt_… ID) | Yes | (variant 2) ID (sopt_…) |
broken[].target.kind | constant | Yes | (variant 3) Always "ignore". |
broken[].type | string | Yes | 1–64 characters. |
issues | array<object> | Yes | — |
issues[].message | string | Yes | — |
issues[].path | string | Yes | — |
locations | array<PriceSyncPreview> | Yes | — |
locations[].cells | array<object> | Yes | — |
locations[].cells[].cents | integer | null | Yes | — |
locations[].cells[].optionIds | array<string> | Yes | — |
locations[].cells[].problem | enum | null | Yes | One of: "nothing_found", "not_single", "part_failed", "out_of_range". |
locations[].cells[].records | array<string> | Yes | — |
locations[].cells[].ruleId | string | Yes | — |
locations[].cells[].serviceId | string | Yes | — |
locations[].changes | array<object> | Yes | — |
locations[].changes[].after | object | object | null | Yes | — |
locations[].changes[].after.cents | integer | Yes | (variant 1) Between 1 and 99999999. |
locations[].changes[].after.kind | constant | Yes | (variant 1) Always "starting_at". |
locations[].changes[].after.kind | constant | Yes | (variant 2) Always "on_request". |
locations[].changes[].before | object | object | null | Yes | — |
locations[].changes[].before.cents | integer | Yes | (variant 1) Between 1 and 99999999. |
locations[].changes[].before.kind | constant | Yes | (variant 1) Always "starting_at". |
locations[].changes[].before.kind | constant | Yes | (variant 2) Always "on_request". |
locations[].changes[].optionIds | array<string> | Yes | — |
locations[].changes[].ruleId | string | Yes | — |
locations[].changes[].serviceId | string | Yes | — |
locations[].groupId | string | Yes | — |
locations[].groupName | string | Yes | — |
locations[].notOffered | array<string> | Yes | — |
locations[].problems | integer | Yes | — |
locations[].unmapped | array<object> | Yes | — |
locations[].unmapped[].key | string | Yes | 1–64 characters. |
locations[].unmapped[].label | string | Yes | Up to 200 characters. |
locations[].unmapped[].locationRef | string | null | Yes | 1–128 characters. |
locations[].unmapped[].ref | string | Yes | 1–128 characters. |
locations[].unmapped[].type | string | Yes | 1–64 characters. |
recordCount | integer | Yes | — |
Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.
Example
curl -X POST "$ANSWERSTACK_API_URL/v1/account/connections/{connectionId}/pricing-mapping/test" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mapping": {
"links": [],
"locationMaps": [],
"locationSettings": [],
"maps": [],
"overrides": [],
"rules": [],
"settings": {
"apply": "review",
"enabled": false,
"limits": {
"holdRemovals": true,
"maxChangePercent": 10,
"maxChangedCells": null
},
"rateDate": "today",
"rounding": {
"direction": "up",
"stepCents": 5000
},
"schedule": {
"hour": 2,
"kind": "nightly"
},
"whenNothing": "keep"
}
}
}'A connection's price sync mapping versions, newest first#
GET /v1/account/connections/{connectionId}/pricing-mapping/versions
Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token). Bearer token: Authorization: Bearer <token> (An API token (ans_pat_ or ans_svc_). Only routes that list a scope here accept one, and only with that scope.).
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
connectionId | string (conn_… ID) | Yes | ID (conn_…) |
Response 200
| Field | Type | Required | Description |
|---|---|---|---|
versions | array<object> | Yes | — |
versions[].authorId | string | null | Yes | — |
versions[].createdAt | string (date-time) | Yes | — |
versions[].note | string | null | Yes | — |
versions[].version | integer | Yes | — |
Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.
Example
curl -X GET "$ANSWERSTACK_API_URL/v1/account/connections/{connectionId}/pricing-mapping/versions" \
-H "Authorization: Bearer $ACCESS_TOKEN"The account's price source, if any, and each location's latest sync with what the CRM says for every cell#
GET /v1/account/price-sync
Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token). Bearer token: Authorization: Bearer <token> (An API token (ans_pat_ or ans_svc_). Only routes that list a scope here accept one, and only with that scope.).
Response 200
| Field | Type | Required | Description |
|---|---|---|---|
connection | object | null | Yes | — |
connection.connector | string | Yes | — |
connection.id | string | Yes | — |
connection.name | string | Yes | — |
latest | array<PriceSyncRecord> | Yes | — |
latest[].cells | array<object> | Yes | — |
latest[].cells[].cents | integer | null | Yes | — |
latest[].cells[].optionIds | array<string> | Yes | — |
latest[].cells[].problem | enum | null | Yes | One of: "nothing_found", "not_single", "part_failed", "out_of_range". |
latest[].cells[].records | array<string> | Yes | — |
latest[].cells[].ruleId | string | Yes | — |
latest[].cells[].serviceId | string | Yes | — |
latest[].changes | array<object> | Yes | — |
latest[].changes[].after | object | object | null | Yes | — |
latest[].changes[].after.cents | integer | Yes | (variant 1) Between 1 and 99999999. |
latest[].changes[].after.kind | constant | Yes | (variant 1) Always "starting_at". |
latest[].changes[].after.kind | constant | Yes | (variant 2) Always "on_request". |
latest[].changes[].before | object | object | null | Yes | — |
latest[].changes[].before.cents | integer | Yes | (variant 1) Between 1 and 99999999. |
latest[].changes[].before.kind | constant | Yes | (variant 1) Always "starting_at". |
latest[].changes[].before.kind | constant | Yes | (variant 2) Always "on_request". |
latest[].changes[].optionIds | array<string> | Yes | — |
latest[].changes[].ruleId | string | Yes | — |
latest[].changes[].serviceId | string | Yes | — |
latest[].effectiveFrom | string (date-time) | null | Yes | — |
latest[].errorCode | string | null | Yes | — |
latest[].finishedAt | string (date-time) | null | Yes | — |
latest[].groupId | string | Yes | — |
latest[].heldReason | string | null | Yes | — |
latest[].id | string | Yes | — |
latest[].mappingVersion | integer | Yes | — |
latest[].outcome | enum | null | Yes | One of: "unchanged", "drafted", "published", "submitted", "failed". |
latest[].priceBookVersion | integer | null | Yes | — |
latest[].problems | integer | Yes | — |
latest[].rateDate | string | Yes | — |
latest[].recordCount | integer | Yes | — |
latest[].startedAt | string (date-time) | Yes | — |
latest[].trigger | enum | Yes | One of: "schedule", "manual", "mapping_change", "scheduled_date". |
latest[].unmapped | integer | Yes | — |
rateByDate | boolean | Yes | — |
Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.
Example
curl -X GET "$ANSWERSTACK_API_URL/v1/account/price-sync" \
-H "Authorization: Bearer $ACCESS_TOKEN"