Docs
Dashboard
API reference / AccountBeta

Get who is calling

Also answered for a suspended project, so the console can say why. With an API key: its project and its organization's summary (role null), and organizations is null. With a console login: also every organization the user belongs to, with their role and the projects they reach.

GET/v1/auth/me

Request

Method and pathGET/v1/auth/me
Base URLhttps://api.boxline.dev
AuthenticationYour API key in the x-api-key header (or Authorization: Bearer). The examples read it from BOXLINE_API_KEY.
curl "https://api.boxline.dev/v1/auth/me" \  -H "x-api-key: $BOXLINE_API_KEY"

Responses

200 OK

Who is calling.

Fields

NameTypeDefaultAllowed valuesDescription
userobject | null––null when calling with an API key.
user.idstring––
user.emailstring––Format: email.
user.namestring | null––The user's name (signup
user.isAdminboolean––The email is in ADMIN_EMAILS and confirmed (an unconfirmed address is not an admin).
user.emailVerifiedboolean––The user confirmed the email (the emailed code, a completed password reset or an accepted invitation). While false, the console offers to confirm it (/v1/auth/confirm-email/send).
user.emailConfirmationRequiredboolean––True only for an account made by signup that has not entered its confirmation code yet: it is held back until it does, and the console shows the code page. Never true for accounts made before this rule or confirmed in another way, and false where no mail is delivered (production with the outbox mailer).
user.emailConfirmationAvailableboolean––This server emails confirmation codes: /v1/auth/confirm-email/send can work. False in production with the outbox mailer.
user.termsCurrentVersionstring––The current terms version: what accept-terms takes.
user.termsVersionstring | null––The latest terms version the user accepted (a date), or null.
user.termsUpdateboolean––The current terms are newer than termsVersion: the console asks the user to accept them.
impersonatedByobject | null––The admin acting as this user, if any.
impersonatedBy.idstring––
impersonatedBy.emailstring––Format: email.
impersonatedBy.namestring | null––The user's name (signup
organizationobject | null––The current organization (an API key's own project's; role null), or null for a console login in none.
organization.idstring––
organization.namestring––
organization.planstring––
organization.personalboolean––The user's personal organization (made at signup).
organization.suspendedobject | null––
organization.suspended.atstring––Format: date-time.
organization.suspended.reasonstring | null––
organization.rolestring | null–owner, admin, developer, viewer, billingThe caller's role (null with an API key).
projectobject | null––The current project; null only for a console login without one (no project reached there, or the billing role).
project.idstring––
project.namestring––
project.planstring––The project's organization's plan.
project.orgIdstring––
project.concurrencyCapinteger | null––The project's own limit on running sessions, below the organization's (null: none).
project.suspendedobject | null––
project.suspended.atstring––Format: date-time.
project.suspended.reasonstring | null––
project.limitsobject––
project.limits.idstring––
project.limits.namestring––
project.limits.priceUsdnumber | null––null = custom price.
project.limits.includedUsdnumber––
project.limits.concurrencyinteger––
project.limits.maxTimeoutSecondsinteger––
project.limits.modelSpendCapUsdnumber | null––null = no cap.
project.limits.proxyGbPerMonthnumber | null––null = no cap.
project.limits.captchaSolvesPerMonthinteger | null––0 = not on this plan, null = no cap.
project.limits.maxCredentialsinteger––Credentials a project may keep (passwords and secrets together).
project.limits.maxProfilesinteger | null––Browser profiles a project may keep; null = no limit (Free 10, Hobby 100, Startup 500, Scale 2000).
project.limits.maxProfileBytesinteger | null––Bytes a project's profiles may hold together; null = no limit (Free 50 MB, Hobby 1 GB, Startup 5 GB, Scale 20 GB).
project.limits.searchesPerMonthinteger | null––Web searches included per calendar month (UTC); null = no limit.
project.limits.extraSearchesPer1000Usdnumber | null––Price per 1,000 searches beyond searchesPerMonth; null = no searches beyond it (402 plan_limit).
project.limits.webhookEndpointsinteger | null––Webhook endpoints a project may have; null = no limit.
project.limits.tasksinteger | null––Tasks a project may have; null = no plan limit (1,000 per project at most).
project.limits.schedulesinteger | null––Tasks with a schedule switched on; 0 = no schedules, null = no limit.
project.limits.retentionDaysinteger––Days an ended session's recording, logs and agent-run steps are kept (Free 7, Hobby and Startup 30, Scale 90). From 1 to 365.
project.limits.maxCrawlPagesinteger––The most pages one crawl may ask for (Free 200, paid plans 1000). At least 1.
project.limits.featuresobject––What the plan may use.
project.limits.features.shellboolean––
project.limits.features.profilesboolean––
project.limits.features.recordingboolean––
project.limits.features.realisticBrowserboolean––
project.limits.features.residentialProxyboolean––
project.limits.features.datacenterProxyboolean––
project.limits.features.customProxyboolean––
project.limits.features.captchaSolvingboolean––
project.limits.features.agentRunsboolean––
project.limits.features.stepsboolean––
project.limits.features.extractboolean––
project.limits.features.quickApisboolean––
project.limits.features.crawlboolean––
project.limits.features.loginDetailsboolean––Credentials of type password, with their 2FA codes.
project.limits.features.platformModelsboolean––Model calls on Boxline's own keys. Off on Free, which runs models on the project's own keys only.
project.limits.features.extensionsboolean––Chrome extensions (upload them
project.limits.features.webSearchboolean––
project.limits.publicboolean––
project.limits.organizationIdstring | null––Set only on a private plan: the one organization it is for.
project.trajectoriesobject––
project.trajectories.enabledboolean––
project.trajectories.noticeSeenAtstring | null––Format: date-time.
project.trajectories.decidedBystring | null––The user who made the last choice (null for an API key).
organizationsobject[] | null––Every organization of the user (console logins); null with an API key.
organizations[].idstring––
organizations[].namestring––
organizations[].planstring––
organizations[].personalboolean––The user's personal organization (made at signup).
organizations[].suspendedobject | null––
organizations[].suspended.atstring––Format: date-time.
organizations[].suspended.reasonstring | null––
organizations[].rolestring | null–owner, admin, developer, viewer, billingThe caller's role (null with an API key).
organizations[].projectAccessstring–all, chosen, noneall projects (now and future), chosen ones (projectIds), or none (the billing role).
organizations[].projectsobject[]––The projects the user reaches there.
organizations[].projects[].idstring––
organizations[].projects[].namestring––
Response 200
{  "user": {    "id": "usr_Q2x9L0aPz7NmK3Jb",    "email": "ada@example.com",    "name": "Work account",    "isAdmin": false,    "emailVerified": false,    "emailConfirmationRequired": false,    "emailConfirmationAvailable": false,    "termsCurrentVersion": "2026-09-29",    "termsVersion": "2026-09-29",    "termsUpdate": false  },  "impersonatedBy": {    "id": "usr_Q2x9L0aPz7NmK3Jb",    "email": "ada@example.com",    "name": "Work account"  },  "organization": {    "id": "org_Hk2Lq8Zx0Vb5Nm1C",    "name": "Work account",    "plan": "free",    "personal": false,    "suspended": {      "at": "2026-09-29T10:00:00.000Z",      "reason": "…"    },    "role": "owner"  },  "project": {    "id": "prj_Hk2Lq8Zx0Vb5Nm1C",    "name": "Work account",    "plan": "free",    "orgId": "org_Hk2Lq8Zx0Vb5Nm1C",    "concurrencyCap": 0,    "suspended": {      "at": "2026-09-29T10:00:00.000Z",      "reason": "…"    },    "limits": {      "id": "hobby",      "name": "Work account",      "priceUsd": 0,      "includedUsd": 0,      "concurrency": 0,      "maxTimeoutSeconds": 0,      "modelSpendCapUsd": 0,      "proxyGbPerMonth": 0,      "captchaSolvesPerMonth": 0,      "maxCredentials": 0,      "maxProfiles": 0,      "maxProfileBytes": 0,      "searchesPerMonth": 0,      "extraSearchesPer1000Usd": 0,      "webhookEndpoints": 0,      "tasks": 0,      "schedules": 0,      "retentionDays": 1,      "maxCrawlPages": 1,      "features": {        "shell": false,        "profiles": false,        "recording": false,        "realisticBrowser": false,        "residentialProxy": false,        "datacenterProxy": false,        "customProxy": false,        "captchaSolving": false,        "agentRuns": false,        "steps": false,        "extract": false,        "quickApis": false,        "crawl": false,        "loginDetails": false,        "platformModels": false,        "extensions": false,        "webSearch": false      },      "public": false,      "organizationId": "…"    },    "trajectories": {      "enabled": false,      "noticeSeenAt": "2026-09-29T10:00:00.000Z",      "decidedBy": "…"    }  },  "organizations": [    {      "id": "org_Hk2Lq8Zx0Vb5Nm1C",      "name": "Work account",      "plan": "free",      "personal": false,      "suspended": {        "at": "2026-09-29T10:00:00.000Z",        "reason": "…"      },      "role": "owner",      "projectAccess": "all",      "projects": [        {          "id": "…",          "name": "Work account"        }      ]    }  ]}

Errors

Errors have a matching HTTP status and the same body. code is stable, so check it in your code; message is for people. See Errors and request ids.

StatusCodesWhen
401 UnauthorizedunauthorizedMissing or invalid API key.
Error body
{  "error": {    "code": "not_found",    "message": "session not found",    "requestId": "req_4fJx0aQm2Lk9Pz7N"  }}

Learn more

These docs describe a beta API. Endpoints, fields and SDK methods may change before general availability; breaking changes will be listed in the changelog.