Skip to main content

Overview

This documents the job.contact.scored webhook callback that TitanX sends to your configured endpoint when a contact completes scoring.
Related Documentation:

Webhook Specification

POST job.contact.scored

TitanX sends this POST request to your configured webhook URL when a contact completes scoring.

Headers

X-TitanX-Signature
string
required
HMAC-SHA256 signature (base64) of the request body for verification. Always verify this signature before processing the webhook.Example: jdoe+XYZ123abc/def456GHI789==
Content-Type
string
required
Always application/json
User-Agent
string
TitanX webhook user agentExample: TitanX-Webhooks/1.0

Request Body

payload
object
required
The complete scored Contact object with all available fields.
eventType
string
required
The type of webhook event. Always "job.contact.scored" for this callback.
timestamp
number
required
Unix timestamp in milliseconds when the event occurred.Example: 1705318200000
apiVersion
string
required
API version for this webhook payload. Currently "v2".
id
string
required
Unique identifier for this webhook event (UUID format). Use this for idempotency to detect and skip duplicate deliveries.Example: "7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d"

Expected Response

Your webhook endpoint should return appropriate HTTP status codes:
Status CodeDescription
200-299Success - webhook processed, no retry
400-499Client error - no retry (except 408, 429)
408Request timeout - will retry
429Rate limited - will retry
500-599Server error - will retry

Retry Policy

Failed deliveries are retried with exponential backoff for up to 3 days.

Security Requirements

Signature Verification

All webhook requests include an X-TitanX-Signature header with an HMAC-SHA256 signature. Algorithm: Base64(HMAC-SHA256(webhook_secret, request_body))
Always verify the signature before processing webhook data. See the Webhooks Guide for implementation examples in Node.js and Python.

Example Webhook Payload

{
  "payload": {
    "firstName": "John",
    "lastName": "Doe",
    "email": "[email protected]",
    "phone": "+15551234567",
    "phoneStatus": "p1",
    "phoneType": "mobile",
    "phone2": "+15559876543",
    "phone2Status": "p2",
    "phone2Type": "direct",
    "title": "VP of Sales",
    "companyAccount": "Acme Corp",
    "website": "https://acme.com",
    "city": "San Francisco",
    "stateProvince": "CA",
    "country": "USA",
    "companyCity": "San Francisco",
    "companyState": "CA",
    "companyCountry": "USA",
    "numberOfEmployees": "501-1000",
    "annualRevenue": "$50M-$100M",
    "industry": "Technology",
    "leadStatus": "P1"
  },
  "eventType": "job.contact.scored",
  "timestamp": 1705318200000,
  "apiVersion": "v2",
  "id": "7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d"
}

OpenAPI Definition

The complete OpenAPI 3.1 specification for this webhook callback is available in the openapi.json file under the webhooks section:
webhooks:
  job.contact.scored:
    post:
      summary: job.contact.scored webhook callback
      # Full specification in openapi.json
The webhook payload uses the same Contact schema as other API endpoints. This ensures consistency across the API and means any updates to the Contact schema automatically apply to webhook payloads.