Skip to content

Accept an invitation

The invitations.accept operation: POST /api/v1/invitations/accept in the REST API and the invitations_accept tool in the MCP server.

POST/api/v1/invitations/accept

Accepts an invitation: you become a member of the organization with the invitation's role and scope. You must be signed in with the address the invitation was sent to, and the invitation must be pending (not accepted, revoked or older than 7 days). Live-mode access follows the role (developers start without it). Returns the new membership and the organization, whose console is /console/{slug}.

Who can call it: any signed-in user holding the token from the invitation link.

At a glance

  • REST: POST /api/v1/invitations/accept
  • MCP tool: invitations_accept
  • Operation ID: invitations.accept
  • Scope: Platform
  • Permission: account:write
  • Risk tier: write
  • Dry run: Supported (send Ownrecord-Dry-Run: true)
  • Idempotency: Idempotency-Key required
  • Modes: Test and live
  • Authentication: API key with the account:write scope
  • Since: M1

Request

Body

A JSON object (Content-Type: application/json):

FieldTypeRequiredDescription
tokenstringYes

Response

200 OK with a JSON object:

FieldTypeDescription
membershipobject
membership.idmem_… ID
membership.object"membership"
membership.orgIdorg_… ID
membership.userIdusr_… ID
membership.roleone of org_owner, org_admin, billing_admin, finance, tax_manager, support, developer, viewer
membership.scopeobject
membership.livemodeAccessboolean
membership.invitedByusr_… ID or null
membership.userobject or null
membership.createdAtdate-time
membership.updatedAtdate-time
organizationobject
organization.idorg_… ID
organization.slugstring
organization.namestring

Examples

Accept an invitation to a brand

HTTP
POST /api/v1/invitations/accept
Authorization: Bearer or_test_…
Idempotency-Key: 3f1c9a52-7d0e-4b8f-9a61-0c2d5e8b7f14
Content-Type: application/json

{
  "token": "ExampleOnlyNotARealInvitationToken000000000"
}

Response (200):

JSON
{
  "membership": {
    "id": "mem_01m4tx5nj8emwbyf7y9vcf47x6",
    "object": "membership",
    "orgId": "org_01m4tx5nj7ekd958x53w4bntcg",
    "userId": "usr_01m4tx5nj8emwbyf7y9vcf47xb",
    "role": "developer",
    "scope": {
      "type": "brand",
      "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4"
    },
    "livemodeAccess": false,
    "invitedBy": "usr_01m4tx5nj8emwbyf7y9vcf47xa",
    "user": {
      "email": "dev@acme.example",
      "name": "Dana Developer"
    },
    "createdAt": "2026-10-13T12:00:00.000Z",
    "updatedAt": "2026-10-13T12:00:00.000Z"
  },
  "organization": {
    "id": "org_01m4tx5nj7ekd958x53w4bntcg",
    "slug": "acme",
    "name": "Acme"
  }
}

Errors

CodeHTTP statusWhenWhat to do
validation_failed400The token is malformed.Fix the fields listed in details.issues and send the request again.
invitation_invalid404No invitation has this token, or what it grants no longer exists.Check that you opened the whole link from the invitation email, or ask the person who invited you to send a new invitation.
invitation_expired409The invitation is older than 7 days.Ask the person who invited you to send a new invitation.
invitation_revoked409The invitation was revoked.Ask the person who invited you to send a new invitation.
invitation_already_accepted409The invitation was already accepted.Open the console to see your organizations. Each invitation works once.
invitation_email_mismatch403You're signed in with another address than the invited one.Sign out, then sign in with the address the invitation was sent to. Or ask for an invitation to your own address.
membership_exists409You already have a membership at this scope.Change the role of the existing membership instead of adding another one.
entitlement_required403The organization's members.max is reached.Upgrade the organization's plan, or remove something to get back under the limit.
version_conflict409The invitation changed at the same time (for example, it was revoked).Fetch the object again and retry the change.
permission_denied403The caller isn't a signed-in user.Ask an organization owner or admin for a role or scope that allows this action.

It can also return these common errors: api_version_unsupported, invalid_json, unsupported_media_type, authentication_required, api_key_invalid, resource_not_found, idempotency_key_required, idempotency_key_reused, idempotency_in_progress, rate_limited, internal_error.