ArcalotlArcalotl
Checkout Links

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.

Serverhttps://api.arcalotl.com
POST
/v1/checkout-links
AuthorizationBearer <token>

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

Idempotency-Key?string

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.

Length1 <= length <= 255

Request 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"
}