Scoring
List scoring profiles
List all scoring profiles for the authenticated organisation.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/scoring/profiles"[ { "id": "442932e4-9a9f-48c0-a79e-6366a732a52b", "organizationId": "66575d79e8350cba826a36b1", "type": "company", "name": "EMEA Enterprise", "description": "Companies with 1000+ headcount in EMEA", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }]{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}Create a scoring profile
Create a named, org-scoped scoring profile. A profile groups scoring rules for a
single object type (company or contact) and produces fit/urgency scores
for any object assigned to it. A single object can be assigned to multiple
profiles of the matching type.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Object type this profile will score
"company" | "contact"Response Body
application/json
application/json
application/json
curl -X POST "https://example.com/v1/scoring/profiles" \ -H "Content-Type: application/json" \ -d '{ "profileType": "company", "name": "EMEA Enterprise" }'{ "id": "442932e4-9a9f-48c0-a79e-6366a732a52b", "organizationId": "66575d79e8350cba826a36b1", "type": "company", "name": "EMEA Enterprise", "description": "Companies with 1000+ headcount in EMEA", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z"}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}Get a scoring profile
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Path Parameters
Scoring profile UUID
uuidResponse Body
application/json
application/json
curl -X GET "https://example.com/v1/scoring/profiles/497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "id": "442932e4-9a9f-48c0-a79e-6366a732a52b", "organizationId": "66575d79e8350cba826a36b1", "type": "company", "name": "EMEA Enterprise", "description": "Companies with 1000+ headcount in EMEA", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z"}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}Delete a scoring profile
Deletes the profile and cascades to its rules, assignments, and score results.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Path Parameters
Scoring profile UUID
uuidResponse Body
application/json
curl -X DELETE "https://example.com/v1/scoring/profiles/497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}Update a scoring profile
Rename or re-describe a profile. Profile type is immutable.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Path Parameters
Scoring profile UUID
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
curl -X PUT "https://example.com/v1/scoring/profiles/497f6eca-6276-4993-bfeb-53cbbbba6f08" \ -H "Content-Type: application/json" \ -d '{ "name": "Enterprise ICP" }'{ "id": "442932e4-9a9f-48c0-a79e-6366a732a52b", "organizationId": "66575d79e8350cba826a36b1", "type": "company", "name": "EMEA Enterprise", "description": "Companies with 1000+ headcount in EMEA", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z"}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}List scoring rules for a profile
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Path Parameters
Scoring profile UUID
uuidResponse Body
application/json
application/json
curl -X GET "https://example.com/v1/scoring/profiles/497f6eca-6276-4993-bfeb-53cbbbba6f08/rules"[ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a", "signalTemplateId": "string", "dimension": "fit", "selector": "string", "pointValues": { "ranges": [ { "min": 0, "max": 100, "points": 2 }, { "min": 100, "max": 1000, "points": 10 }, { "min": 1000, "max": 100000, "points": 25 } ] }, "createdAt": "2019-08-24T14:15:22Z" }]{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}Upsert a scoring rule
Create or replace the rule for (profileId, signalTemplateId, dimension). Triggers
a recompute of every object assigned to the profile so existing scores reflect
the new rule immediately.
The shape of pointValues depends on the answer type of the referenced
signal template:
- boolean —
{ "true": 20, "false": -5 } - number / percentage / currency —
{ "ranges": [{ "min": 0, "max": 500, "points": 15 }] }(upper bound is exclusive) - list —
{ "choices": { "Salesforce": 10, "HubSpot": 8 }, "mode": "additive" }—modeis optional; supported values areadditive(default),best-match,contains-all,contains-none, andexact-match.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Path Parameters
Scoring profile UUID
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
"fit" | "urgency"Drives shape validation for pointValues. Must match the referenced
signal template's answer type — mismatch surfaces as an
INVALID_POINT_VALUES 422 at write time rather than a silent
compute failure later.
"boolean" | "number" | "percentage" | "currency" | "list"Point-value mapping for one rule. The shape varies by the answer type of the
referenced signal template — exactly one of true/false, ranges, or choices
is populated.
Response Body
application/json
application/json
application/json
curl -X PUT "https://example.com/v1/scoring/profiles/497f6eca-6276-4993-bfeb-53cbbbba6f08/rules" \ -H "Content-Type: application/json" \ -d '{ "signalTemplateId": "string", "dimension": "fit", "answerType": "boolean", "pointValues": { "ranges": [ { "min": 0, "max": 100, "points": 2 }, { "min": 100, "max": 1000, "points": 10 }, { "min": 1000, "max": 100000, "points": 25 } ] } }'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a", "signalTemplateId": "string", "dimension": "fit", "selector": "string", "pointValues": { "ranges": [ { "min": 0, "max": 100, "points": 2 }, { "min": 100, "max": 1000, "points": 10 }, { "min": 1000, "max": 100000, "points": 25 } ] }, "createdAt": "2019-08-24T14:15:22Z"}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}Delete a scoring rule
Removes the rule and triggers a recompute of every object assigned to the profile so scores never silently go stale.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Path Parameters
Scoring profile UUID
uuidScoring rule UUID
uuidResponse Body
application/json
curl -X DELETE "https://example.com/v1/scoring/profiles/497f6eca-6276-4993-bfeb-53cbbbba6f08/rules/497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}List profile assignments for an object
Returns every profile a given object is assigned to.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Query Parameters
Object type (company or contact)
"company" | "contact"For company use the domain (e.g. acme.com); for contact use the LinkedIn profile URL
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/scoring/assignments?objectType=company&objectId=string"[ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a", "organizationId": "string", "objectType": "company", "objectId": "acme.com", "assignedAt": "2019-08-24T14:15:22Z" }]{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}Assign a profile to a single object
Links one company or contact to a scoring profile. Triggers immediate score computation so the score appears without waiting for the next signal run. Returns 422 if the object type does not match the profile's configured type.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
uuid"company" | "contact"For company, the domain; for contact, the LinkedIn profile URL.
1 <= length <= 500Response Body
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/scoring/assignments" \ -H "Content-Type: application/json" \ -d '{ "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a", "objectType": "company", "objectId": "string" }'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a", "organizationId": "string", "objectType": "company", "objectId": "acme.com", "assignedAt": "2019-08-24T14:15:22Z"}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}Assign a profile to many objects at once
Links many company or contact IDs to a single profile in one call. Skips duplicates (returns only newly created rows) and triggers an immediate score computation per newly assigned object.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
uuid"company" | "contact"Capped at 500 per request. Paginate larger lists by issuing multiple requests.
1 <= items <= 500Response Body
application/json
application/json
curl -X POST "https://example.com/v1/scoring/assignments/bulk" \ -H "Content-Type: application/json" \ -d '{ "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a", "objectType": "company", "objectIds": [ "acme.com", "stripe.com", "framer.com" ] }'[ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a", "organizationId": "string", "objectType": "company", "objectId": "acme.com", "assignedAt": "2019-08-24T14:15:22Z" }]{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}Remove a profile assignment
Removes the assignment and cleans up any score results computed for this
(profile, object) pair.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Path Parameters
Profile assignment UUID
uuidResponse Body
application/json
curl -X DELETE "https://example.com/v1/scoring/assignments/497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}Read scores for one or more objects
Returns one row per (profile, object, dimension) triple. Pass objectId
multiple times to read scores for several objects in a single call. The
response includes the per-rule contribution breakdown so the score is always
explainable.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Query Parameters
"company" | "contact"Repeatable. For company use the domain; for contact use the LinkedIn profile URL.
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/scoring/scores?objectType=company&objectId=string"[ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a", "organizationId": "string", "objectType": "company", "objectId": "string", "dimension": "fit", "score": 40, "previousScore": 35, "contributions": [ { "ruleId": "70af3071-65d9-4ec3-b3cb-5283e8d55dac", "signalTemplateId": "string", "matchedValue": "874 (100–1000)", "pointsEarned": 10, "maxPoints": 25 } ], "previousContributions": [ { "ruleId": "70af3071-65d9-4ec3-b3cb-5283e8d55dac", "signalTemplateId": "string", "matchedValue": "874 (100–1000)", "pointsEarned": 10, "maxPoints": 25 } ], "signalCoverage": 1, "totalRules": 1, "computedAt": "2019-08-24T14:15:22Z", "version": 3 }]{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}Trigger score recomputation
Triggers score recomputation for the given objects against the latest signal data. Idempotent — duplicate triggers for the same object are deduplicated automatically.
Returns 202 Accepted with {queued, failed} counts as soon as
dispatches finish (recomputation runs asynchronously; results become
available via GET /v1/scoring/scores). A non-zero failed means
some dispatches failed; if every dispatch fails the endpoint
returns 502 instead.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
"company" | "contact"For company, domains; for contact, LinkedIn profile URLs.
Capped at 500 per request — paginate larger lists.
1 <= items <= 500Response Body
application/json
application/json
application/json
curl -X POST "https://example.com/v1/scoring/compute" \ -H "Content-Type: application/json" \ -d '{ "objectType": "company", "objectIds": [ "string" ] }'{ "queued": 5, "failed": 0}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}