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.
| Field | Meaning |
|---|---|
id | The ID (a UUID) of the user who owns the token. |
email | The email address of the user, or null when the user has no email address. |
plan | The 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. |
trialEndsAt | The end of the trial, as an ISO 8601 UTC instant. The value is null when plan is not trial. |
subscription | The paid subscription, or null when the account has no subscription (for example during a trial with no card). |
subscription.provider | The store that bills the subscription: web or apple. |
subscription.status | active, past_due, or canceled. An active or a past_due subscription gives the pro plan. |
subscription.currentPeriodEndsAt | The end of the current billing period, as an ISO 8601 UTC instant, or null. |
subscription.cancelAtPeriodEnd | true when the subscription stops at the end of the current period. |
offer.kind | entitled when the subscription status is active or past_due. Otherwise paynow. |
emailSubscribed | true when the user gets email updates from Reassign. |
scopes | The 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.via | How the caller authenticated. pat: a Personal Access Token. oauth: an OAuth access token. session: the session of the Reassign web app. |
auth.clientId | The 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 readplanandscopesfirst. Then it does not have to find a403error. - A token with no scope can also call this endpoint.
- This endpoint takes no query parameters. An unknown query parameter returns
422with the codevalidation.
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
| Status | Codes | Meaning |
|---|---|---|
200 | — | Success. |
401 | unauthorized | No 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. |
403 | permission | A cookie session from another site gets permission "Cross-origin request." |
422 | validation | The request has a query parameter; this operation takes none. |
429 | rate_limited | Too 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. |
503 | internal | A fault on our side. The request is safe to retry. |
Request
GET
/api/v1/mecurl "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"
}
}