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_xxxxxxxxxxxxxxxxYour 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/v1Endpoints
/meValidates the key and returns your account. Use it as a connection test.
/leadsLists your leads. Params: since (ISO date — added after it), limit (1-100, default 50), workspaceId.
/leadsCreates a lead. Required field: fullName.
/workspacesWorkspaces you can access (All/Personal + those you are a member of).
/statusesYour pipeline stages. Optionally scoped with workspaceId.
/categoriesYour 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