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.
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
Path Parameters
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"
}POSTCreate a member link code
Creates a one-time code that links an identity on the intended platform to this Arcalotl member. The code expires after 10 minutes. Creating a new code for the same member and platform invalidates the previous code; letting a code expire does not change the member or their entitlements. Requires the `members:write` scope.
POSTAttach your user id to a member
Maps an operator-owned `{namespace, external_user_id}` onto an existing member, for example a buyer who first subscribed through a bot and later signed into your app. Each active entitlement is republished as `member.entitlement.updated` carrying the new subject. Re-sending the identical mapping is a no-op; a subject already mapped to another member, or a member that already has a subject in that namespace, answers `409 conflict`. Requires the `members:write` scope.