Account

Use the account endpoint to find who owns a token, which plan the account has, and which scopes the token has. Call it when your client starts.

The machine-readable spec of all public endpoints: openapi.json.

The token identity model

The token identity tells your client about the caller of the request. It works with each valid token. The token does not need a scope, and the account does not need a paid plan.

The response has one shape for all callers. Each field is always present, except auth.clientId. A field with no value is null.

FieldMeaning
idThe ID (a UUID) of the user who owns the token.
emailThe email address of the user, or null when the user has no email address.
planThe plan of the account now: trial, pro, or none. The REST API needs a trial or Pro plan. With none, most other endpoints return 403 with the code permission.
trialEndsAtThe end of the trial, as an ISO 8601 UTC instant. The value is null when plan is not trial.
subscriptionThe paid subscription, or null when the account has no subscription (for example during a trial with no card).
subscription.providerThe store that bills the subscription: web or apple.
subscription.statusactive, past_due, or canceled. An active or a past_due subscription gives the pro plan.
subscription.currentPeriodEndsAtThe end of the current billing period, as an ISO 8601 UTC instant, or null.
subscription.cancelAtPeriodEndtrue when the subscription stops at the end of the current period.
offer.kindentitled when the subscription status is active or past_due. Otherwise paynow.
emailSubscribedtrue when the user gets email updates from Reassign.
scopesThe scopes of the token: events:read, events:write, or both. A token with events:write can also read, also when scopes does not show events:read. The list does not show scopes that Reassign does not know.
auth.viaHow the caller authenticated. pat: a Personal Access Token. oauth: an OAuth access token. session: the session of the Reassign web app.
auth.clientIdThe ID of the OAuth client. The response includes this field only for an OAuth access token.
  • Name
    id
    Type
    string, required
    Description
  • Name
    plan
    Type
    "trial" | "pro" | "none", required
    Description
  • Name
    trialEndsAt
    Type
    string | null, required
    Description
  • Name
    subscription
    Type
    object | null, required
    Description
    4 fields
    • Name
      provider
      Type
      "web" | "apple", required
      Description
    • Name
      status
      Type
      "active" | "past_due" | "canceled", required
      Description
    • Name
      currentPeriodEndsAt
      Type
      string | null, required
      Description
    • Name
      cancelAtPeriodEnd
      Type
      boolean, required
      Description
  • Name
    email
    Type
    string | null, required
    Description
  • Name
    offer
    Type
    object, required
    Description
    1 fields
    • Name
      kind
      Type
      "paynow" | "entitled", required
      Description
  • Name
    emailSubscribed
    Type
    boolean, required
    Description
  • Name
    scopes
    Type
    "events:read" | "events:write"[], required
    Description
  • Name
    auth
    Type
    object, required
    Description
    2 fields
    • Name
      via
      Type
      "oauth" | "pat" | "session", required
      Description
    • Name
      clientId
      Type
      string
      Description

GET/api/v1/me

Get the token identity

Get the identity, the plan, and the scopes of the caller.

  • All plans can call this endpoint, also none. Thus your client can read plan and scopes first. Then it does not have to find a 403 error.
  • A token with no scope can also call this endpoint.
  • This endpoint takes no query parameters. An unknown query parameter returns 422 with the code validation.

Refer to Errors for the error format.

Response fields

  • Name
    id
    Type
    string, required
    Description
  • Name
    plan
    Type
    "trial" | "pro" | "none", required
    Description
  • Name
    trialEndsAt
    Type
    string | null, required
    Description
  • Name
    subscription
    Type
    object | null, required
    Description
    4 fields
    • Name
      provider
      Type
      "web" | "apple", required
      Description
    • Name
      status
      Type
      "active" | "past_due" | "canceled", required
      Description
    • Name
      currentPeriodEndsAt
      Type
      string | null, required
      Description
    • Name
      cancelAtPeriodEnd
      Type
      boolean, required
      Description
  • Name
    email
    Type
    string | null, required
    Description
  • Name
    offer
    Type
    object, required
    Description
    1 fields
    • Name
      kind
      Type
      "paynow" | "entitled", required
      Description
  • Name
    emailSubscribed
    Type
    boolean, required
    Description
  • Name
    scopes
    Type
    "events:read" | "events:write"[], required
    Description
  • Name
    auth
    Type
    object, required
    Description
    2 fields
    • Name
      via
      Type
      "oauth" | "pat" | "session", required
      Description
    • Name
      clientId
      Type
      string
      Description

Responses

StatusCodesMeaning
200—Success.
401unauthorizedNo Bearer token and no session cookie, or the token is invalid, expired, or revoked. The response carries a WWW-Authenticate challenge that points at the protected-resource metadata.
403permissionA cookie session from another site gets permission "Cross-origin request."
422validationThe request has a query parameter; this operation takes none.
429rate_limitedToo many requests. The edge firewall limits each IP to 2000 requests per minute across /api/v1; that 429 comes from the edge and can have a body that is not this JSON and no Retry-After header. When an edge 429 has no Retry-After, retry after 60 seconds. The app also limits each Bearer credential to 600 requests per minute, and some routes limit each user. These limits return this body. This app 429 always has Retry-After: retry after that number of seconds.
503internalA fault on our side. The request is safe to retry.

Request

GET
/api/v1/me
curl "https://reassign.app/api/v1/me" \
  -H "Authorization: Bearer rsk_live_YOUR_TOKEN"

Response

{
  "id": "00000000-0000-4000-8000-000000000042",
  "email": "user@example.com",
  "plan": "pro",
  "trialEndsAt": null,
  "offer": {
    "kind": "entitled"
  },
  "subscription": {
    "provider": "web",
    "status": "active",
    "currentPeriodEndsAt": "2026-09-13T08:00:00.000Z",
    "cancelAtPeriodEnd": false
  },
  "emailSubscribed": true,
  "scopes": [
    "events:read",
    "events:write"
  ],
  "auth": {
    "via": "oauth",
    "clientId": "reassign-ios"
  }
}