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

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

Request Body

object
required
An object containing the scored Contact.
string
required
The type of webhook event. Always "job.contact.scored" for this callback.
number
required
Unix timestamp in milliseconds when the event occurred.Example: 1705318200000
string
required
API version for this webhook payload. Currently "v2".
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:

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

The flat phone/phone2phone5 fields (and their Status/Type/Country/Region variants) are still present in the payload for backward compatibility but are deprecated. New integrations should read phone data from the phones[] array, which is canonical and also surfaces enrichment phones beyond the five-number cap.

OpenAPI Definition

The complete OpenAPI 3.1 specification for this webhook callback is available in the openapi.json file under the webhooks section:
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.