Console API
Pricing
7 endpoints.
/api/v1/admin/pricing/booksList price books (platform admin)
Every book with its current version and the plans pointing at it. The live-subscriber count on each plan is the blast radius of an edit — and the only place a `price_book_id` is discoverable at all.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
authorization | header | string | null |
Responses
200Successful Responseapplication/jsonSuccessResponse_PriceBooksData_| Field | Type | Description | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
request_idrequired | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
success | true | default true | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
datarequired | PriceBooksData | PriceBooksData fields
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
metadata | ResponseMetadata | null | ResponseMetadata fields
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
meta | ResponseMeta | null | ResponseMeta fields
|
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/pricing/books/{book_id}/versionsList a price book's versions (platform admin)
Every version, newest first, with full contents — enough to diff any two, or to republish an old one as the newest, which is what a rollback is.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
book_idrequired | path | string (uuid) | |
authorization | header | string | null |
Responses
200Successful Responseapplication/jsonSuccessResponse_PriceBookVersionsData_| Field | Type | Description | ||||||
|---|---|---|---|---|---|---|---|---|
request_idrequired | string | |||||||
success | true | default true | ||||||
datarequired | PriceBookVersionsData | PriceBookVersionsData fields
| ||||||
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. | ||||||
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/pricing/books/{book_id}/versionsPublish a price book version (platform admin)
Publish the next version. Holds authorized after it commits price against the new version; every hold already open keeps the one it was opened under and settles at that one's prices, so an edit can never reprice work a customer has already started.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
book_idrequired | path | string (uuid) | |
authorization | header | string | null |
Request bodyrequired
application/jsonCreateVersionBody| Field | Type | Description |
|---|---|---|
rulesrequired | object | object fieldsMap of string to object |
markup_multiplierrequired | string | min length 1 · max length 64 |
expected_versionrequired | integer | min 1 |
reasonrequired | string | min length 1 · max length 256 |
Responses
200Successful Responseapplication/jsonSuccessResponse_PriceBookVersionData_| Field | Type | Description | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
request_idrequired | string | |||||||||||||||||||||||||||||||
success | true | default true | ||||||||||||||||||||||||||||||
datarequired | PriceBookVersionData | PriceBookVersionData fields
| ||||||||||||||||||||||||||||||
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. | ||||||||||||||||||||||||||||||
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/pricing/dimensionsList rating dimensions (platform admin)
The quantities the rater understands and the rate-sheet key each is priced under — a code constant served so the editor's field-level validation cannot drift from the code that does the pricing. It says nothing about which sheet is in force.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
authorization | header | string | null |
Responses
200Successful Responseapplication/jsonSuccessResponse_RatingDimensionsData_| Field | Type | Description | ||||||
|---|---|---|---|---|---|---|---|---|
request_idrequired | string | |||||||
success | true | default true | ||||||
datarequired | RatingDimensionsData | RatingDimensionsData fields
| ||||||
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. | ||||||
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/pricing/ratesList vendor rate sheets (platform admin)
Newest first, full tables inline — one call serves the list, a row's detail and the editor's starting point (the row payments marks `in_force`).
Parameters
| Name | In | Type | Description |
|---|---|---|---|
limit | query | integer | default 20 |
authorization | header | string | null |
Responses
200Successful Responseapplication/jsonSuccessResponse_RateSheetsData_| Field | Type | Description | ||||||
|---|---|---|---|---|---|---|---|---|
request_idrequired | string | |||||||
success | true | default true | ||||||
datarequired | RateSheetsData | RateSheetsData fields
| ||||||
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. | ||||||
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/pricing/ratesSchedule a vendor rate sheet (platform admin)
Schedule a complete new sheet for a future instant. It is a draft until then: settle cannot see it, and it can still be edited. Only one may be pending at a time.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
authorization | header | string | null |
Request bodyrequired
application/jsonRateSheetCreateBody| Field | Type | Description |
|---|---|---|
namerequired | string | min length 1 · max length 256 |
ratesrequired | object | object fieldsMap of string to object Map of string to string |
effective_fromrequired | string (date-time) | |
reasonrequired | string | min length 1 · max length 256 |
Responses
200Successful Responseapplication/jsonSuccessResponse_RateSheetData_| Field | Type | Description | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
request_idrequired | string | |||||||||||||||||||||||||||||||
success | true | default true | ||||||||||||||||||||||||||||||
datarequired | RateSheetData | RateSheetData fields
| ||||||||||||||||||||||||||||||
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. | ||||||||||||||||||||||||||||||
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/pricing/rates/{rates_id}Edit the scheduled rate sheet (platform admin)
Edit the draft in place: its instant may move later or earlier while it stays in the future, and moving it alone is a real edit. Once the instant passes the sheet is frozen — settled usage rows point at it — and this answers 409 `RATE_SHEET_IN_FORCE`.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
rates_idrequired | path | string (uuid) | |
authorization | header | string | null |
Request bodyrequired
application/jsonRateSheetEditBody| Field | Type | Description |
|---|---|---|
ratesrequired | object | object fieldsMap of string to object Map of string to string |
effective_fromrequired | string (date-time) | |
reasonrequired | string | min length 1 · max length 256 |
Responses
200Successful Responseapplication/jsonSuccessResponse_RateSheetData_| Field | Type | Description |
|---|---|---|
request_idrequired | string | |
success | true | default true |
datarequired | RateSheetData | RateSheetData fieldsRateSheetData, expanded above. |
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. |
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.