Skip to main content

CDP API

CDP endpoints exposed by the Devotel CPaaS API Base path: /api/v1/cdp Endpoint count: 55

Value-distribution / cardinality for one contact attribute

GET /api/v1/cdp/attribute-distribution
attribute
string
required
top_n
integer

List explorable contact attributes for the distribution explorer

GET /api/v1/cdp/attribute-distribution/attributes
max_keys
integer

List ad-platform audience activation history

GET /api/v1/cdp/audience/activations
Recent audience activations (add + suppression), newest first. Owner / admin / developer only.

List ad-platform audience mappings

GET /api/v1/cdp/audience/config
Returns every ad platform (facebook, google, tiktok, linkedin, snapchat, pinterest, reddit, the_trade_desk, criteo) with its segment→audience mapping, enabled flag and last-activation run status. Owner / admin / developer only. No secrets are exposed — a connection id is an identifier, not a key.

List ad-platform conversion-forwarding mappings

GET /api/v1/cdp/conversions/config
Returns every ad platform (facebook, google, tiktok) with its destination (Meta pixel / Google customer id / TikTok pixel), CDP-event→network-conversion name mappings, enabled flag and last-forward run status. Owner / admin / developer only. No secrets are exposed — a connection id is an identifier, not a key.

List ad-platform conversion-forward history

GET /api/v1/cdp/conversions/forwards
Recent conversion-forward runs, newest first. Owner / admin / developer only.

List CRM object-sync destination mappings

GET /api/v1/cdp/crm-sync/config
Returns every CRM / martech reverse-ETL destination (salesforce, hubspot, braze, iterable, customer_io, klaviyo) with its segment→object field mapping, upsert identifier, enabled flag and last-sync run status. Owner / admin / developer only. No secrets are exposed — a connection id is an identifier, not a key.

List CRM object-sync run history

GET /api/v1/cdp/crm-sync/runs
Recent CRM object-sync runs, newest first. Owner / admin / developer only.

Read the CDP data graph (entity-relationship metadata)

GET /api/v1/cdp/data-graph

List third-party data-enrichment providers

GET /api/v1/cdp/enrichment-catalog
Browse the catalog of firmographic / demographic data-enrichment providers (Orbit first-party, HubSpot Breeze Intelligence, ZoomInfo, Apollo, FullContact) that append company and person attributes to unified profiles for account scoring and personalization — plus Clearbit, whose standalone API is retired (deprecated) and kept catalogued for discovery only, not a coming-soon peer. Returns per-category facet counts alongside the matching providers. Static product metadata — no tenant data and no secrets are exposed. Owner / admin / developer only.
category
string (enum: firmographic|demographic|contact_data|intent)
Filter to one functional category.
status
string (enum: ga|beta|coming_soon|deprecated)
Filter to one provider status. deprecated marks a provider whose own service was retired and is kept for discovery only (e.g. Clearbit) — distinct from coming_soon, which is catalogued but not yet wired to a live backend.
Case-insensitive substring matched over provider id, name, description and appended attributes.

Get one enrichment provider

GET /api/v1/cdp/enrichment-catalog/{provider_id}
Full catalog metadata for a single enrichment provider — its appended attributes, auth type, connect-form config fields, backend-maturity status and whether a live append backend enriches it today. Static product metadata — no tenant data and no secrets. Owner / admin / developer only.
provider_id
string
required
The provider slug (e.g. orbit_first_party, hubspot_breeze).

Get a provider’s activation state

GET /api/v1/cdp/enrichment-catalog/{provider_id}/activation
Whether the provider can be enriched today and how — the live append backend (if any), the attributes appended now versus those still on the roadmap. The dashboard reads this to render a Connect button versus a Request-access CTA. Static product metadata. Owner / admin / developer only.
provider_id
string
required
The provider slug.

Get a provider’s account-scoring firmographic signals

GET /api/v1/cdp/enrichment-catalog/{provider_id}/scoring-signals
Which firmographic account-scoring inputs (industry, employee count, revenue range) the provider would append — the real signals that replace the contact-count proxy in account scoring — with an honest appends_live gate that stays false until a live enrichment backend is wired. Static product metadata. Owner / admin / developer only.
provider_id
string
required
The provider slug.

Get the GDPR erasure propagation status trail

GET /api/v1/cdp/erasure/{erasureId}/propagate
Returns the per-destination propagation trail (latest outcome per destination) for a completed erasure, built from an immutable audit record per outcome. Returns an empty trail (not a 404) when no propagation has run yet. Owner / admin only.
erasureId
string
required

Get GDPR erasure per-destination propagation modes

GET /api/v1/cdp/erasure/destination-modes
Returns, for every connected destination, the resolved erasure mode (delete | suppress) and whether it comes from an operator override (configured) or the destination’s native default. Owner / admin only.

Probabilistic merge-candidate review queue

GET /api/v1/cdp/identity/merge-candidates
Confidence-scored merge candidates for the CDP Identity Rules review queue. Scans the tenant’s contacts, blocks them into phone-area / email-domain shards (so the pairwise comparison stays linear in the shard size), scores every in-shard pair with the probabilistic identity kernel, and returns the ranked candidates at/above min_confidence. Each candidate carries its band (auto_merge | review), the per-signal similarity breakdown, and a suggested primary/secondary so a reviewer can approve a merge in one click. READ-ONLY: it derives candidates on the fly and never merges or mutates a contact — approving a candidate calls the existing POST /contacts/merge. Owner / admin / developer with the contacts:read scope (the payload embeds masked contact PII). Off-spec query params degrade to their defaults rather than erroring.
limit
integer
Max candidates returned (post-ranking). Out-of-range values fall back to 50.
min_confidence
integer
Confidence floor, 0–100. Defaults to the review-band threshold so the queue surfaces every candidate a human should look at.
include_auto_merge
boolean
When false, drops auto_merge-band candidates and returns only the human-review mid-band.

List linked audiences

GET /api/v1/cdp/linked-audiences

Get one linked audience

GET /api/v1/cdp/linked-audiences/{id}
id
string
required

Next progressive-profiling fields to ask (only fields not yet known)

GET /api/v1/cdp/progressive-profiling/next

List SQL-native computed-trait definitions

GET /api/v1/cdp/sql-traits

Get one SQL-native computed-trait definition

GET /api/v1/cdp/sql-traits/{id}
id
string
required

Get a streaming destination config

GET /api/v1/cdp/streaming-destinations/{provider}
Current Kafka topic / Kinesis stream egress config for one provider. The encrypted credential is never returned — only the credentials_configured presence flag. Owner / admin / developer only.
provider
string
required

List event-transform functions

GET /api/v1/cdp/transform-functions

Get one event-transform function

GET /api/v1/cdp/transform-functions/{id}
id
string
required

Activate an ad-platform audience

POST /api/v1/cdp/audience/activate/{platform}
Builds the hashed-identifier upload payload (every PII identifier is SHA-256-hashed before it leaves the process — cleartext is never persisted, logged, or sent), batches it, and dispatches each batch to the ad network when a connection is configured. The run is appended to a capped activation history. Owner / admin / developer only.
platform
string
required

Forward CDP track events as ad-platform conversions

POST /api/v1/cdp/conversions/forward/{platform}
Maps each supplied CDP track event to the network’s server-side conversion shape (Meta Conversions API / Google offline conversions / TikTok Events API). Every PII identifier is SHA-256-hashed before it leaves the process — cleartext is never persisted, logged, or sent; click / device-context tokens are passed through raw as the networks require. Events with no matchable identifier are skipped, never blind-sent. The payload is batched and dispatched to the network when a connection is configured. The run is appended to a capped forward history. Owner / admin / developer only.
platform
string
required

Run an on-demand CRM object sync

POST /api/v1/cdp/crm-sync/run/{destination}
Maps each supplied profile through the stored field map into a destination object record (keyed on the upsert identifier — profiles with no key value are skipped, never blind-inserted), batches it, and upserts each batch into the SaaS app when a connection is configured. The run is appended to a capped sync-run history. Owner / admin / developer only.
destination
string
required

Run a live multi-vendor broker enrichment

POST /api/v1/cdp/enrichment-catalog/{provider_id}/broker-enrich
The live multi-vendor broker. For a vendor with a configured live transport it fetches the vendor’s enrichment response through the connected account, normalizes it onto the canonical attribute vocabulary, and prices the lookup (vendor list-cost pass-through plus tenant margin). Caller-driven compute — it reads no database and persists nothing. A vendor without a configured transport returns 409; a live vendor failure surfaces as 502. Owner / admin / developer only.
provider_id
string
required
A third-party enrichment vendor slug.
signals
object
The contact identifiers handed to the vendor.
margin_pct
number
Tenant margin percent applied over the vendor list cost.
units
integer
Number of lookups to price.

Preview a multi-vendor broker enrichment

POST /api/v1/cdp/enrichment-catalog/{provider_id}/broker-preview
The multi-vendor enrichment broker preview. For a third-party vendor (ZoomInfo, Apollo, FullContact, HubSpot Breeze Intelligence — plus Clearbit, whose standalone API is retired and kept brokerable for discovery only) it prices a lookup (vendor list-cost pass-through plus tenant margin) and normalizes a supplied sample vendor response onto the canonical attribute vocabulary. Pure preview — no live vendor call and no credentials; omit raw for pricing only. Owner / admin / developer only.
provider_id
string
required
A third-party enrichment vendor slug.
raw
any
A sample vendor response to normalize onto canonical attributes (any shape). Omit for pricing only.
margin_pct
number
Tenant margin percent applied over the vendor list cost.
units
integer
Number of lookups to price.

Derive and merge a first-party enrichment patch

POST /api/v1/cdp/enrichment-catalog/{provider_id}/derive
The live first-party append backend. Given the first-party signals Orbit already holds about a contact (email, a known company domain, the name fields, the company name) and the contact’s current attributes map, derive the canonical enrichment patch and return the merged attributes. Pure compute — it does not read or write the database and makes no provider network call. Only providers wired to a live append backend enrich; third-party vendors return 409 until their adapters land. Owner / admin / developer only.
provider_id
string
required
The provider slug (a live-backend provider such as orbit_first_party).
signals
object
required
The first-party facts Orbit already holds about the contact.
attributes
object
The contact’s current attributes map the patch is merged onto (capped at 200 keys).
overwrite
boolean
When true, overwrite attributes that already hold a value. Defaults to false.

Validate a provider connect-form config

POST /api/v1/cdp/enrichment-catalog/{provider_id}/validate-config
Structural, credential-redacted validation of an operator-submitted config against the provider’s catalog field spec — required fields present, url / select shapes valid, unknown keys reported. It does NOT persist anything and does NOT contact the provider; a valid config does not start an enrichment (the backend is gated on appendsLive). A 200 is returned for both valid and invalid configs; a malformed request body is the only 400. Owner / admin / developer only.
provider_id
string
required
The provider slug.
config
object
required
The operator-supplied credential/config map keyed by the provider’s configFields[].key. Secret values are echoed back redacted. Capped at 40 keys.

Propagate a completed GDPR erasure to downstream destinations

POST /api/v1/cdp/erasure/{erasureId}/propagate
Fans a completed Art-17 erasure out to your active destinations, dispatching one delete/suppress action per destination and recording a hash-chained, tamper-evident audit record per outcome. Owner / admin only.
erasureId
string
required

Probabilistic (fuzzy) identity match

POST /api/v1/cdp/identity-resolution/probabilistic-match
Scores existing contacts against the supplied partial record using Jaro-Winkler field similarity and returns ranked candidates with a confidence score (0–1), a band (auto_merge | review), a per-field similarity breakdown, and a recommended action. Closes the deterministic-only gap: the identity graph keys on exact match_types (external_id / phone / email / anonymous_id), so two records of the same person that arrived with no shared exact key cannot be unified by rules alone. Supply at least one of email, phone, first_name, last_name, or company — an all-empty body is rejected. This surface is READ-ONLY: it scores and ranks, it never merges or mutates a contact. Owner / admin / developer with the contacts:read scope (the payload embeds contact PII).
email
string
phone
string
Accepts E.164 or display formats; normalized server-side.
first_name
string
last_name
string
company
string
limit
integer
Max candidates returned (post-scoring).
review_threshold
number
Confidence floor for the review band. Must be <= auto_merge_threshold.
auto_merge_threshold
number
Confidence at/above which a candidate is banded auto_merge.

Create a linked audience

POST /api/v1/cdp/linked-audiences

Compile a stored linked audience to its traversal plan

POST /api/v1/cdp/linked-audiences/{id}/compile
id
string
required

Validate a linked-audience query against the stored graph without persisting it

POST /api/v1/cdp/linked-audiences/validate

Capture progressive-profiling answers + return the next fields

POST /api/v1/cdp/progressive-profiling/capture

Create a SQL-native computed-trait definition

POST /api/v1/cdp/sql-traits

Validate a SQL trait body without persisting it

POST /api/v1/cdp/sql-traits/validate

Auto-derive contact trait tags via LLM

POST /api/v1/cdp/traits/auto-derive
Reads the contact’s last 30 days of events and deterministic signals and generates an open-ended set of kebab-case trait tags (high-LTV, churn-risk, engaged-7d, …). The generated tags replace the contact’s existing derived trait tags rather than being added to them.
contact_id
string
required
Contact identifier. Orbit reads this contact’s last 30 days of events and deterministic signals to generate the tags.
max_tags
integer
Soft cap on the number of tags to generate. The server enforces an upper bound so the returned tag set stays a manageable size.

Create an event-transform function

POST /api/v1/cdp/transform-functions

Preview a stored transform against a sample event (no delivery)

POST /api/v1/cdp/transform-functions/{id}/preview
id
string
required

Validate an event-transform spec without persisting it

POST /api/v1/cdp/transform-functions/validate

Replace the CDP data graph

PUT /api/v1/cdp/data-graph

Update GDPR erasure per-destination propagation modes

PUT /api/v1/cdp/erasure/destination-modes
Persists the per-destination mode override map. The PUT fully replaces the override map — a destination omitted from the body reverts to its native default. Unknown slugs / modes are dropped server-side. Owner / admin only.
destination_modes
object
required

Update one ad-platform audience mapping

PATCH /api/v1/cdp/audience/config/{platform}
Key-scoped merge of one platform’s segment→audience mapping. Only the supplied keys are touched; sibling platforms and every other settings key are preserved. Owner / admin / developer only.
platform
string
required

Update one ad-platform conversion-forwarding mapping

PATCH /api/v1/cdp/conversions/config/{platform}
Key-scoped merge of one platform’s destination + event mapping. Only the supplied keys are touched; sibling platforms and every other settings key are preserved. Owner / admin / developer only.
platform
string
required

Update one CRM object-sync destination mapping

PATCH /api/v1/cdp/crm-sync/config/{destination}
Key-scoped merge of one destination’s segment→object mapping. Only the supplied keys are touched; sibling destinations and every other settings key are preserved. Owner / admin / developer only.
destination
string
required

Partially update a linked audience

PATCH /api/v1/cdp/linked-audiences/{id}
id
string
required

Partially update a SQL-native computed-trait definition

PATCH /api/v1/cdp/sql-traits/{id}
id
string
required

Update a streaming destination config

PATCH /api/v1/cdp/streaming-destinations/{provider}
Merge only the chosen provider’s settings key. The request body is discriminated on the path provider: Kafka accepts brokers / SASL fields, Kinesis accepts region / access_key_id. The secret credential is encrypted at rest before write and never returned. The destination.provider discriminator must equal the path segment. Owner / admin / developer only.
provider
string
required

Partially update an event-transform function

PATCH /api/v1/cdp/transform-functions/{id}
id
string
required

Delete a linked audience

DELETE /api/v1/cdp/linked-audiences/{id}
id
string
required

Delete a SQL-native computed-trait definition

DELETE /api/v1/cdp/sql-traits/{id}
id
string
required

Delete an event-transform function

DELETE /api/v1/cdp/transform-functions/{id}
id
string
required