ArcalotlArcalotl
Members

Open the member portal for a member

Mints a short-lived link that signs this member into the Arcalotl member portal, scoped to your community, where they can change plan, cancel, update their card, and see invoices. Redirect your signed-in user to `url`; it expires after ten minutes. Pass `return_url` so the portal offers a way back to your app. Requires the `members:write` scope.

Serverhttps://api.arcalotl.com
POST
/v1/members/{id}/portal-sessions
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

Path Parameters

id*string

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/members/string/portal-sessions" \  -H "Content-Type: application/json" \  -d '{}'
{
  "url": "https://www.arcalotl.com/auth/portal/handoff/eyJtIjoibWVtXzAx...",
  "expires_at": "2026-08-01T12:10:00Z"
}
{
  "type": "https://docs.arcalotl.com/api/errors#invalid_request",
  "title": "Bad Request",
  "status": 400,
  "detail": "The 'cursor' parameter is not a valid cursor from a previous response.",
  "code": "invalid_request"
}
{
  "type": "https://docs.arcalotl.com/api/errors#unauthorized",
  "title": "Unauthorized",
  "status": 401,
  "detail": "A valid API key is required. Provide it as 'Authorization: Bearer arclt_live_...'.",
  "code": "unauthorized"
}
{
  "type": "https://docs.arcalotl.com/api/errors#missing_scope",
  "title": "Forbidden",
  "status": 403,
  "detail": "This API key is missing the required scope: subscriptions:read.",
  "code": "missing_scope"
}
{
  "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#invalid_request",
  "title": "Unprocessable Entity",
  "status": 422,
  "detail": "One or more request values are invalid.",
  "code": "invalid_request"
}
{
  "type": "https://docs.arcalotl.com/api/errors#rate_limited",
  "title": "Too Many Requests",
  "status": 429,
  "detail": "Rate limit exceeded. Retry after the interval in the Retry-After header.",
  "code": "rate_limited"
}