Sense Talent Labs · AsyncAPI Specification
Sense Talent Labs Writeback Webhooks
Version
View Spec
View on GitHub
Human ResourcesRecruitingTalent AcquisitionStaffingApplicant TrackingCandidate EngagementRecruiting AutomationTalent CRMMessagingInterview SchedulingArtificial IntelligenceSoftware-as-a-ServiceAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-08-26'
method: searched
source: https://developer.sensehq.com/
asyncapi_published: false
asyncapi_note: Sense publishes no AsyncAPI document. The event surface is specified in prose as the
"Write-back API Specification" tag inside the same OpenAPI document that describes the REST API.
surface: webhooks
direction: outbound — Sense pushes events TO a customer-operated endpoint
inversion_note: 'This is the reverse of a conventional webhook registration. Sense does not host a
subscription API; instead the CUSTOMER (or their ATS) must build and operate an HTTP endpoint
that meets a Sense-published conformance checklist, and Sense delivers events to that single
URL. The specification is therefore a set of requirements imposed on the receiver, not a catalog
of subscribable topics.'
receiver_requirements:
- API must support the RESTful paradigm
- API should support some authentication and authorization mechanism
- API must support encrypted transport via HTTPS
- API must support SSL version TLSv1.2
- API must accept JSON data payloads
- API must emit proper status codes to communicate client or server errors, or successful
communication
- API must return an id if the write-back is successfully received
delivery:
method: POST
content_type: application/json
url_constraint: 'The endpoint URL must be static. It "cannot require any variable information to
be provided for each writeback" — a path template such as /event/{candidate_id} is explicitly
invalid. A fixed query-string key is allowed.'
success_criteria: HTTP 200 AND a body containing an `id`
failure_definition: 'Non-2xx responses, or 2xx responses without an id, are considered failures.'
retry: 'Sense will attempt re-delivery of any failed write-back. No retry count, backoff schedule
or dead-letter behaviour is published.'
ordering: not published
deduplication: not published — each write-back carries a unique `id`, which a receiver can use to
dedupe, but Sense does not state whether redelivery reuses it
signing: none — payloads are not signed; authenticity rests entirely on the pre-shared bearer
token or OAuth credential
authentication:
supported:
- method: bearer token
detail: pre-shared key embedded in every request, placed either in the Authorization header or
as a query parameter, at the customer's choice. Rotatable at the customer's discretion.
- method: OpenID Connect
detail: the customer supplies Sense with a well-known OIDC URL in addition to the event URL
- method: OAuth 2.0
detail: 'the customer supplies an authentication URL, scope, client id and client secret.
Sense supports the CLIENT CREDENTIALS grant type only. Tokens are sent as Authorization:
Bearer.'
envelope:
fields:
- name: id
type: string
description: unique Sense id for the write-back
- name: type
type: SenseWriteBackType
description: the write-back type, always set by Sense
- name: version
type: number
description: 'schema version for the write-back type. Major revisions (>= 1) are breaking;
minor revisions (< 1) are non-breaking.'
- name: created_date
type: string
format: ISO 8601
description: when the write-back was created in Sense
- name: data
type: object
description: event-specific payload, shape determined by `type`
responses:
success:
status: 200
body: '{ "id": "<unique_id>" }'
auth_failure:
status: 401
body: '{ "error": "invalid token or session" }'
input_failure:
status: 4xx
body: '{ "error": "unable to store because of field x,y,z" }'
server_failure:
status: 5xx
body: '{ "error": "unable to store, server issue x,y,z" }'
event_count: 10
events:
- type: ENGAGE_SENT_EVENT
version: 1.0
description: An outbound engagement touchpoint was sent to a candidate or contact.
payload_fields: [sms, email, summary, user_defined_data, associated_entities, sense_meta_data]
- type: ENGAGE_EVENT_RESPONSE
version: 1.0
description: A candidate or contact responded to an engagement touchpoint, including survey
answers.
payload_fields: [sms, email, summary, survey_responses, user_defined_data, associated_entities,
sense_meta_data]
- type: MESSAGING_INCOMING_MESSAGE
version: 1.1
description: An inbound SMS was received.
payload_fields: [sms, summary, user_defined_data, associated_entities, sense_meta_data]
- type: MESSAGING_OUTGOING_MESSAGE
version: 1.1
description: An outbound SMS was sent.
payload_fields: [sms, summary, is_broadcast, user_defined_data, associated_entities,
sense_meta_data]
- type: MESSAGING_DIGEST
version: 1.0
description: A rolled-up digest of messaging activity.
payload_fields: [sms, summary, user_defined_data, associated_entities, sense_meta_data]
- type: CHATBOT_RESPONSE_SUMMARY
version: 1.0
description: A summary of a chatbot conversation. Renamed from CHATBOT_CONVERSATION on
2022-02-11.
payload_fields: [summary, subject, conversation, user_defined_data, entity]
- type: ENTITY_CREATE
version: 1.0
description: An entity was created in Sense and should be created in the receiving system.
payload_fields: [entity_type, fields, user_defined_data, associated_entities, sense_meta_data]
response_requirement: 'The response MUST include entity_id, the id of the newly created entity,
in addition to id.'
- type: ENTITY_UPDATE
version: 1.0
description: An entity was updated in Sense.
payload_fields: [entity, fields, user_defined_data, associated_entities, sense_meta_data]
- type: ENTITY_DELETE
version: 1.0
description: An entity was deleted in Sense.
payload_fields: [entity, user_defined_data, associated_entities, sense_meta_data]
- type: GENERIC_EVENT
version: 1.0
description: A catch-all event carrying a human-readable summary and a subject entity.
payload_fields: [summary, subject, user_defined_data, associated_entities, sense_meta_data]
entity_types:
- AE_APPOINTMENT
- AE_CANDIDATE
- AE_CERTIFICATION
- AE_CLIENT_CONTACT
- AE_COMPANY
- AE_INTERNAL_USER
- AE_JOB_ORDER
- AE_PLACEMENT
- AE_SUBMISSION
data_structures:
- name: EntityObject
fields: [id, type]
- name: ActorObject
fields: [entity, email, phone]
- name: SMSObject
fields: [to, from, body, date, direction, mms_urls, is_broadcast]
- name: EmailObject
fields: [to, from, reply-to, bcc, cc, date, direction, is_alert_email, subject, body, mms_urls]
- name: FieldObject
fields: [name, value]
- name: ConversationObject
fields: [sender, is_bot, message, date]
enablement:
self_serve: false
note: 'Write-backs are configured per agency by Sense, not by the customer. The 2025-11-18
changelog entry notes the newest messaging write-back options are "Disabled by default; must be
enabled per agency."'
gaps:
- No AsyncAPI, JSON Schema, or other machine-readable definition of any event payload — every
structure is published as an untyped pseudo-JSON code block in prose.
- No payload signing or HMAC verification, so a receiver cannot cryptographically verify that a
write-back came from Sense.
- No published retry schedule, backoff, attempt limit, or dead-letter behaviour.
- No delivery-ordering or exactly-once guarantee.
- No self-serve subscription management, event replay, or delivery log.
Work with this as data
Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for asyncapi
4 MCP tools reach this
find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/sense-talent-labs-writeback-webhooks"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.