Create a hosted checkout link
Creates a real hosted checkout session for a buyer identified by a platform identity, and returns its URL. The tier must exist and be active within the community, the community must have an active payment provider and a configuration for the buyer's platform, and the buyer must be eligible (not already subscribed to the tier). `plan_id` may be omitted when the tier has exactly one active plan; otherwise the call answers `422 plan_required`. `expires_at` is present only when the provider reports a session expiry; Stripe hosted sessions otherwise expire per Stripe's defaults (24h). Supply an `Idempotency-Key` header to make retries safe.
Authorization
apiKey Community-scoped API key. Send it as Authorization: Bearer arclt_live_.... Keys carry scopes; endpoints that need a specific scope answer 403 missing_scope when the key lacks it.
In: header
Header Parameters
Opaque client-generated key (1-255 chars) that makes a write safe to retry for 24h. A replay of the same key and body returns the original response with Idempotent-Replayed: true. Reusing the key with a different body returns 422 idempotency_key_reuse; an in-flight duplicate returns 409 request_in_flight.
1 <= length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X POST "https://example.com/v1/checkout-links" \ -H "Idempotency-Key: 6f8a2c1e-4b3d-4e9a-9c21-2f0a1b7d5e44" \ -H "Content-Type: application/json" \ -d '{ "tier_id": "tier_01JMZX2A9F", "platform": "discord", "platform_uid": "218421075025461248" }'{
"url": "https://checkout.stripe.com/c/pay/cs_live_a1B2c3D4",
"expires_at": "2026-07-04T12:00:00Z"
}{
"type": "https://docs.arcalotl.com/api/errors#not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"code": "not_found"
}{
"type": "https://docs.arcalotl.com/api/errors#not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"code": "not_found"
}{
"type": "https://docs.arcalotl.com/api/errors#not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"code": "not_found"
}{
"type": "https://docs.arcalotl.com/api/errors#not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"code": "not_found"
}{
"type": "https://docs.arcalotl.com/api/errors#not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"code": "not_found"
}{
"type": "https://docs.arcalotl.com/api/errors#not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"code": "not_found"
}GETGet the analytics summary
Returns a pragmatic per-community rollup: monthly recurring revenue, active subscribers, and recent signups and cancels.
GETList projected public events
Polling and reconciliation feed. Ordered newest-first with keyset pagination. Filter by one or more event types, or resume after a known event id. Requires the events:read scope.