Webhook ingress
Verified text Assistant ingress
Server-to-server signed text ingress. Requires webhook-id, webhook-timestamp and webhook-signature over the raw body. Closed unless the channel is configured.
POST
/
v1
/
webhooks
/
text-assistant
Verified text Assistant ingress
curl --request POST \
--url https://api.sempera.org/v1/webhooks/text-assistant \
--header 'Content-Type: application/json' \
--header 'webhook-signature: <api-key>' \
--data '
{
"api_version": "v3",
"webhook_version": "2026-02-03",
"event_id": "<string>",
"event_type": "<string>"
}
'import requests
url = "https://api.sempera.org/v1/webhooks/text-assistant"
payload = {
"api_version": "v3",
"webhook_version": "2026-02-03",
"event_id": "<string>",
"event_type": "<string>"
}
headers = {
"webhook-signature": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'webhook-signature': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
api_version: 'v3',
webhook_version: '2026-02-03',
event_id: '<string>',
event_type: '<string>'
})
};
fetch('https://api.sempera.org/v1/webhooks/text-assistant', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"accepted": true
}{
"error": {
"code": "AGENT_ENV_UNPINNED",
"message": "<string>",
"request_id": "<string>",
"field": "<string>",
"scope": "<string>",
"reason": "<string>"
}
}{
"error": {
"code": "AGENT_ENV_UNPINNED",
"message": "<string>",
"request_id": "<string>",
"field": "<string>",
"scope": "<string>",
"reason": "<string>"
}
}{
"error": {
"code": "AGENT_ENV_UNPINNED",
"message": "<string>",
"request_id": "<string>",
"field": "<string>",
"scope": "<string>",
"reason": "<string>"
}
}{
"error": {
"code": "AGENT_ENV_UNPINNED",
"message": "<string>",
"request_id": "<string>",
"field": "<string>",
"scope": "<string>",
"reason": "<string>"
}
}{
"error": {
"code": "AGENT_ENV_UNPINNED",
"message": "<string>",
"request_id": "<string>",
"field": "<string>",
"scope": "<string>",
"reason": "<string>"
}
}Authorizations
Signature over webhook-id.webhook-timestamp.raw_body; both companion headers are required. 300-second tolerance.
Body
application/json
Response
Accepted
⌘I
Verified text Assistant ingress
curl --request POST \
--url https://api.sempera.org/v1/webhooks/text-assistant \
--header 'Content-Type: application/json' \
--header 'webhook-signature: <api-key>' \
--data '
{
"api_version": "v3",
"webhook_version": "2026-02-03",
"event_id": "<string>",
"event_type": "<string>"
}
'import requests
url = "https://api.sempera.org/v1/webhooks/text-assistant"
payload = {
"api_version": "v3",
"webhook_version": "2026-02-03",
"event_id": "<string>",
"event_type": "<string>"
}
headers = {
"webhook-signature": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'webhook-signature': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
api_version: 'v3',
webhook_version: '2026-02-03',
event_id: '<string>',
event_type: '<string>'
})
};
fetch('https://api.sempera.org/v1/webhooks/text-assistant', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"accepted": true
}{
"error": {
"code": "AGENT_ENV_UNPINNED",
"message": "<string>",
"request_id": "<string>",
"field": "<string>",
"scope": "<string>",
"reason": "<string>"
}
}{
"error": {
"code": "AGENT_ENV_UNPINNED",
"message": "<string>",
"request_id": "<string>",
"field": "<string>",
"scope": "<string>",
"reason": "<string>"
}
}{
"error": {
"code": "AGENT_ENV_UNPINNED",
"message": "<string>",
"request_id": "<string>",
"field": "<string>",
"scope": "<string>",
"reason": "<string>"
}
}{
"error": {
"code": "AGENT_ENV_UNPINNED",
"message": "<string>",
"request_id": "<string>",
"field": "<string>",
"scope": "<string>",
"reason": "<string>"
}
}{
"error": {
"code": "AGENT_ENV_UNPINNED",
"message": "<string>",
"request_id": "<string>",
"field": "<string>",
"scope": "<string>",
"reason": "<string>"
}
}