Skip to main content

Webhooks API

Creatoria Agent API Documentation

#Webhooks API

Subscribe to platform events via Webhooks for real-time notifications and integrations.

Base Path: /v1/webhooks

#Webhook Management

#Create Webhook

POST /v1/webhooks

Required Permission: webhooks:create

#Request Body

json{
  "url": "https://your-server.com/webhook",
  "events": [
    "agent.created",
    "agent.updated",
    "agent.deleted",
    "document.uploaded",
    "document.processed",
    "document.deleted",
    "knowledge_base.created",
    "knowledge_base.updated",
    "knowledge_base.deleted"
  ],
  "secret": "your-webhook-secret",
  "active": true
}
FieldTypeRequiredDescription
urlstringYesWebhook receiver URL
eventsstring[]YesList of subscribed events
secretstringNoSigning secret for verifying request origin
activebooleanNoWhether active, default true

#Response

HTTP 201 Created

#List Webhooks

GET /v1/webhooks

Required Permission: webhooks:read

#Response

json{
  "data": [
    {
      "id": "wh_abc123",
      "url": "https://your-server.com/webhook",
      "events": ["agent.created", "agent.updated"],
      "active": true,
      "createdAt": "2026-01-10T08:00:00Z",
      "updatedAt": "2026-02-15T12:00:00Z"
    }
  ],
  "meta": {
    "total": 1
  }
}

#Get Webhook Details

GET /v1/webhooks/:id

Required Permission: webhooks:read

#Update Webhook

PUT /v1/webhooks/:id

Required Permission: webhooks:update

#Request Body

json{
  "url": "https://new-server.com/webhook",
  "events": ["agent.created"],
  "active": false
}

#Delete Webhook

DELETE /v1/webhooks/:id

Required Permission: webhooks:delete

#Response

HTTP 204 No Content

#Delivery Management

#Get Delivery History

GET /v1/webhooks/:id/deliveries

Required Permission: webhooks:read

#Query Parameters

ParameterTypeDescription
limitnumberNumber of items to return, default 50, max 100

#Response

json{
  "data": [
    {
      "id": "delivery_xxx",
      "webhookId": "wh_abc123",
      "event": "agent.created",
      "status": "success",
      "statusCode": 200,
      "payload": { "agent": { "id": "agent_xxx", "name": "..." } },
      "response": "OK",
      "duration": 250,
      "attemptCount": 1,
      "createdAt": "2026-02-20T08:00:00Z"
    }
  ],
  "meta": {
    "total": 1
  }
}

#Get Delivery Statistics

GET /v1/webhooks/:id/deliveries/stats

Required Permission: webhooks:read

#Response

json{
  "total": 150,
  "successful": 145,
  "failed": 5,
  "successRate": 96.67,
  "avgDuration": 180
}

#Supported Events

#Agent Events

Event NameDescription
agent.createdAgent created
agent.updatedAgent configuration updated
agent.deletedAgent deleted

#Chat / Session Events

Event NameDescription
session.createdChat session created
message.createdChat message created (includes user and assistant messages)

#Knowledge Base Events

Event NameDescription
knowledge_base.createdKnowledge base created
knowledge_base.updatedKnowledge base configuration updated
knowledge_base.deletedKnowledge base deleted

#Document Events

Event NameDescription
document.uploadedDocument uploaded
document.processedDocument processing completed (vectorized)
document.deletedDocument deleted

#Skill Events

Event NameDescription
skill.publishedSkill published
skill.installedSkill installed to an Agent

#Auth Events

Event NameDescription
user.createdNew user registered
login.failedLogin attempt failed
account.lockedAccount locked
api_key.createdAPI Key created

#Billing Events

Event NameDescription
subscription.createdSubscription created
subscription.updatedSubscription updated (upgrade/downgrade)
invoice.paidInvoice payment completed
budget_alert.triggeredBudget alert triggered
budget.threshold_exceededBudget threshold exceeded

#Import Job Events

Event NameDescription
import_job.completedImport job completed
import_job.failedImport job failed
import_job.partially_failedImport job partially failed

#Webhook Payload Format

When an event is triggered, the system sends a POST request to the registered URL:

POST https://your-server.com/webhook
Content-Type: application/json
X-Webhook-Signature: sha256=...
json{
  "event": "agent.created",
  "timestamp": "2026-02-20T08:00:00Z",
  "data": {
    "agent": {
      "id": "agent_xxx",
      "name": "New Assistant",
      "model": "zhipu/glm-4"
    }
  }
}

#Signature Verification

If a secret was provided when creating the Webhook, each delivery will include an X-Webhook-Signature header, signed using the HMAC-SHA256 algorithm.

Verification example (Node.js):

javascriptconst crypto = require('crypto');

function verifyWebhookSignature(payload, signature, secret) {
  const expected = 'sha256=' + crypto
    .createHmac('sha256', secret)
    .update(payload, 'utf8')
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected),
  );
}

#Retry Policy

When a Webhook delivery fails (HTTP status >= 400 or timeout), the system retries with the following strategy:

  • 1st retry: 1 minute delay
  • 2nd retry: 5 minute delay
  • 3rd retry: 30 minute delay

After 3 failed retries, the delivery is marked as failed. Details can be viewed via the delivery history endpoint.