Docs
Dashboard
API reference / AccountBeta

Log in

Starts a console login (cookie bx_session, 14 days). Limited per IP and per email; the RateLimit-* headers show the IP limit only.

POST/v1/auth/login

Request

Method and pathPOST/v1/auth/login
Base URLhttps://api.boxline.dev
AuthenticationNone. Anyone can call it.
Rate limitYes. See Rate limits for the numbers and headers.

Body

JSON with content-type: application/json. Required.

NameTypeDefaultAllowed valuesDescription
emailrequiredstring––Format: email.
passwordrequiredstring––At least 8 characters.
curl -X POST "https://api.boxline.dev/v1/auth/login" \  -H "content-type: application/json" \  -d '{"email": "ada@example.com", "password": "correct-horse-battery"}'

Responses

200 OK

Logged in.

Headers

  • Set-Cookie: bx_session: HttpOnly, SameSite=Lax, Path=/ (and Secure on https).
  • RateLimit-Limit: Requests allowed in the current window of this route's limit. (Rate limits)
  • RateLimit-Remaining: Requests left in the current window. (Rate limits)
  • RateLimit-Reset: Seconds until the window starts again. (Rate limits)

Fields

NameTypeDefaultAllowed valuesDescription
userobject––
user.idstring––
user.emailstring––Format: email.
user.namestring | null––The user's name (signup
organizationobject | null––The login's current organization (null when the user belongs to 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 login's current project (null when the user reaches none there).
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––
Response 200
{  "user": {    "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": "…"    }  }}

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.
429 Too Many Requestsrate_limited, concurrency_limitToo many requests, or the organization's concurrent sessions (its plan's) or the project's concurrencyCap are in use.
Error body
{  "error": {    "code": "not_found",    "message": "session not found",    "requestId": "req_4fJx0aQm2Lk9Pz7N"  }}

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