Developers

The Tarmac API

Push leads in. Sync contacts, accounts, opportunities, and activities out. Plain JSON over HTTPS, Bearer keys, no SDK required — if your tool can make an HTTP request, it can talk to Tarmac.

Authentication

Create an API key in Settings → Workspace → API keys (workspace admins only). The secret is shown once at creation. Send it on every request:

curl https://app.go-tarmac.com/api/v2/contacts \
  -H "Authorization: Bearer tmk_live_your_key_here"
PlanAPI access
FreeNone
BasicRead — every GET endpoint
ProFull — read and write
EnterpriseFull — plus higher limits and webhooks by arrangement

Rate limit: 120 requests/minute per key (429 with a Retry-After header past it). Revoke keys any time from Settings; revocation is immediate.

Lead intake (public, no key)

Every workspace gets an intake URL with a private token — find yours under Contacts → +New lead → Share form. POST any form payload; common field aliases (first_name, fname, tel, email_address, …) are normalized automatically, and a fullName is split for you. Perfect for website forms, Zapier, or your ad platform's webhook.

curl -X POST https://app.go-tarmac.com/api/intake/<your-token> \
  -H "Content-Type: application/json" \
  -d '{
    "firstName": "Maria",
    "lastName":  "Gonzalez",
    "phone":     "(818) 555-0142",
    "email":     "maria@example.com",
    "company":   "Gonzalez Roofing",
    "notes":     "Asked about weekly service"
  }'

New leads route by your workspace rules (owner match → territory → round-robin) and appear in the dialer queue like any hand-entered lead. Do-not-call numbers are flagged before anyone dials.

REST · /api/v2

Base URL https://app.go-tarmac.com/api/v2. Every route is scoped to the key's workspace — there is no cross-workspace access, ever.

Contacts

GET/contactsList contacts
GET/contacts/:idOne contact
POST/contactsCreate — firstName, lastName, email, phones: [{number, type, ok_to_call}], accountId, title, notes
PATCH/contacts/:idPartial update
DELETE/contacts/:idDelete

Accounts

GET/accountsList accounts
POST/accountsCreate — name, domain, industry, ownerUserId
PATCH/accounts/:idPartial update

Opportunities

GET/opportunitiesList opportunities
POST/opportunitiesCreate — contactId, stage, amountUsdMrr

Activities

GET/activitiesList activities (calls, notes, follow-ups)
POST/activitiesLog one — contactId, type, ts, payload

Errors

401Missing, malformed, or revoked key
403Plan doesn't include this access (read-only key writing, or no API access on the plan)
404No such record in this workspace
429Rate limit — honor Retry-After

Every error body is {"error": "a plain-English sentence"}.

Building something bigger? Webhooks, higher rate limits, and custom sync are Enterprise conversations — talk to sales. No SDK yet, on purpose: the API is small enough that fetch is the SDK. Tell us if you disagree.
Tarmac · built for salespeople, by salespeople Privacy · go-tarmac.com