A1 Lane

API reference

Base URL https://a1lane.ai. Authenticate with Authorization: Bearer <token>: a session token (ses_…) or a workspace-scoped API token (plt_…) with scopes read ⊂ write ⊂ publish. Tenant routes live under /api/v1/workspaces/{ws}; a workspace you cannot see is a 404. Errors are JSON {error, detail}; plan limits answer 402 with detail.code = plan_limit and an upgrade URL. Rate limits: sign-up, login and reset throttles; per-token limits on the MCP surface; platform pacing per account with deferred states instead of failures.

194 routes, generated from the running application. Changes and the deprecation policy: API changelog.

MethodPathSummary
GET/.well-known/oauth-authorization-serverRFC 8414 discovery for the product's own OAuth 2.0 authorization server.
GET/.well-known/oauth-protected-resourceRFC 9728: tells MCP clients which authorization server protects /mcp/v1.
GET/.well-known/oauth-protected-resource/mcp/v1RFC 9728: tells MCP clients which authorization server protects /mcp/v1.
GET/.well-known/openai-apps-challengeR-30: ChatGPT apps domain-verification challenge — the token comes from config only.
GET/api/v1/admin/analyticsadmin analytics
GET/api/v1/admin/billingadmin billing
GET/api/v1/admin/engagementLeg 7: engagement pipeline counts across workspaces (counts only, no tenant data).
GET/api/v1/admin/mcpR-35: per-tool call volume, error rate and latency across the deployment (?token= for one token).
GET/api/v1/admin/mcp/funnelDESIGN-V2 §8: the assistant journey funnel, attributed by OAuth client.
GET/api/v1/admin/quotaLeg 5b operator surface: every ledger bucket with its current-window usage.
PUT/api/v1/admin/quota/{key}PUT {capacity, source?}: a verified number (e.g. the Cloud Console allocation) drops in
GET/api/v1/admin/schedulerLeg 5d item 6: the tick gauge alone (fleet p95 + per-workspace, with its trip lines).
GET/api/v1/admin/statsadmin stats
GET/api/v1/admin/throttlesLeg 5b item 13 operator surface: durable throttle state (hits per kind / hashed key).
POST/api/v1/auth/loginauth login
POST/api/v1/auth/logoutauth logout
POST/api/v1/auth/reset/confirmauth reset confirm
POST/api/v1/auth/reset/requestauth reset request
POST/api/v1/auth/signupauth signup
POST/api/v1/auth/verify-emailauth verify email
POST/api/v1/billing/webhookStripe → us. Public route; the signature is the only credential. Raw body, no parsing
POST/api/v1/data-deletion/callbackMeta → us (Facebook Login / Instagram / Threads). Public; the signature is the only
GET/api/v1/engagement/coverageLeg 7: the public per-platform × metric coverage/freshness matrix, generated from code.
GET/api/v1/healthhealth
GET/api/v1/invites/{token}invite preview
POST/api/v1/invites/{token}/acceptinvite accept
DELETE/api/v1/meme delete
GET/api/v1/meme
GET/api/v1/me/2fame 2fa
POST/api/v1/me/2fa/disableme 2fa disable
POST/api/v1/me/2fa/enrollme 2fa enroll
POST/api/v1/me/2fa/recovery-codesme 2fa recovery
POST/api/v1/me/2fa/verifyme 2fa verify
GET/api/v1/me/exportme export
PUT/api/v1/me/passwordme password
GET/api/v1/me/preferencesAmendment 8a: the user's own display defaults (timezone, locale).
PUT/api/v1/me/preferencesAmendment 8a: the user's own display defaults (timezone, locale).
GET/api/v1/me/sessionsme sessions
POST/api/v1/me/sessions/revoke-allme sessions revoke all
DELETE/api/v1/me/sessions/{id}me session revoke
POST/api/v1/me/verify-email/resendme verify resend
POST/api/v1/meta/deauthorizeMeta → us when a person removes the app: Facebook Login / Instagram "Deauthorize Callback
GET/api/v1/plansPublic: the plan configuration the pricing page renders (one source of truth).
GET/api/v1/platformsplatforms
GET/api/v1/receipts/{token}receipt link public
GET/api/v1/review/{token}review view
POST/api/v1/review/{token}/decisionreview decide
GET/api/v1/review/{token}/mediareview media
GET/api/v1/statusPublic status page data: service health + rolling delivery-verification rates, aggregated
GET/api/v1/upload-links/{token}upload link public status
PUT/api/v1/upload-links/{token}/chunks/{n}upload link chunk
POST/api/v1/upload-links/{token}/completeupload link complete
POST/api/v1/upload-links/{token}/sessionupload link session
GET/api/v1/workspaceslist workspaces
POST/api/v1/workspacescreate workspace
DELETE/api/v1/workspaces/{ws}delete workspace
GET/api/v1/workspaces/{ws}get workspace
PUT/api/v1/workspaces/{ws}rename workspace
GET/api/v1/workspaces/{ws}/accountslist accounts
POST/api/v1/workspaces/{ws}/accountsconnect account
DELETE/api/v1/workspaces/{ws}/accounts/{id}disconnect account
GET/api/v1/workspaces/{ws}/accounts/{id}get account
GET/api/v1/workspaces/{ws}/accounts/{id}/best-timesLeg 7: best-time-to-post suggestions from this channel's own history (or not enough data).
GET/api/v1/workspaces/{ws}/accounts/{id}/choicesLeg 4: option values the platform enumerates for this account (e.g. Pinterest boards).
POST/api/v1/workspaces/{ws}/accounts/{id}/pausepause account
POST/api/v1/workspaces/{ws}/accounts/{id}/probeprobe account
GET/api/v1/workspaces/{ws}/accounts/{id}/queueaccount queue
POST/api/v1/workspaces/{ws}/accounts/{id}/reconnectreconnect account
POST/api/v1/workspaces/{ws}/accounts/{id}/resumeresume account
PUT/api/v1/workspaces/{ws}/accounts/{id}/settingsaccount settings
GET/api/v1/workspaces/{ws}/analyticsworkspace analytics
GET/api/v1/workspaces/{ws}/attentionattention
GET/api/v1/workspaces/{ws}/batcheslist batches
GET/api/v1/workspaces/{ws}/batches/{id}get batch
GET/api/v1/workspaces/{ws}/batches/{id}/receipt-linkslist receipt links
POST/api/v1/workspaces/{ws}/batches/{id}/receipt-linkscreate receipt link
GET/api/v1/workspaces/{ws}/benchmarksLeg 7: tracked public profiles (official routes only) with their latest numbers.
POST/api/v1/workspaces/{ws}/benchmarksLeg 7: track a public profile; refused with the reason where no official route exists.
DELETE/api/v1/workspaces/{ws}/benchmarks/{id}Leg 7: stop tracking a profile (its stored numbers go with it).
GET/api/v1/workspaces/{ws}/billingworkspace billing
POST/api/v1/workspaces/{ws}/billing/checkoutbilling checkout
POST/api/v1/workspaces/{ws}/billing/portalbilling portal
POST/api/v1/workspaces/{ws}/billing/reconcilebilling reconcile
GET/api/v1/workspaces/{ws}/calendarcalendar
GET/api/v1/workspaces/{ws}/connectionsItem 8: connection health (``?account=`` narrows to one account).
GET/api/v1/workspaces/{ws}/connections/reconnectconnections batch
GET/api/v1/workspaces/{ws}/digestLeg 6 item 3: the digest computed live for [since, until) (default: the last 24 hours) —
GET/api/v1/workspaces/{ws}/digestsdigest runs
POST/api/v1/workspaces/{ws}/digests/runRun the last complete period of a cadence now (owner/admin): idempotent per period.
GET/api/v1/workspaces/{ws}/duplicatesLeg 5b item 8: the Phase-gate duplicate count (open and resolved).
GET/api/v1/workspaces/{ws}/engagementLeg 7: engagement rollups per channel / platform over the window (unavailable excluded, counted).
GET/api/v1/workspaces/{ws}/eventsevents
GET/api/v1/workspaces/{ws}/exportexport
GET/api/v1/workspaces/{ws}/importsimport list
POST/api/v1/workspaces/{ws}/imports/previewLeg 6 item 1: dry-run an export (hootsuite | generic | buffer_analytics); nothing is posted.
GET/api/v1/workspaces/{ws}/imports/{id}import view
POST/api/v1/workspaces/{ws}/imports/{id}/commitimport commit
GET/api/v1/workspaces/{ws}/imports/{id}/rejected.csvimport rejected csv
GET/api/v1/workspaces/{ws}/inboxThe in-app notification feed (digests + R-41 alerts), minus the types the caller turned
GET/api/v1/workspaces/{ws}/ledgerLedger-first home: the newest receipts with their post + destination context.
GET/api/v1/workspaces/{ws}/mcp/idempotency/{tool}/{key}Leg 6 item 4(d): the durable idempotency record the stdio MCP server reads and writes
PUT/api/v1/workspaces/{ws}/mcp/idempotency/{tool}/{key}Leg 6 item 4(d): the durable idempotency record the stdio MCP server reads and writes
GET/api/v1/workspaces/{ws}/mediaMedia library (leg 3, L2): filter by tag / kind / search; archived assets on request.
POST/api/v1/workspaces/{ws}/mediaadd media
DELETE/api/v1/workspaces/{ws}/media/{id}delete media
GET/api/v1/workspaces/{ws}/media/{id}get media
PUT/api/v1/workspaces/{ws}/media/{id}update media
GET/api/v1/workspaces/{ws}/media/{id}/filemedia file
GET/api/v1/workspaces/{ws}/memberslist members
POST/api/v1/workspaces/{ws}/membersinvite member
DELETE/api/v1/workspaces/{ws}/members/{id}remove member
PUT/api/v1/workspaces/{ws}/members/{id}change member
POST/api/v1/workspaces/{ws}/members/{id}/resendresend invite
POST/api/v1/workspaces/{ws}/oauth/{platform}/chooseoauth choose
GET/api/v1/workspaces/{ws}/oauth/{platform}/startoauth start
GET/api/v1/workspaces/{ws}/pauseLeg 5b item 15: the workspace's durable pause state (workspace-wide + per-account).
POST/api/v1/workspaces/{ws}/pausepause workspace
GET/api/v1/workspaces/{ws}/postslist posts
POST/api/v1/workspaces/{ws}/postscreate post
POST/api/v1/workspaces/{ws}/posts/batchcreate batch
POST/api/v1/workspaces/{ws}/posts/importBulk CSV import (leg 3, L2): multipart 'file', text/csv body, or JSON {csv, mapping}.
POST/api/v1/workspaces/{ws}/posts/price-checkItem 9(a): the composer's live X pricing — the same pass create_post's warnings use.
DELETE/api/v1/workspaces/{ws}/posts/{id}delete post
GET/api/v1/workspaces/{ws}/posts/{id}get post
PUT/api/v1/workspaces/{ws}/posts/{id}update post
POST/api/v1/workspaces/{ws}/posts/{id}/approvalpost approval
POST/api/v1/workspaces/{ws}/posts/{id}/cancelcancel post
POST/api/v1/workspaces/{ws}/posts/{id}/destinations/{dest}/acknowledge-divergenceacknowledge divergence
POST/api/v1/workspaces/{ws}/posts/{id}/destinations/{dest}/confirm-deletedQ-DT-10 (G-30): confirm a manual delete no probe can settle (READBACK = False) —
POST/api/v1/workspaces/{ws}/posts/{id}/destinations/{dest}/continue-partscontinue parts
POST/api/v1/workspaces/{ws}/posts/{id}/destinations/{dest}/decline-finishdecline finish
GET/api/v1/workspaces/{ws}/posts/{id}/destinations/{dest}/finishfinish view
POST/api/v1/workspaces/{ws}/posts/{id}/destinations/{dest}/finish-checkLeg 6 item 2: run the destination's finish-check now and return the finish view.
POST/api/v1/workspaces/{ws}/posts/{id}/destinations/{dest}/mark-resolvedDiscord + Telegram leg (item 7, Q-DT-2): accept an unverifiable send as delivered —
POST/api/v1/workspaces/{ws}/posts/{id}/destinations/{dest}/missed-windowLeg 5b item 6: decide a held missed window (publish_now | next_slot | reschedule | cancel).
GET/api/v1/workspaces/{ws}/posts/{id}/destinations/{dest}/observationsLeg 5b item 4: the append-only observation records of one destination.
GET/api/v1/workspaces/{ws}/posts/{id}/destinations/{dest}/partsLeg 5b item 7: the destination's parts (thread parts, first comment, playlist add).
POST/api/v1/workspaces/{ws}/posts/{id}/destinations/{dest}/removalLeg 5b item 10: the ingestion seam for a platform removal event (no webhook receiver
POST/api/v1/workspaces/{ws}/posts/{id}/destinations/{dest}/reofferreoffer finish
POST/api/v1/workspaces/{ws}/posts/{id}/destinations/{dest}/resolveresolve destination
POST/api/v1/workspaces/{ws}/posts/{id}/destinations/{dest}/resolve-duplicateLeg 5b item 8: keep one native copy (the others route through unpublish) or keep both.
GET/api/v1/workspaces/{ws}/posts/{id}/destinations/{dest}/support-bundlesLeg 5b item 17: a destination's redacted support bundles (newest last).
POST/api/v1/workspaces/{ws}/posts/{id}/destinations/{dest}/unpublishLeg 5b item 9: start the unpublish chain for one live destination.
POST/api/v1/workspaces/{ws}/posts/{id}/duplicateduplicate post
GET/api/v1/workspaces/{ws}/posts/{id}/engagementLeg 7: one post's engagement per destination — latest values with asOf, reasons, series.
GET/api/v1/workspaces/{ws}/posts/{id}/handoffhandoff
POST/api/v1/workspaces/{ws}/posts/{id}/publishpublish post
GET/api/v1/workspaces/{ws}/posts/{id}/receipt-linkslist receipt links
POST/api/v1/workspaces/{ws}/posts/{id}/receipt-linkscreate receipt link
POST/api/v1/workspaces/{ws}/posts/{id}/recyclecreate recycle
POST/api/v1/workspaces/{ws}/posts/{id}/releaserelease post
POST/api/v1/workspaces/{ws}/posts/{id}/reschedulereschedule post
POST/api/v1/workspaces/{ws}/posts/{id}/retryretry post
GET/api/v1/workspaces/{ws}/posts/{id}/review-linkslist review links
POST/api/v1/workspaces/{ws}/posts/{id}/review-linkscreate review link
DELETE/api/v1/workspaces/{ws}/posts/{id}/review-links/{nonce}revoke review link
GET/api/v1/workspaces/{ws}/posts/{id}/revisionsItem 7a: the append-only revision history of a post.
POST/api/v1/workspaces/{ws}/posts/{id}/revisions/{n}/restoreItem 7a: restore revision N as a NEW revision (body may carry ``revision`` = the
GET/api/v1/workspaces/{ws}/quota/fitLeg 5b (C10): does a publish to ``account_id`` fit at ``at`` (default now), and if not,
POST/api/v1/workspaces/{ws}/receipt-links/{lid}/revokerevoke receipt link
GET/api/v1/workspaces/{ws}/recycleslist recycles
DELETE/api/v1/workspaces/{ws}/recycles/{id}stop recycle
GET/api/v1/workspaces/{ws}/reportsLeg 7: a composed report (delivery + engagement per channel, chosen window) as JSON or CSV.
GET/api/v1/workspaces/{ws}/reports/exports/{id}Leg 7: download one produced export (sign-in / token required; never mailed as an attachment).
GET/api/v1/workspaces/{ws}/reports/schedulesLeg 7: scheduled exports (weekly/monthly) and the exports they produced, with their state.
POST/api/v1/workspaces/{ws}/reports/schedulesLeg 7: schedule a weekly/monthly export mailed as a download link to workspace members.
DELETE/api/v1/workspaces/{ws}/reports/schedules/{id}Leg 7: stop a scheduled export (exports already produced stay downloadable).
POST/api/v1/workspaces/{ws}/resumeresume workspace
PUT/api/v1/workspaces/{ws}/settingsworkspace settings
PUT/api/v1/workspaces/{ws}/settings/digestdigest settings
GET/api/v1/workspaces/{ws}/settings/notification-preferencesAmendment 3a: the caller's own per-type channel preferences (email / in_app), plus the
PUT/api/v1/workspaces/{ws}/settings/notification-preferencesAmendment 3a: the caller's own per-type channel preferences (email / in_app), plus the
PUT/api/v1/workspaces/{ws}/settings/notificationsPUT {emails, webhook_url, webhook_secret?, events}: R-41 targets; the secret goes to the vault.
PUT/api/v1/workspaces/{ws}/settings/onboardingPUT {step: done|skipped|pending}: resumable, skippable onboarding steps (L5).
PUT/api/v1/workspaces/{ws}/settings/shortenerPUT {provider, domain?, token?}: the token goes to the vault, never to settings/export.
PUT/api/v1/workspaces/{ws}/settings/x-capsItem 9(c): owner/admin edit the workspace's soft/hard X caps (the 5b breaker enforces).
GET/api/v1/workspaces/{ws}/tokenslist tokens
POST/api/v1/workspaces/{ws}/tokenscreate token
DELETE/api/v1/workspaces/{ws}/tokens/{id}revoke token
GET/api/v1/workspaces/{ws}/tokens/{id}/usageLeg 6 amendment 4a: one token's MCP usage — the operator endpoint's own numbers.
POST/api/v1/workspaces/{ws}/upload-linkscreate upload link
GET/api/v1/workspaces/{ws}/upload-links/{id}upload link status
POST/api/v1/workspaces/{ws}/uploadscreate upload
GET/api/v1/workspaces/{ws}/uploads/{id}upload status
PUT/api/v1/workspaces/{ws}/uploads/{id}/chunks/{n}upload chunk
POST/api/v1/workspaces/{ws}/uploads/{id}/completecomplete upload
GET/api/v1/workspaces/{ws}/usage/xItem 9(b): the month's X spend — confirmed vs estimated, never blended — with pace and caps.
GET/mcp/listing.jsonR-30: directory listing metadata (name, description, icon, categories) from one place.
GET/oauth/{platform}/callbackPlatform redirect target (no login needed: the one-time state binds workspace + user).
GET/oauth2/authorizeConsent page: login (or sign-up) → choose workspace + scopes → Allow.
POST/oauth2/authorizeauthorize submit
POST/oauth2/registerRegister a public OAuth client (assistants register themselves on first connect).
POST/oauth2/revokeRFC 7009: revoke an access or refresh token. Always 200 (no token enumeration).
POST/oauth2/tokenAuthorization-code (PKCE) and refresh-token grants; refresh rotates both tokens.