API Documentation

LinkTrack Public REST API — move your leads between your own tools and LinkTrack.

The API exists so you can wire LinkTrack into your own stack. It does two core jobs: exporting leads (your spreadsheet, BI tool, existing CRM) and importing leads (your web form, ATS, Airtable). Our Zapier integration runs on exactly this API — if you would rather not write code, use the Zapier path.

Who can use it

API keys are available on Individual and Team plans. If your plan lapses or expires, existing keys stop working automatically (they are not deleted). The Free plan lead limit applies through the API too.

Authentication

Create an API key under Settings → Integrations. The key is shown once; we store only a hash of it and cannot recover it. Send it on every request using either header:

Authorization: Bearer lt_xxxxxxxxxxxxxxxx

X-Api-Key: lt_xxxxxxxxxxxxxxxx

Your key represents your account — keep it server-side, never in a browser or a public repository. Revoking a key takes effect immediately.

Base URL

https://linktrackapp.com/api/v1

Endpoints

GET/me

Validates the key and returns your account. Use it as a connection test.

GET/leads

Lists your leads. Params: since (ISO date — added after it), limit (1-100, default 50), workspaceId.

POST/leads

Creates a lead. Required field: fullName.

GET/workspaces

Workspaces you can access (All/Personal + those you are a member of).

GET/statuses

Your pipeline stages. Optionally scoped with workspaceId.

GET/categories

Your categories (folders). Optionally scoped with workspaceId.

Examples

Fetch recently added leads

curl -s "https://linktrackapp.com/api/v1/leads?limit=10&since=2026-09-01T00:00:00Z" \
  -H "Authorization: Bearer lt_xxxxxxxxxxxxxxxx"

Create a lead

curl -s -X POST "https://linktrackapp.com/api/v1/leads" \
  -H "Authorization: Bearer lt_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "fullName": "Ada Lovelace",
    "profileUrl": "https://www.linkedin.com/in/adalovelace",
    "title": "Senior Backend Engineer",
    "company": "Analytical Engines",
    "email": "ada@example.com",
    "tags": ["backend", "remote"]
  }'

Lead object

List and create return the same shape. Empty fields come back as null; tags is always an array.

{
  "id": "clx8f3k2p0001",
  "fullName": "Ada Lovelace",
  "title": "Senior Backend Engineer",
  "company": "Analytical Engines",
  "location": "London",
  "education": "Cambridge",
  "profileUrl": "https://www.linkedin.com/in/adalovelace",
  "email": "ada@example.com",
  "phone": null,
  "notes": null,
  "tags": ["backend", "remote"],
  "status": "Görüşme",
  "category": "Backend 2026",
  "workspace": null,
  "createdAt": "2026-09-14T09:12:33.000Z",
  "lastEngagedAt": null
}

Workspace scoping

On a Team plan you may have shared workspaces alongside your personal one. The workspaceId parameter picks the scope:

  • all — everything you can access (default)
  • personal — your personal workspace only
  • <id> — a specific workspace — returns 403 if you are not a member

When creating leads

  • ▸Accepted fields: fullName (required), profileUrl, title, company, location, email, phone, notes, tags (max 20), categoryId.
  • ▸Omit categoryId and the lead lands in your default category; the target workspace follows the chosen category.
  • ▸Duplicate scope: within the chosen category only for personal leads, and across the whole workspace for shared workspaces.
  • ▸profileUrl is canonicalised automatically (protocol, www, trailing slash, query params) — you will not save the same person twice.
  • ▸If the same profileUrl already exists, no lead is created and you get a 400 ("This profile is already saved."). Zapier marks that step as an errored task — design your Zap accordingly.
  • ▸Optional fields sent as an empty string are treated as 'not provided' — you will not get a validation error.

Limits and behaviour

  • ▸Up to 20 active API keys per account.
  • ▸Rate limits are applied per IP address: 120 requests per minute, 3,000 per hour. Going over returns 429. (Tools with shared egress IPs such as Zapier may share this bucket with other accounts — normal trigger intervals stay well under it.)
  • ▸If your paid plan ends, keys stop working; when the plan returns, the same keys work again.
  • ▸Responses are JSON. Errors return an HTTP status plus a descriptive message field (401 invalid key, 403 workspace you cannot access, 400 validation).
  • ▸Leads are ordered newest first (createdAt descending).

Not available yet

Listed on purpose so you do not have to probe the API to find out:

  • —Update or delete endpoints for leads (create and list exist today).
  • —Outbound webhooks (event push) — poll periodically with the since parameter to detect changes.
  • —A pagination cursor — limit is capped at 100; page forward using since.

If you would rather not write code

Our Zapier integration runs on this API and connects with the same key. You can connect it from Settings → Integrations.

Settings → Integrations