API for Developers

API for Developers

InterlinedList exposes an HTTP API that lets you build integrations, native clients, scripts, and automations on top of the platform. All request and response bodies are JSON unless noted otherwise.

This page is an index. Pick the section you need from the sidebar (or the list below) for full request/response details.

Interactive explorer: Try endpoints live in the browser with the Swagger / OpenAPI explorer at /api-docs. Authorize with a sync token and send real requests. The raw machine-readable spec is served at /api/openapi.json.

Base URL

Paths are relative to the InterlinedList deployment you are targeting:

https://interlinedlist.com

For example: https://interlinedlist.com/api/messages

Authentication at a glance

Two methods are supported. See Authentication & OAuth for details.

  • Session cookie — set by POST /api/auth/login; used by the web app and any browser client on the same origin.
  • Bearer token — obtained from POST /api/auth/sync-token; used by native, mobile, and CLI clients. Send as Authorization: Bearer <token>.

Endpoints documented as Session or Bearer accept either. Endpoints documented as Session only require the cookie.

Response conventions

Errors always return JSON with an error field:

{ "error": "Not authenticated" }

Common status codes: 400 bad request, 401 not authenticated, 403 forbidden (e.g. email not verified, subscriber feature), 404 not found, 409 conflict, 413 payload too large, 429 rate limited, 500 server error.

Paginated lists include a pagination object alongside the data array:

{
  "data": [ ... ],
  "pagination": {
    "total": 84,
    "limit": 20,
    "offset": 0,
    "hasMore": true
  }
}

Use limit and offset (or page) as query parameters to page through results.

Subscriber-only features

Some features require an active paid subscription. Check GET /api/user for the customerStatus field:

ValueMeaning
"free"No subscription
"subscriber"Active subscriber (legacy)
"subscriber:monthly"Active monthly subscriber
"subscriber:annual"Active annual subscriber

Any non-"free" status grants subscriber access. Features gated behind a subscription include image and video attachments on messages, scheduled posts, cross-posting to Mastodon/Bluesky/LinkedIn/X (Twitter), and document creation. Sending a subscriber-only field as a free user returns 403 Forbidden:

{ "error": "This feature requires an active subscription." }

Quick start

POST /api/auth/sync-token
Content-Type: application/json

{ "email": "you@example.com", "password": "yourpassword" }

Then:

GET /api/user
Authorization: Bearer il_tok_...
POST /api/messages
Authorization: Bearer il_tok_...
Content-Type: application/json

{ "content": "Hello from the API!", "publiclyVisible": true }

See Messages for the full message body reference.

Reference by category

SectionWhat's covered
Authentication & OAuthLogin, register, sync tokens, password reset, OAuth providers, account linking, logout, multi-account
Users and ProfileCurrent user, profile updates, avatars, linked identities, email change, account deletion
Public ProfilesNo-auth endpoints for viewing public user content
MessagesPosting, replies, dig reactions, scheduled posts, media uploads, cross-posting
ListsList CRUD, schema, data rows, watchers, connections, search
List FoldersTop-level folder hierarchy for organising lists
DocumentsDocument CRUD, delta sync, templates, search, image uploads
Document FoldersFolder hierarchy for organising documents
FollowingFollow/unfollow, follow requests, follower & following lists
OrganizationsOrg CRUD, members, LinkedIn page integration
NotificationsNotification tray, mark read, single & bulk operations
Push NotificationsRegister and unregister device tokens
ExportsCSV exports of messages, lists, list rows, and follows
GitHub IntegrationConnected-account GitHub issue and repo helpers
LinkedIn IntegrationPersonal LinkedIn posting targets
Utility EndpointsImage proxy, geolocation, weather, OAuth client metadata, status probes
AdministrationAdmin-only user and email log management

Looking for the full single-file reference?

The canonical comprehensive reference lives at docs/api-reference.md in the source repository. The pages linked above are the in-app rendered version of that reference, split by category for easier reading.