Create ai session checkout

POST: {"hours": <positive integer>, "existing_token": "..." (optional, for topup)} Returns {"checkout_url": ..., "token": ...} - the token is available immediately, before payment completes, so the frontend can store it and poll for activation once Stripe redirects back.

POST /++create_ai_session_checkout

AI Tutor Sessions

Authentication

Public — no authentication required. Also requires a registered Integrator subscription.

This endpoint requires the calling application to be registered as an Integrator. Every call must identify the registration via a registration_id parameter (or an X-Client-Id header), and authenticate using one of the following methods, selected with the subscription_method parameter:

  • referer — The request's HTTP Referer header must match one of the domains authorized for this Integrator registration.
  • ip — The request's source IP address must match one of the IP addresses authorized for this Integrator registration.
  • client_token — A client token issued at registration time is supplied with the request.

Register as an Integrator and configure authorized domains, IP addresses, or a client token.

Request

Content type: application/json

NameInTypeRequiredDescription
BODYbodystringNo—
hoursbodystringNo—
existing_tokenbodystringNo—
return_urlbodystringNo—
tokenquerystringNoSent by the web client (found via frontend call-site tracing).

Example request body

{
  "BODY": "example_value",
  "hours": "example_value",
  "existing_token": "REDACTED",
  "return_url": "https://example.com/sample-page"
}

Responses

StatusMeaning
200Successful response.
400Invalid JSON body.
500AI session price lookup failed
401Unauthorized - missing or invalid Integrator authentication (registration_id/X-Client-Id, plus referer/IP/client_token).
403Forbidden - the current user or Integrator registration does not have sufficient permissions.

Example response (illustrative - field names only, values are placeholders)

{
  "checkout_url": "https://example.com/sample-page",
  "token": "REDACTED"
}