Skip to content
ApiqDevelopers
API v1.64.0Open console
API referenceidentity

Go live capped

POST/v1/activation:go-live
Idempotency-Key requiredAccepts bearer

Go live, capped — the Owner asks to go live and operators review it

The Owner's explicit go-live on the CAPPED flow.Show moreThe Owner's explicit go-live on the CAPPED flow. It replaces the automatic promotion of 1.51.0: completing the last required step no longer activates the tenant by itself. When every required CAPPED step but go_live is done (verify_email, business_profile, business_verification, terms and money_model; a step in_review is not done) and the work e-mail is satisfied (ActivationState.workEmail.required false, or verifiedAt set), the tenant turns LIVE with tier LIVE_CAPPED and its daily cap (limits; GET /v1/activation/limits), actor the calling Owner, with no go-live signoff and no ops approval; step go_live then reads done, and the answer is the rail as GET /v1/activation reads it after the change. The lifecycle fact and events, and the tenant.live notification, are emitted as 1.51.0's promotion did. Refusals, all 409 CONFLICT and nothing changed: details.reason COUNTRY_NOT_LIVE (details.country; live bookings are not open for the tenant's country yet, ActivationState.liveAvailable false, checked first), then PREREQUISITES_OPEN (details.open lists the open step keys in rail order), WORK_EMAIL_REQUIRED (prove a work e-mail first, POST /v1/activation/work-email:send-code), ALREADY_LIVE (the tenant is LIVE already; a replay of the same Idempotency-Key answers the first answer instead) and FLOW_NOT_CAPPED on the nine-step rail (go live there with the signoffs of /admin/v1/go-live). Human session only; Owner only. No request body (an empty JSON object is accepted and ignored). Idempotency-Key required. Audited (activation.went_live, with the tier and the cap). a business goes live ONLY once the verification provider's verdict is verified (ActivationState.businessVerification.status verified; business_verification done). While the case is not_submitted, in_progress, in_review, needs_more or rejected the refusal stays 409 CONFLICT PREREQUISITES_OPEN with business_verification in details.open (no new reason; a client reads businessVerification for why). Once verified, the Owner may ask to go live (the go-live review below; amended the same day, it replaces "go-live is immediate"). going live goes to an operator review. The call no longer turns the tenant LIVE: it opens a go-live review (ActivationState.goLiveReview, GoLiveReview, status in_review) for the products asked for (optional body GoLiveRequest.products, canonical product codes; absent means every product of the tenant's sandbox capabilities) and files an operator approval of kind GO_LIVE_REVIEW (OpsApproval; scope.key the review id), then answers 202 Accepted with the rail as GET /v1/activation reads it: tenant still TRIAL (tier null, liveAt null), step go_live in_review, a golive.in_review notification. Each product carries its checks (GoLiveCheck): business_details, by operator, and test_calls, by system (the tenant's own sandbox search, reprice, orders and cancel calls for that product). The test calls are required for the approval, not for this call: the Owner may ask before finishing them, the review opens, and an operator cannot approve until test_calls is passed for every requested product; goLiveReview shows what is missing per product (verbsSeen) and step sandbox_booking names it in needs[]. Operators decide through the existing approvals queue, with the TENANT_ACTIVATE approver permission and step-up: approving approves every requested product, turns the tenant LIVE, tier LIVE_CAPPED, with its daily cap (actor the approving operator), sets go_live done and emits tenant.live and golive.approved; rejecting sets the review changes_requested with the operator's note (go_live needs_you) and the Owner may call this again, which opens a new review. expectedBy is the answer the platform aims for, "usually within one business day"; each decision is e-mailed to the Owner and to the tenant's operations contact e-mail (GET /admin/v1/contact-emails operations; the Owner's address when unset, then sent once); test mode keeps working throughout. Refusals as above, plus 409 CONFLICT GO_LIVE_IN_REVIEW while a review is in_review (checked after ALREADY_LIVE), and 400 VALIDATION (details.field products) for a duplicate or a product not in the tenant's sandbox capabilities (details.reason PRODUCT_NOT_AVAILABLE); nothing is filed on a refusal. A replay of the same Idempotency-Key with the same body answers the first 202; the same key with other products is 409 IDEMPOTENCY_CONFLICT. Where the operator approvals queue is not running on the deployment the call is 501 NOT_IMPLEMENTED CAPPED_FLOW_UNAVAILABLE and nothing is filed, as POST /v1/activation/limit-requests. The 200 answer of round 2 (tenant LIVE at once) is not produced any more. Audited (activation.go_live_requested with the products; activation.went_live with the tier, the cap and the approval id when approved).

Headers

  • Idempotency-KeystringRequired
    Mandatory on mutations: **48h TTL**; replay with same body-hash returns the original response with Idempotency-Replayed true; same key + different body is 409 IDEMPOTENCY_CONFLICT; in-flight duplicate…Show moreMandatory on mutations: **48h TTL**; replay with same body-hash returns the original response with Idempotency-Replayed true; same key + different body is 409 IDEMPOTENCY_CONFLICT; in-flight duplicate is 409 IDEMPOTENCY_IN_PROGRESS.

Request body

  • productsarray of stringOptional

Responses

  • 202The go-live review is open — the rail after the request: tenant still TRIAL, step go_live in_review, goLiveReview in_review with the requested products and their checksActivationState
  • 400VALIDATION details.field products — a duplicate code, a malformed code, or a product not in the tenant's sandbox capabilities (details.reason PRODUCT_NOT_AVAILABLE); nothing is filedApiErrorResponse
  • 401
    UNAUTHENTICATED — missing or expired token.Show moreUNAUTHENTICATED — missing or expired token. Declared on every operation because `security` is declared globally at the document root: every route is authenticated, so every route can answer 401.
    ApiErrorResponse
  • 403ApiErrorResponse
  • 405
    VALIDATION — the public edge serves GET, POST, PUT, PATCH and DELETE only; any other method is refused before the platform sees it (details.reason METHOD_NOT_ALLOWED, details.source edge).Show moreVALIDATION — the public edge serves GET, POST, PUT, PATCH and DELETE only; any other method is refused before the platform sees it (details.reason METHOD_NOT_ALLOWED, details.source edge). Not retryable as sent.
    ApiErrorResponse
  • 409
    CONFLICT COUNTRY_NOT_LIVE (details.country; checked before PREREQUISITES_OPEN), PREREQUISITES_OPEN (details.open), WORK_EMAIL_REQUIRED, ALREADY_LIVE, GO_LIVE_IN_REVIEW or FLOW_NOT_CAPPED; or…Show moreCONFLICT COUNTRY_NOT_LIVE (details.country; checked before PREREQUISITES_OPEN), PREREQUISITES_OPEN (details.open), WORK_EMAIL_REQUIRED, ALREADY_LIVE, GO_LIVE_IN_REVIEW or FLOW_NOT_CAPPED; or IDEMPOTENCY_CONFLICT | IDEMPOTENCY_IN_PROGRESS
    ApiErrorResponse
  • 413
    VALIDATION — the request body is larger than the surface's limit.Show moreVALIDATION — the request body is larger than the surface's limit. Not retryable as sent: shrink the body. Declared on every operation that takes a request body. details carries exactly one key, maxBodyBytes (integer): the limit that applies to this surface, in bytes.
    ApiErrorResponse
  • 414
    VALIDATION — the request URI (path and query string) is longer than 8 KiB; the public edge refuses it before the platform sees it (details.reason URI_TOO_LONG, details.source edge).Show moreVALIDATION — the request URI (path and query string) is longer than 8 KiB; the public edge refuses it before the platform sees it (details.reason URI_TOO_LONG, details.source edge). Not retryable as sent: send long input in the body of a POST.
    ApiErrorResponse
  • 415
    VALIDATION — a request body that is not JSON (application/json or application/*+json; a form body only on the OAuth token routes).Show moreVALIDATION — a request body that is not JSON (application/json or application/*+json; a form body only on the OAuth token routes). The public edge refuses it before the platform sees it (details.reason UNSUPPORTED_MEDIA_TYPE, details.source edge). Not retryable as sent: send Content-Type application/json. Declared on every operation that takes a JSON request body.
    ApiErrorResponse
  • 500INTERNAL — a bug, and traceId is the support handle.ApiErrorResponse
  • 501Not retryable; the nine-step rail of GET /v1/activation is unchanged.ApiErrorResponse

Errors you should handle

Branch on code and honour retryable — never on the HTTP status alone.

400VALIDATION
CRU isn't one of your sandbox products. Choose from the products you tested.
not retryable
401UNAUTHENTICATED
The bearer token is expired. Re-authenticate and retry.
not retryable
403PERMISSION_DENIED
Reading wallets needs the finance:read permission.
not retryable
405VALIDATION
This method is not served.
not retryable
409CONFLICT
Live bookings aren't available in your country yet. Keep testing in the sandbox.
not retryable
409IDEMPOTENCY_CONFLICT
Idempotency-Key 7f0c33d1-9a1e-4d2c-9f77-1c0f2b3a4d55 was used with a different body; never executed
not retryable
409IDEMPOTENCY_IN_PROGRESS
A request with this Idempotency-Key is still executing
retryable
413VALIDATION
The request body is larger than this API accepts (262144 bytes).
not retryable
414VALIDATION
The request URI is longer than 8 KiB.
not retryable
415VALIDATION
Send application/json.
not retryable
500INTERNAL
An unexpected error occurred. Quote the traceId to support.
retryable
501NOT_IMPLEMENTED
The capped activation flow is not available on this deployment.
not retryable