curl --request POST \
--url https://sandbox.composer.id/v1/triggers/triage/{tenant} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Signature-HMAC-SHA256-1: <x-signature-hmac-sha256-1>' \
--data '
{
"type": "assessment.completed",
"data": {
"responseId": "<string>",
"response": {}
}
}
'import requests
url = "https://sandbox.composer.id/v1/triggers/triage/{tenant}"
payload = {
"type": "assessment.completed",
"data": {
"responseId": "<string>",
"response": {}
}
}
headers = {
"X-Signature-HMAC-SHA256-1": "<x-signature-hmac-sha256-1>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Signature-HMAC-SHA256-1': '<x-signature-hmac-sha256-1>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({type: 'assessment.completed', data: {responseId: '<string>', response: {}}})
};
fetch('https://sandbox.composer.id/v1/triggers/triage/{tenant}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"kind": "intent",
"response_id": "<string>",
"intent_id": "itn_7f3aK2mQ9xLp",
"created": true,
"intent": {
"intent_id": "<string>",
"intent_version": 2,
"state": "draft",
"created_at": "2023-11-07T05:31:56Z",
"payload": {
"diagnostics": {
"assessment_id": "<string>",
"scored": true,
"scores": [
{
"dimension": "<string>",
"value": 123,
"weight": 0.5
}
],
"answers": [
{
"question_id": "<string>",
"value": "<unknown>",
"label": "<string>"
}
],
"ranked_outcomes": [
{
"outcome": "contingent",
"score": 123,
"proportion": 0.5
}
],
"override_event": {
"reason": "<string>",
"actor": "<string>",
"at": "2023-11-07T05:31:56Z"
},
"completed_at": "2023-11-07T05:31:56Z"
},
"routing": {
"role_title": "<string>",
"worker_type": "contingent",
"location": {
"country": "<string>",
"state": "<string>",
"city": "<string>",
"postal_code": "<string>",
"remote": true
},
"start_date": "2023-12-25",
"end_date": "2023-12-25",
"description": "<string>",
"skills": [
"<string>"
],
"headcount": 1,
"destination": {
"provider": "<string>",
"object_type": "<string>",
"tenant_id": "<string>"
}
},
"admin": {
"cost_center": "<string>",
"budget": {
"max_bill_rate": 123,
"currency": "<string>",
"total_budget": 123
},
"approvals": [
{
"approver": "<string>",
"status": "pending",
"at": "2023-11-07T05:31:56Z"
}
],
"department": "<string>",
"business_unit": "<string>",
"project_code": "<string>",
"requester": {
"name": "<string>",
"email": "jsmith@example.com"
},
"hiring_manager": {
"name": "<string>",
"email": "jsmith@example.com"
}
}
},
"publishing": {
"receipts": [
"<unknown>"
],
"current_external_id": "<string>",
"current_idempotency_key": "<string>",
"adapter_status": "pending"
},
"defence_file_ref": "<string>",
"override_event": {
"reason": "<string>",
"actor": "<string>",
"at": "2023-11-07T05:31:56Z"
},
"updated_at": "2023-11-07T05:31:56Z"
},
"type": "<string>"
}{
"kind": "intent",
"response_id": "<string>",
"intent_id": "itn_7f3aK2mQ9xLp",
"created": true,
"intent": {
"intent_id": "<string>",
"intent_version": 2,
"state": "draft",
"created_at": "2023-11-07T05:31:56Z",
"payload": {
"diagnostics": {
"assessment_id": "<string>",
"scored": true,
"scores": [
{
"dimension": "<string>",
"value": 123,
"weight": 0.5
}
],
"answers": [
{
"question_id": "<string>",
"value": "<unknown>",
"label": "<string>"
}
],
"ranked_outcomes": [
{
"outcome": "contingent",
"score": 123,
"proportion": 0.5
}
],
"override_event": {
"reason": "<string>",
"actor": "<string>",
"at": "2023-11-07T05:31:56Z"
},
"completed_at": "2023-11-07T05:31:56Z"
},
"routing": {
"role_title": "<string>",
"worker_type": "contingent",
"location": {
"country": "<string>",
"state": "<string>",
"city": "<string>",
"postal_code": "<string>",
"remote": true
},
"start_date": "2023-12-25",
"end_date": "2023-12-25",
"description": "<string>",
"skills": [
"<string>"
],
"headcount": 1,
"destination": {
"provider": "<string>",
"object_type": "<string>",
"tenant_id": "<string>"
}
},
"admin": {
"cost_center": "<string>",
"budget": {
"max_bill_rate": 123,
"currency": "<string>",
"total_budget": 123
},
"approvals": [
{
"approver": "<string>",
"status": "pending",
"at": "2023-11-07T05:31:56Z"
}
],
"department": "<string>",
"business_unit": "<string>",
"project_code": "<string>",
"requester": {
"name": "<string>",
"email": "jsmith@example.com"
},
"hiring_manager": {
"name": "<string>",
"email": "jsmith@example.com"
}
}
},
"publishing": {
"receipts": [
"<unknown>"
],
"current_external_id": "<string>",
"current_idempotency_key": "<string>",
"adapter_status": "pending"
},
"defence_file_ref": "<string>",
"override_event": {
"reason": "<string>",
"actor": "<string>",
"at": "2023-11-07T05:31:56Z"
},
"updated_at": "2023-11-07T05:31:56Z"
},
"type": "<string>"
}{
"kind": "intent",
"response_id": "<string>",
"intent_id": "itn_7f3aK2mQ9xLp",
"created": true,
"intent": {
"intent_id": "<string>",
"intent_version": 2,
"state": "draft",
"created_at": "2023-11-07T05:31:56Z",
"payload": {
"diagnostics": {
"assessment_id": "<string>",
"scored": true,
"scores": [
{
"dimension": "<string>",
"value": 123,
"weight": 0.5
}
],
"answers": [
{
"question_id": "<string>",
"value": "<unknown>",
"label": "<string>"
}
],
"ranked_outcomes": [
{
"outcome": "contingent",
"score": 123,
"proportion": 0.5
}
],
"override_event": {
"reason": "<string>",
"actor": "<string>",
"at": "2023-11-07T05:31:56Z"
},
"completed_at": "2023-11-07T05:31:56Z"
},
"routing": {
"role_title": "<string>",
"worker_type": "contingent",
"location": {
"country": "<string>",
"state": "<string>",
"city": "<string>",
"postal_code": "<string>",
"remote": true
},
"start_date": "2023-12-25",
"end_date": "2023-12-25",
"description": "<string>",
"skills": [
"<string>"
],
"headcount": 1,
"destination": {
"provider": "<string>",
"object_type": "<string>",
"tenant_id": "<string>"
}
},
"admin": {
"cost_center": "<string>",
"budget": {
"max_bill_rate": 123,
"currency": "<string>",
"total_budget": 123
},
"approvals": [
{
"approver": "<string>",
"status": "pending",
"at": "2023-11-07T05:31:56Z"
}
],
"department": "<string>",
"business_unit": "<string>",
"project_code": "<string>",
"requester": {
"name": "<string>",
"email": "jsmith@example.com"
},
"hiring_manager": {
"name": "<string>",
"email": "jsmith@example.com"
}
}
},
"publishing": {
"receipts": [
"<unknown>"
],
"current_external_id": "<string>",
"current_idempotency_key": "<string>",
"adapter_status": "pending"
},
"defence_file_ref": "<string>",
"override_event": {
"reason": "<string>",
"actor": "<string>",
"at": "2023-11-07T05:31:56Z"
},
"updated_at": "2023-11-07T05:31:56Z"
},
"type": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}The START of the lifecycle: Triage decides, and its completion webhook turns the decision into an intent here. The delivery is authenticated by the X-Signature-HMAC-SHA256-{n} header, signed with the tenant’s webhook signing key. The Intent ID is a pure function of the assessment response id, so a replayed delivery returns the existing intent (200) rather than a second one. The answers are mapped onto the intent payload by the tenant’s question map, the rank-1 channel becomes payload.channel, and provenance (the response id, the score, the completion time) is recorded under payload.source.
curl --request POST \
--url https://sandbox.composer.id/v1/triggers/triage/{tenant} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Signature-HMAC-SHA256-1: <x-signature-hmac-sha256-1>' \
--data '
{
"type": "assessment.completed",
"data": {
"responseId": "<string>",
"response": {}
}
}
'import requests
url = "https://sandbox.composer.id/v1/triggers/triage/{tenant}"
payload = {
"type": "assessment.completed",
"data": {
"responseId": "<string>",
"response": {}
}
}
headers = {
"X-Signature-HMAC-SHA256-1": "<x-signature-hmac-sha256-1>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Signature-HMAC-SHA256-1': '<x-signature-hmac-sha256-1>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({type: 'assessment.completed', data: {responseId: '<string>', response: {}}})
};
fetch('https://sandbox.composer.id/v1/triggers/triage/{tenant}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"kind": "intent",
"response_id": "<string>",
"intent_id": "itn_7f3aK2mQ9xLp",
"created": true,
"intent": {
"intent_id": "<string>",
"intent_version": 2,
"state": "draft",
"created_at": "2023-11-07T05:31:56Z",
"payload": {
"diagnostics": {
"assessment_id": "<string>",
"scored": true,
"scores": [
{
"dimension": "<string>",
"value": 123,
"weight": 0.5
}
],
"answers": [
{
"question_id": "<string>",
"value": "<unknown>",
"label": "<string>"
}
],
"ranked_outcomes": [
{
"outcome": "contingent",
"score": 123,
"proportion": 0.5
}
],
"override_event": {
"reason": "<string>",
"actor": "<string>",
"at": "2023-11-07T05:31:56Z"
},
"completed_at": "2023-11-07T05:31:56Z"
},
"routing": {
"role_title": "<string>",
"worker_type": "contingent",
"location": {
"country": "<string>",
"state": "<string>",
"city": "<string>",
"postal_code": "<string>",
"remote": true
},
"start_date": "2023-12-25",
"end_date": "2023-12-25",
"description": "<string>",
"skills": [
"<string>"
],
"headcount": 1,
"destination": {
"provider": "<string>",
"object_type": "<string>",
"tenant_id": "<string>"
}
},
"admin": {
"cost_center": "<string>",
"budget": {
"max_bill_rate": 123,
"currency": "<string>",
"total_budget": 123
},
"approvals": [
{
"approver": "<string>",
"status": "pending",
"at": "2023-11-07T05:31:56Z"
}
],
"department": "<string>",
"business_unit": "<string>",
"project_code": "<string>",
"requester": {
"name": "<string>",
"email": "jsmith@example.com"
},
"hiring_manager": {
"name": "<string>",
"email": "jsmith@example.com"
}
}
},
"publishing": {
"receipts": [
"<unknown>"
],
"current_external_id": "<string>",
"current_idempotency_key": "<string>",
"adapter_status": "pending"
},
"defence_file_ref": "<string>",
"override_event": {
"reason": "<string>",
"actor": "<string>",
"at": "2023-11-07T05:31:56Z"
},
"updated_at": "2023-11-07T05:31:56Z"
},
"type": "<string>"
}{
"kind": "intent",
"response_id": "<string>",
"intent_id": "itn_7f3aK2mQ9xLp",
"created": true,
"intent": {
"intent_id": "<string>",
"intent_version": 2,
"state": "draft",
"created_at": "2023-11-07T05:31:56Z",
"payload": {
"diagnostics": {
"assessment_id": "<string>",
"scored": true,
"scores": [
{
"dimension": "<string>",
"value": 123,
"weight": 0.5
}
],
"answers": [
{
"question_id": "<string>",
"value": "<unknown>",
"label": "<string>"
}
],
"ranked_outcomes": [
{
"outcome": "contingent",
"score": 123,
"proportion": 0.5
}
],
"override_event": {
"reason": "<string>",
"actor": "<string>",
"at": "2023-11-07T05:31:56Z"
},
"completed_at": "2023-11-07T05:31:56Z"
},
"routing": {
"role_title": "<string>",
"worker_type": "contingent",
"location": {
"country": "<string>",
"state": "<string>",
"city": "<string>",
"postal_code": "<string>",
"remote": true
},
"start_date": "2023-12-25",
"end_date": "2023-12-25",
"description": "<string>",
"skills": [
"<string>"
],
"headcount": 1,
"destination": {
"provider": "<string>",
"object_type": "<string>",
"tenant_id": "<string>"
}
},
"admin": {
"cost_center": "<string>",
"budget": {
"max_bill_rate": 123,
"currency": "<string>",
"total_budget": 123
},
"approvals": [
{
"approver": "<string>",
"status": "pending",
"at": "2023-11-07T05:31:56Z"
}
],
"department": "<string>",
"business_unit": "<string>",
"project_code": "<string>",
"requester": {
"name": "<string>",
"email": "jsmith@example.com"
},
"hiring_manager": {
"name": "<string>",
"email": "jsmith@example.com"
}
}
},
"publishing": {
"receipts": [
"<unknown>"
],
"current_external_id": "<string>",
"current_idempotency_key": "<string>",
"adapter_status": "pending"
},
"defence_file_ref": "<string>",
"override_event": {
"reason": "<string>",
"actor": "<string>",
"at": "2023-11-07T05:31:56Z"
},
"updated_at": "2023-11-07T05:31:56Z"
},
"type": "<string>"
}{
"kind": "intent",
"response_id": "<string>",
"intent_id": "itn_7f3aK2mQ9xLp",
"created": true,
"intent": {
"intent_id": "<string>",
"intent_version": 2,
"state": "draft",
"created_at": "2023-11-07T05:31:56Z",
"payload": {
"diagnostics": {
"assessment_id": "<string>",
"scored": true,
"scores": [
{
"dimension": "<string>",
"value": 123,
"weight": 0.5
}
],
"answers": [
{
"question_id": "<string>",
"value": "<unknown>",
"label": "<string>"
}
],
"ranked_outcomes": [
{
"outcome": "contingent",
"score": 123,
"proportion": 0.5
}
],
"override_event": {
"reason": "<string>",
"actor": "<string>",
"at": "2023-11-07T05:31:56Z"
},
"completed_at": "2023-11-07T05:31:56Z"
},
"routing": {
"role_title": "<string>",
"worker_type": "contingent",
"location": {
"country": "<string>",
"state": "<string>",
"city": "<string>",
"postal_code": "<string>",
"remote": true
},
"start_date": "2023-12-25",
"end_date": "2023-12-25",
"description": "<string>",
"skills": [
"<string>"
],
"headcount": 1,
"destination": {
"provider": "<string>",
"object_type": "<string>",
"tenant_id": "<string>"
}
},
"admin": {
"cost_center": "<string>",
"budget": {
"max_bill_rate": 123,
"currency": "<string>",
"total_budget": 123
},
"approvals": [
{
"approver": "<string>",
"status": "pending",
"at": "2023-11-07T05:31:56Z"
}
],
"department": "<string>",
"business_unit": "<string>",
"project_code": "<string>",
"requester": {
"name": "<string>",
"email": "jsmith@example.com"
},
"hiring_manager": {
"name": "<string>",
"email": "jsmith@example.com"
}
}
},
"publishing": {
"receipts": [
"<unknown>"
],
"current_external_id": "<string>",
"current_idempotency_key": "<string>",
"adapter_status": "pending"
},
"defence_file_ref": "<string>",
"override_event": {
"reason": "<string>",
"actor": "<string>",
"at": "2023-11-07T05:31:56Z"
},
"updated_at": "2023-11-07T05:31:56Z"
},
"type": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Base64-encoded HMAC-SHA256 of the raw request body, computed with one of the active signing keys. The numeric suffix carries no meaning: during key rotation a delivery may carry several X-Signature-HMAC-SHA256-{n} headers and any one matching an active key verifies it. Comparison is timing-safe.
Path Parameters
Whose webhook signing key signs this delivery: the tenant returned by POST /sandbox/keys, or default on a self-hosted sandbox. A trigger arrives before the intent exists, so the tenant cannot be looked up from an Intent ID.
Body
A Triage (WorkAuthor) webhook delivery. Any event whose type says completed and whose body names an assessment response is turned into an intent; other events are acknowledged and ignored. The sandbox reads the completed assessment from data.response; a deployment with a WorkAuthor connection fetches it by responseId instead.
Response
The same assessment was already turned into an intent; the existing record is returned and nothing changes
intent, ignored Derived from the assessment response id (SHA-256, base64url, itn_ prefix), so the same assessment always yields the same intent.
^[A-Za-z0-9_-]{10,64}$"itn_7f3aK2mQ9xLp"
true when this delivery minted the intent; false when it already existed (a replay).
Canonical system-of-engagement record keyed by intent_id.
Show child attributes
Show child attributes
Ignored events only: the event type.