ADLR API

Script everything the web app can do. Create projects from your CI, push invoices from your time tracker, sync emails into your BI tool. Every action the UI performs is an HTTP endpoint you can call.

Authentication

All API requests require a Personal Access Token (PAT). Tokens are created and revoked by the workspace owner under Settings → Developer.

Pass the token in the Authorization header:

Authorization: Bearer adlr_pat_XXXXXXXXXXXX
A PAT inherits the owner's full workspace permissions. Treat it like a password — rotate periodically, don't commit to git, and revoke immediately if exposed.

Base URL

https://api.adlr.app

All endpoints under this base are covered by rate limits (see below) and HTTPS is mandatory.

Common endpoints

GET/api/projects
List all projects in your workspace.
curl https://api.adlr.app/api/projects \
  -H "Authorization: Bearer adlr_pat_XXXXXXXXXXXX"
POST/api/projects
Create a project.
curl -X POST https://api.adlr.app/api/projects \
  -H "Authorization: Bearer adlr_pat_XXXXXXXXXXXX" \
  -H "Content-Type: application/json" \
  -d '{"name":"Q3 Platform Redesign","brief":"Ship new home + pricing by Aug 1"}'
GET/api/email
List inbox messages.
curl "https://api.adlr.app/api/email?limit=20&folder=inbox" \
  -H "Authorization: Bearer adlr_pat_XXXXXXXXXXXX"
POST/api/email/send
Send an email from a workspace mailbox.
curl -X POST https://api.adlr.app/api/email/send \
  -H "Authorization: Bearer adlr_pat_XXXXXXXXXXXX" \
  -H "Content-Type: application/json" \
  -d '{
    "to":["client@example.com"],
    "subject":"Invoice Q2 — ready",
    "html":"<p>Your invoice is attached.</p>"
  }'
GET/api/calendar
List calendar events.
curl "https://api.adlr.app/api/calendar?from=2026-04-01&to=2026-04-30" \
  -H "Authorization: Bearer adlr_pat_XXXXXXXXXXXX"
GET/api/user/me
Check which user + workspace a token belongs to.
curl https://api.adlr.app/api/user/me \
  -H "Authorization: Bearer adlr_pat_XXXXXXXXXXXX"

Rate limits

Global limit of 600 requests / 10 minutes per IP (same as the browser app). Exceeding returns a 429 with a Retry-After header.

Errors

Responses use standard HTTP status codes. Error bodies follow this shape:

{
  "error": "Invalid or expired API token"
}

Next

  • Going live soon: webhooks (push updates instead of polling)
  • Coming: Node + Python SDKs — same auth, typed methods
  • Missing an endpoint you need? Tell us — we ship API endpoints faster than we ship UI.