Start this tenant's production subscription
const url = 'https://api.vocapable.com/v1/subscription';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"workload_class":"engage","term":"mtm","extra_sessions":0,"receptionist_connections":0}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.vocapable.com/v1/subscription \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "workload_class": "engage", "term": "mtm", "extra_sessions": 0, "receptionist_connections": 0 }'Subscribe this tenant without ever retrying an ambiguous Stripe create blindly.
The request has three independently committed phases: a tenant-unique operation before
Stripe I/O, the provider correlation after Stripe answers, then the local subscription
mirror. A crash after any phase leaves a durable recovery point. In particular, a
retry that finds pending does not make another Stripe POST: its first outcome is
unknown and a signed customer.subscription.created webhook must reconcile it.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”The published card’s two axes plus the one published add-on quantity.
No price and no rate: the catalog owns every figure (vocapable_domain.rate_card),
and a body that could name one would be a client setting its own price.
extra_sessions is a quantity of the one published $200/mo add-on (ADR-0022) -
deliberately unbounded above, per the card (“any quantity”); actual concurrency stays
bounded by fleet capacity, which is an operations fact, not a checkout refusal.
receptionist_connections is the same shape for inbound answering (ADR-0025) and is
a count of connections bought on top of whatever the plan already includes: the
standalone receptionist plan’s $250 base fee carries the first one, so 0 there is a
working one-connection receptionist, while an outbound plan includes none and buys its
first connection here. receptionist_line_items owns that asymmetry; nothing on this
request states which item bills.
object
Responses
Section titled “Responses”Successful Response
object
Example
{ "workload_class": "engage", "term": "mtm", "sandbox_credit_unconfirmed": false}Validation Error
object
object
object
Examplegenerated
{ "detail": [ { "loc": [ "example" ], "msg": "example", "type": "example", "input": "example", "ctx": {} } ]}