OFFICIAL VERSIONED API

Build Revenue Workflows Directly Into Your Stack

Connect Outtricks to your own applications, CRM, internal tools, and revenue workflows through a stable, versioned API built for reliable automation.

● REST / JSON● Cursor pagination● Scoped bearer keys● Signed webhooks
api.outtricks.com/api/v1
curl -X POST https://api.outtricks.com/api/v1/leads/search \
  -H "Authorization: Bearer otk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "filters": {
      "jobTitle": ["VP Sales", "Head of Growth"],
      "seniority": ["VP", "DIRECTOR"],
      "employeeBands": ["250-999", "1000-9999"],
      "technologies": ["Salesforce"],
      "country": ["United States"],
      "emailConfidence": "exclude_known_bad"
    },
    "limit": 10
  }'
Response: 200 OK
{
  "data": {
    "records": [
      {
        "id": "b7c1f2e0-5a8d-4c31-9f02-2e6a1d4b8c77",
        "firstName": "Sarah",
        "lastName": "Jenkins",
        "jobTitle": "VP of Sales",
        "companyName": "Fernpath Logistics",
        "companyDomain": "fernpath.example",
        "location": "Austin, TX",
        "country": "United States",
        "email": "•••",
        "phone": "•••",
        "emailVerification": "UNKNOWN"
      }
    ],
    "total": 1284,
    "totalCapped": false,
    "alreadyImported": [],
    "importedLeadIds": {}
  },
  "meta": {
    "nextCursor": "b7c1f2e0-5a8d-4c31-9f02-2e6a1d4b8c77",
    "hasMore": true
  }
}
API CAPABILITIES

Everything You Can Do in the UI, Available via API

Build custom prospecting workflows, automate outreach cadences, and sync pipeline directly into your tech stack.

/api/v1/leads

Lead & Contact Data

Query 200M+ B2B profiles, import the records you want as Leads, then verify and enrich them — each step its own endpoint with its own credit line.

/api/v1/email/campaigns

Campaign Automation

Enroll prospects into multi-inbox email sequences and LinkedIn campaigns, with one explicit verdict returned per recipient.

/api/v1/deals

CRM & Pipeline

Read and write Contacts, Companies, Deals, Tasks and Notes, with the unified Contact timeline behind a single GET.

/api/v1/workflows

Workflow Triggers

Start a workflow run from your own code, or point a WEBHOOK-triggered workflow at your system and let your events start it.

DEVELOPER EXPERIENCE

Clean, Predictable REST Endpoints

Click an endpoint below to inspect request payloads and standardized JSON responses.

POSThttps://api.outtricks.com/api/v1/leads/search
Scope: lead:search30 req/min

Search the shared B2B pool by title, seniority, headcount band, technology and country. Contact fields come back masked until the record is unlocked through POST /api/v1/leads/import — a search result is not a Contact and is never billed as one. The match count is exact up to 10,000: past that `total` is the cap and `totalCapped` is true. Send `includeTotal: false` to get the rows without waiting for a count, and ask POST /api/v1/leads/count for the number.

Request BodyContent-Type: application/json
curl -X POST https://api.outtricks.com/api/v1/leads/search \
  -H "Authorization: Bearer otk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "filters": {
      "jobTitle": ["VP Sales", "Head of Growth"],
      "seniority": ["VP", "DIRECTOR"],
      "employeeBands": ["250-999", "1000-9999"],
      "technologies": ["Salesforce"],
      "country": ["United States"],
      "emailConfidence": "exclude_known_bad"
    },
    "limit": 10
  }'
Response (200 OK)Success envelope
{
  "data": {
    "records": [
      {
        "id": "b7c1f2e0-5a8d-4c31-9f02-2e6a1d4b8c77",
        "firstName": "Sarah",
        "lastName": "Jenkins",
        "jobTitle": "VP of Sales",
        "companyName": "Fernpath Logistics",
        "companyDomain": "fernpath.example",
        "location": "Austin, TX",
        "country": "United States",
        "email": "•••",
        "phone": "•••",
        "emailVerification": "UNKNOWN"
      }
    ],
    "total": 1284,
    "totalCapped": false,
    "alreadyImported": [],
    "importedLeadIds": {}
  },
  "meta": {
    "nextCursor": "b7c1f2e0-5a8d-4c31-9f02-2e6a1d4b8c77",
    "hasMore": true
  }
}
ENTERPRISE GRADE

Engineered for Production Reliability

One versioned REST surface, one response envelope, and signed outbound webhooks for everything that happens asynchronously.

Versioned Endpoints

Every route lives under /api/v1/. A major version is a new path segment, so a breaking change ships as /api/v2/ rather than as a silent edit to the routes you already call.

Predictable Responses

One envelope everywhere: { data } on success, with { meta } carrying the cursor on a paged read, and { error: { code, message } } plus a requestId on failure.

Secure Authentication

Bearer keys prefixed otk_live_ (sandbox keys: otk_test_), stored only as a hash. Scopes are permission codes, a key can never hold one its creator lacks, and any key can carry an expiry and be revoked.

Reliable Webhooks

X-Outtricks-Signature: sha256=<hmac> over the raw body, and a signed X-Outtricks-Timestamp (X-Outtricks-Signature-V2) so you can reject replayed requests. Five delivery attempts with exponential backoff from 30 seconds: write your handler to be idempotent.

Standard Error Codes

Ordinary HTTP statuses (200, 201, 400, 401, 403, 404, 429, 500), each paired with a stable error.code to branch on and an x-request-id to quote at support.

Tenant Isolation

A key reads only the Organization it belongs to. Tenancy is enforced in PostgreSQL by row-level security, not by a WHERE clause an endpoint could forget.

SEAMLESS CONNECTIVITY

How Data Flows Into Your Stack

A continuous loop connecting your internal applications, Outtricks revenue engines, and your CRM.

Your App
→
Outtricks API
→
Revenue Data
→
Automation
→
Closed CRM
DEVELOPER FIRST

Connect Outtricks to the Tools You Already Use

Mint a scoped key in Settings → API Access and call the same endpoints the product itself runs on. One response envelope, cursor pagination, and signed webhooks for everything asynchronous.

VERSIONED API FAQ

Frequently Asked Questions

Create one in the app: Settings → API Access → New Key. The plaintext value is shown once, at creation, and is stored only as a SHA-256 hash — there is no way to retrieve it afterwards, only to revoke it and mint another. A key carries an explicit list of scopes drawn from the same permission catalog Roles are built from (`lead:search`, `deal:manage`, `campaign:update`, `workflow:execute`, and so on), and it can never be given a scope its creator does not already hold. The Organization needs an active plan: without one the endpoint answers `SUBSCRIPTION_REQUIRED` rather than issuing a key.
Official Versioned REST API & Webhooks | Outtricks