Endpoints

Webhooks

Copy page

Webhook endpoints

List Webhook Destinations

GET
/manage/tenants/{tenantId}/projects/{projectId}/webhook-destinations

Authorization

bearerAuth cookieAuth
AuthorizationBearer <token>

Bearer token authentication. Use this for API clients and service-to-service communication. Set the Authorization header to "Bearer ".

In: header

better-auth.session_token<token>

Session-based authentication using HTTP-only cookies. Cookies are automatically sent by browsers. For server-side requests, include cookies with names starting with "better-auth." in the Cookie header.

In: cookie

Path Parameters

tenantId*string

Tenant identifier

projectId*string

Project identifier

Match^[a-z0-9]([a-z0-9-]*[a-z0-9])?$
Length1 <= length <= 255

Query Parameters

page?number
Default1
Range1 <= value
limit?number
Default10
Range1 <= value <= 100
agentId?string

Filter by agent ID

Response Body

application/json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

curl -X GET "https://api.pilot.inkeep.com/manage/tenants/tenant_123/projects/project-456/webhook-destinations"
{
  "data": [
    {
      "agentIds": [
        "string"
      ],
      "createdAt": "string",
      "description": "string",
      "enabled": true,
      "eventTypes": [
        "conversation.created"
      ],
      "id": "string",
      "name": "string",
      "updatedAt": "string",
      "url": "string"
    }
  ],
  "pagination": {
    "limit": 10,
    "page": 1,
    "pages": 0,
    "total": 0
  }
}
{
  "code": "bad_request",
  "detail": "Bad Request",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 400,
  "title": "Bad Request",
  "error": {
    "code": "bad_request",
    "message": "Bad Request"
  }
}
{
  "code": "unauthorized",
  "detail": "Unauthorized",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 401,
  "title": "Unauthorized",
  "error": {
    "code": "unauthorized",
    "message": "Unauthorized"
  }
}
{
  "code": "forbidden",
  "detail": "Forbidden",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 403,
  "title": "Forbidden",
  "error": {
    "code": "forbidden",
    "message": "Forbidden"
  }
}
{
  "code": "not_found",
  "detail": "Not Found",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 404,
  "title": "Not Found",
  "error": {
    "code": "not_found",
    "message": "Not Found"
  }
}
{
  "code": "unprocessable_entity",
  "detail": "Unprocessable Entity",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 422,
  "title": "Unprocessable Entity",
  "error": {
    "code": "unprocessable_entity",
    "message": "Unprocessable Entity"
  }
}
{
  "code": "internal_server_error",
  "detail": "Internal Server Error",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 500,
  "title": "Internal Server Error",
  "error": {
    "code": "internal_server_error",
    "message": "Internal Server Error"
  }
}

Create Webhook Destination

POST
/manage/tenants/{tenantId}/projects/{projectId}/webhook-destinations

Authorization

bearerAuth cookieAuth
AuthorizationBearer <token>

Bearer token authentication. Use this for API clients and service-to-service communication. Set the Authorization header to "Bearer ".

In: header

better-auth.session_token<token>

Session-based authentication using HTTP-only cookies. Cookies are automatically sent by browsers. For server-side requests, include cookies with names starting with "better-auth." in the Cookie header.

In: cookie

Path Parameters

tenantId*string

Tenant identifier

projectId*string

Project identifier

Match^[a-z0-9]([a-z0-9-]*[a-z0-9])?$
Length1 <= length <= 255

Request Body

application/json

agentIds?array<>

Agent IDs to scope this webhook to. Omit or empty for all agents.

description?string

Webhook destination description

enabled?boolean

Whether the webhook destination is enabled

Defaulttrue
eventTypes*array<>

Event types to subscribe to

Items1 <= items
id?string

Resource identifier

Match^[a-zA-Z0-9\-_.]+$
Length1 <= length <= 255
name*string

Webhook destination name

Length1 <= length
url*string

Destination URL to POST events to

Formaturi

Response Body

application/json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

curl -X POST "https://api.pilot.inkeep.com/manage/tenants/tenant_123/projects/project-456/webhook-destinations" \  -H "Content-Type: application/json" \  -d '{    "eventTypes": [      "conversation.created"    ],    "name": "string",    "url": "http://example.com"  }'
{
  "data": {
    "agentIds": [
      "string"
    ],
    "createdAt": "string",
    "description": "string",
    "enabled": true,
    "eventTypes": [
      "conversation.created"
    ],
    "id": "string",
    "name": "string",
    "updatedAt": "string",
    "url": "string"
  }
}
{
  "code": "bad_request",
  "detail": "Bad Request",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 400,
  "title": "Bad Request",
  "error": {
    "code": "bad_request",
    "message": "Bad Request"
  }
}
{
  "code": "unauthorized",
  "detail": "Unauthorized",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 401,
  "title": "Unauthorized",
  "error": {
    "code": "unauthorized",
    "message": "Unauthorized"
  }
}
{
  "code": "forbidden",
  "detail": "Forbidden",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 403,
  "title": "Forbidden",
  "error": {
    "code": "forbidden",
    "message": "Forbidden"
  }
}
{
  "code": "not_found",
  "detail": "Not Found",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 404,
  "title": "Not Found",
  "error": {
    "code": "not_found",
    "message": "Not Found"
  }
}
{
  "code": "unprocessable_entity",
  "detail": "Unprocessable Entity",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 422,
  "title": "Unprocessable Entity",
  "error": {
    "code": "unprocessable_entity",
    "message": "Unprocessable Entity"
  }
}
{
  "code": "internal_server_error",
  "detail": "Internal Server Error",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 500,
  "title": "Internal Server Error",
  "error": {
    "code": "internal_server_error",
    "message": "Internal Server Error"
  }
}

Get Webhook Destination

GET
/manage/tenants/{tenantId}/projects/{projectId}/webhook-destinations/{id}

Authorization

bearerAuth cookieAuth
AuthorizationBearer <token>

Bearer token authentication. Use this for API clients and service-to-service communication. Set the Authorization header to "Bearer ".

In: header

better-auth.session_token<token>

Session-based authentication using HTTP-only cookies. Cookies are automatically sent by browsers. For server-side requests, include cookies with names starting with "better-auth." in the Cookie header.

In: cookie

Path Parameters

tenantId*string

Tenant identifier

projectId*string

Project identifier

Match^[a-z0-9]([a-z0-9-]*[a-z0-9])?$
Length1 <= length <= 255
id*string

Resource identifier

Match^[a-zA-Z0-9\-_.]+$
Length1 <= length <= 255

Response Body

application/json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

curl -X GET "https://api.pilot.inkeep.com/manage/tenants/tenant_123/projects/project-456/webhook-destinations/resource_789"
{
  "data": {
    "agentIds": [
      "string"
    ],
    "createdAt": "string",
    "description": "string",
    "enabled": true,
    "eventTypes": [
      "conversation.created"
    ],
    "id": "string",
    "name": "string",
    "updatedAt": "string",
    "url": "string"
  }
}
{
  "code": "bad_request",
  "detail": "Bad Request",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 400,
  "title": "Bad Request",
  "error": {
    "code": "bad_request",
    "message": "Bad Request"
  }
}
{
  "code": "unauthorized",
  "detail": "Unauthorized",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 401,
  "title": "Unauthorized",
  "error": {
    "code": "unauthorized",
    "message": "Unauthorized"
  }
}
{
  "code": "forbidden",
  "detail": "Forbidden",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 403,
  "title": "Forbidden",
  "error": {
    "code": "forbidden",
    "message": "Forbidden"
  }
}
{
  "code": "not_found",
  "detail": "Not Found",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 404,
  "title": "Not Found",
  "error": {
    "code": "not_found",
    "message": "Not Found"
  }
}
{
  "code": "unprocessable_entity",
  "detail": "Unprocessable Entity",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 422,
  "title": "Unprocessable Entity",
  "error": {
    "code": "unprocessable_entity",
    "message": "Unprocessable Entity"
  }
}
{
  "code": "internal_server_error",
  "detail": "Internal Server Error",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 500,
  "title": "Internal Server Error",
  "error": {
    "code": "internal_server_error",
    "message": "Internal Server Error"
  }
}

Update Webhook Destination

PATCH
/manage/tenants/{tenantId}/projects/{projectId}/webhook-destinations/{id}

Authorization

bearerAuth cookieAuth
AuthorizationBearer <token>

Bearer token authentication. Use this for API clients and service-to-service communication. Set the Authorization header to "Bearer ".

In: header

better-auth.session_token<token>

Session-based authentication using HTTP-only cookies. Cookies are automatically sent by browsers. For server-side requests, include cookies with names starting with "better-auth." in the Cookie header.

In: cookie

Path Parameters

tenantId*string

Tenant identifier

projectId*string

Project identifier

Match^[a-z0-9]([a-z0-9-]*[a-z0-9])?$
Length1 <= length <= 255
id*string

Resource identifier

Match^[a-zA-Z0-9\-_.]+$
Length1 <= length <= 255

Request Body

application/json

agentIds?array<>

Agent IDs to scope this webhook to. Empty array for all agents.

createdAt?string
description?string

Webhook destination description

enabled?boolean

Whether the webhook destination is enabled

eventTypes?array<>

Event types to subscribe to

Items1 <= items
id?string

Resource identifier

Match^[a-zA-Z0-9\-_.]+$
Length1 <= length <= 255
name?string

Webhook destination name

Length1 <= length
updatedAt?string
url?string

Destination URL to POST events to

Formaturi

Response Body

application/json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

curl -X PATCH "https://api.pilot.inkeep.com/manage/tenants/tenant_123/projects/project-456/webhook-destinations/resource_789" \  -H "Content-Type: application/json" \  -d '{}'
{
  "data": {
    "agentIds": [
      "string"
    ],
    "createdAt": "string",
    "description": "string",
    "enabled": true,
    "eventTypes": [
      "conversation.created"
    ],
    "id": "string",
    "name": "string",
    "updatedAt": "string",
    "url": "string"
  }
}
{
  "code": "bad_request",
  "detail": "Bad Request",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 400,
  "title": "Bad Request",
  "error": {
    "code": "bad_request",
    "message": "Bad Request"
  }
}
{
  "code": "unauthorized",
  "detail": "Unauthorized",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 401,
  "title": "Unauthorized",
  "error": {
    "code": "unauthorized",
    "message": "Unauthorized"
  }
}
{
  "code": "forbidden",
  "detail": "Forbidden",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 403,
  "title": "Forbidden",
  "error": {
    "code": "forbidden",
    "message": "Forbidden"
  }
}
{
  "code": "not_found",
  "detail": "Not Found",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 404,
  "title": "Not Found",
  "error": {
    "code": "not_found",
    "message": "Not Found"
  }
}
{
  "code": "unprocessable_entity",
  "detail": "Unprocessable Entity",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 422,
  "title": "Unprocessable Entity",
  "error": {
    "code": "unprocessable_entity",
    "message": "Unprocessable Entity"
  }
}
{
  "code": "internal_server_error",
  "detail": "Internal Server Error",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 500,
  "title": "Internal Server Error",
  "error": {
    "code": "internal_server_error",
    "message": "Internal Server Error"
  }
}

Delete Webhook Destination

DELETE
/manage/tenants/{tenantId}/projects/{projectId}/webhook-destinations/{id}

Authorization

bearerAuth cookieAuth
AuthorizationBearer <token>

Bearer token authentication. Use this for API clients and service-to-service communication. Set the Authorization header to "Bearer ".

In: header

better-auth.session_token<token>

Session-based authentication using HTTP-only cookies. Cookies are automatically sent by browsers. For server-side requests, include cookies with names starting with "better-auth." in the Cookie header.

In: cookie

Path Parameters

tenantId*string

Tenant identifier

projectId*string

Project identifier

Match^[a-z0-9]([a-z0-9-]*[a-z0-9])?$
Length1 <= length <= 255
id*string

Resource identifier

Match^[a-zA-Z0-9\-_.]+$
Length1 <= length <= 255

Response Body

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

curl -X DELETE "https://api.pilot.inkeep.com/manage/tenants/tenant_123/projects/project-456/webhook-destinations/resource_789"
Empty
{
  "code": "bad_request",
  "detail": "Bad Request",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 400,
  "title": "Bad Request",
  "error": {
    "code": "bad_request",
    "message": "Bad Request"
  }
}
{
  "code": "unauthorized",
  "detail": "Unauthorized",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 401,
  "title": "Unauthorized",
  "error": {
    "code": "unauthorized",
    "message": "Unauthorized"
  }
}
{
  "code": "forbidden",
  "detail": "Forbidden",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 403,
  "title": "Forbidden",
  "error": {
    "code": "forbidden",
    "message": "Forbidden"
  }
}
{
  "code": "not_found",
  "detail": "Not Found",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 404,
  "title": "Not Found",
  "error": {
    "code": "not_found",
    "message": "Not Found"
  }
}
{
  "code": "unprocessable_entity",
  "detail": "Unprocessable Entity",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 422,
  "title": "Unprocessable Entity",
  "error": {
    "code": "unprocessable_entity",
    "message": "Unprocessable Entity"
  }
}
{
  "code": "internal_server_error",
  "detail": "Internal Server Error",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 500,
  "title": "Internal Server Error",
  "error": {
    "code": "internal_server_error",
    "message": "Internal Server Error"
  }
}

Test Webhook Destination

POST
/manage/tenants/{tenantId}/projects/{projectId}/webhook-destinations/{id}/test

Authorization

bearerAuth cookieAuth
AuthorizationBearer <token>

Bearer token authentication. Use this for API clients and service-to-service communication. Set the Authorization header to "Bearer ".

In: header

better-auth.session_token<token>

Session-based authentication using HTTP-only cookies. Cookies are automatically sent by browsers. For server-side requests, include cookies with names starting with "better-auth." in the Cookie header.

In: cookie

Path Parameters

tenantId*string

Tenant identifier

projectId*string

Project identifier

Match^[a-z0-9]([a-z0-9-]*[a-z0-9])?$
Length1 <= length <= 255
id*string

Resource identifier

Match^[a-zA-Z0-9\-_.]+$
Length1 <= length <= 255

Response Body

application/json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

curl -X POST "https://api.pilot.inkeep.com/manage/tenants/tenant_123/projects/project-456/webhook-destinations/resource_789/test"
{
  "error": "string",
  "statusCode": 0,
  "success": true
}
{
  "code": "bad_request",
  "detail": "Bad Request",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 400,
  "title": "Bad Request",
  "error": {
    "code": "bad_request",
    "message": "Bad Request"
  }
}
{
  "code": "unauthorized",
  "detail": "Unauthorized",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 401,
  "title": "Unauthorized",
  "error": {
    "code": "unauthorized",
    "message": "Unauthorized"
  }
}
{
  "code": "forbidden",
  "detail": "Forbidden",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 403,
  "title": "Forbidden",
  "error": {
    "code": "forbidden",
    "message": "Forbidden"
  }
}
{
  "code": "not_found",
  "detail": "Not Found",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 404,
  "title": "Not Found",
  "error": {
    "code": "not_found",
    "message": "Not Found"
  }
}
{
  "code": "unprocessable_entity",
  "detail": "Unprocessable Entity",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 422,
  "title": "Unprocessable Entity",
  "error": {
    "code": "unprocessable_entity",
    "message": "Unprocessable Entity"
  }
}
{
  "code": "internal_server_error",
  "detail": "Internal Server Error",
  "instance": "/conversations/123",
  "requestId": "req_1234567890",
  "status": 500,
  "title": "Internal Server Error",
  "error": {
    "code": "internal_server_error",
    "message": "Internal Server Error"
  }
}

Invoke agent via trigger webhook

POST
/run/tenants/{tenantId}/projects/{projectId}/agents/{agentId}/triggers/{triggerId}

Path Parameters

tenantId*string

Tenant ID

projectId*string

Project ID

agentId*string

Agent ID

triggerId*string

Trigger ID

Request Body

application/json

[key: string]?unknown

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://api.pilot.inkeep.com/run/tenants/string/projects/string/agents/string/triggers/string" \  -H "Content-Type: application/json" \  -d '{    "property1": null,    "property2": null  }'
{
  "invocations": [
    {
      "conversationId": "string",
      "invocationId": "string",
      "runAsUserId": "string"
    }
  ],
  "success": true
}
{
  "error": "string",
  "validationErrors": [
    "string"
  ]
}
{
  "error": "string"
}
{
  "error": "string"
}
{
  "error": "string"
}
{
  "error": "string"
}
{
  "error": "string"
}