Senders

Register senders scoped to a destination, each with their own ingest token and optional payload mapping.

A sender is an optional identity scoped to a destination URL. Senders get their own ingest token and can apply a payload mapping before the event reaches the queue — useful when several upstream services share one destination and you want to normalize their payloads before delivery.

Create Sender

POST /api/v1/destinations/{destinationId}/senders

Creates a sender linked to a destination URL.

Auth: Bearer token

Path parameters

ParameterTypeDescription
destinationIdUUIDDestination URL UUID

Body

FieldTypeRequiredDescription
labelstringNoDescriptive name for identification in the dashboard — max 255 characters

Ingest token shown only once:

The ingestToken returned in the 201 response is shown only once — save it to configure the webhook in the external service. Use Regenerate Sender Ingest Token if you lose it.

var request = new HttpRequestMessage(HttpMethod.Post,
    $"https://api.hooksentry.com/api/v1/destinations/{destinationId}/senders")
{
    Content = JsonContent.Create(new { label = "GitHub Webhooks" })
};
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

using var client = new HttpClient();
var response = await client.SendAsync(request);

Return codes

  • 201 Created — sender created with ingest token
  • 400 Bad Request — invalid label or control characters
  • 401 Unauthorized — missing or invalid token
  • 403 Forbidden — destination URL belongs to another tenant
  • 404 Not Found — destination URL not found
{
  "id": "9e0f1a2b-3c4d-4e5f-8a6b-7c8d9e0f1a2b",
  "destinationId": "7d8e9f0a-1b2c-4d3e-8f5a-6b7c8d9e0f1a",
  "tenantId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "label": "GitHub Webhooks",
  "hasMapping": false,
  "ingestToken": "sndr_5f8a3b2c1d9e4f6a7b8c9d0e1f2a3b4c",
  "createdAt": "2026-07-03T14:32:00.000Z",
  "updatedAt": "2026-07-03T14:32:00.000Z"
}

Get Senders

GET /api/v1/destinations/{destinationId}/senders

Returns a page of senders linked to the specified destination URL. See Pagination & Filtering for the shared query parameters.

Auth: Bearer token

var request = new HttpRequestMessage(HttpMethod.Get,
    $"https://api.hooksentry.com/api/v1/destinations/{destinationId}/senders?Qt=10&Pg=1&CpOrd=id&TpOrd=Desc");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

using var client = new HttpClient();
var response = await client.SendAsync(request);

Return codes

  • 200 OK — paginated list of senders
  • 400 Bad Request — invalid sort field
  • 401 Unauthorized — missing or invalid token
  • 403 Forbidden — destination URL belongs to another tenant
  • 404 Not Found — destination URL not found
{
  "total": 1,
  "items": [
    {
      "id": "9e0f1a2b-3c4d-4e5f-8a6b-7c8d9e0f1a2b",
      "destinationId": "7d8e9f0a-1b2c-4d3e-8f5a-6b7c8d9e0f1a",
      "tenantId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "label": "GitHub Webhooks",
      "hasMapping": false,
      "createdAt": "2026-07-03T14:32:00.000Z",
      "updatedAt": "2026-07-03T14:32:00.000Z"
    }
  ]
}

Get Sender by ID

GET /api/v1/senders/{id}

Returns data for a sender belonging to the authenticated tenant.

Auth: Bearer token

Path parameters

ParameterTypeDescription
idUUIDSender UUID
var request = new HttpRequestMessage(HttpMethod.Get, $"https://api.hooksentry.com/api/v1/senders/{senderId}");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

using var client = new HttpClient();
var response = await client.SendAsync(request);

Return codes

  • 200 OK — sender data
  • 401 Unauthorized — missing or invalid token
  • 403 Forbidden — sender belongs to another tenant
  • 404 Not Found — sender not found
{
  "id": "9e0f1a2b-3c4d-4e5f-8a6b-7c8d9e0f1a2b",
  "destinationId": "7d8e9f0a-1b2c-4d3e-8f5a-6b7c8d9e0f1a",
  "tenantId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "label": "GitHub Webhooks",
  "hasMapping": false,
  "createdAt": "2026-07-03T14:32:00.000Z",
  "updatedAt": "2026-07-03T14:32:00.000Z"
}

Delete Sender

DELETE /api/v1/senders/{id}

Removes a sender from the authenticated tenant. The associated ingest token is invalidated immediately.

Auth: Bearer token

Path parameters

ParameterTypeDescription
idUUIDSender UUID
var request = new HttpRequestMessage(HttpMethod.Delete, $"https://api.hooksentry.com/api/v1/senders/{senderId}");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

using var client = new HttpClient();
var response = await client.SendAsync(request);

Return codes

  • 204 No Content — sender removed
  • 401 Unauthorized — missing or invalid token
  • 403 Forbidden — sender belongs to another tenant
  • 404 Not Found — sender not found

Regenerate Sender Ingest Token

POST /api/v1/senders/{id}/ingest-token

Generates a new ingest token for the sender, immediately invalidating the previous one.

Auth: Bearer token

Path parameters

ParameterTypeDescription
idUUIDSender UUID
var request = new HttpRequestMessage(HttpMethod.Post,
    $"https://api.hooksentry.com/api/v1/senders/{senderId}/ingest-token");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

using var client = new HttpClient();
var response = await client.SendAsync(request);

Return codes

  • 200 OK — new ingest token generated
  • 401 Unauthorized — missing or invalid token
  • 403 Forbidden — sender belongs to another tenant
  • 404 Not Found — sender not found
{
  "ingestToken": "sndr_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"
}

Set Sender Mapping

POST /api/v1/senders/{id}/mapping

Defines payload transformation rules for the sender, applied during ingestion when the sndr_ token is used. The body is a JSON object where each key is a field in the output payload and the value is a DSL expression describing the source.

Auth: Bearer token

Path parameters

ParameterTypeDescription
idUUIDSender UUID

Mapping DSL

ExpressionMeaning
"field"Copies field from the root
"obj:field"Accesses obj.field: is the nesting separator
"array[n]"Accesses index n of an array field
"a+b"Arithmetic sum (numeric) or concatenation (string)
["expr1", "expr2"]Builds a new array from the resolved values
var request = new HttpRequestMessage(HttpMethod.Post, $"https://api.hooksentry.com/api/v1/senders/{senderId}/mapping")
{
    Content = JsonContent.Create(new
    {
        eventId = "id",
        userName = "user:name",
        repoName = "repository:full_name",
        action = "action",
        tags = new[] { "ref", "head_commit:id" }
    })
};
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

using var client = new HttpClient();
var response = await client.SendAsync(request);

Return codes

  • 200 OK — mapping saved
  • 400 Bad Request — body is not a valid JSON object, or a mapping already exists for this sender
  • 401 Unauthorized — missing or invalid token
  • 403 Forbidden — sender belongs to another tenant
  • 404 Not Found — sender not found
{
  "mapping": {
    "eventId": "id",
    "userName": "user:name",
    "repoName": "repository:full_name",
    "action": "action",
    "tags": ["ref", "head_commit:id"]
  }
}

Get Sender Mapping

GET /api/v1/senders/{id}/mapping

Returns the configured payload mapping for the sender.

Auth: Bearer token

Path parameters

ParameterTypeDescription
idUUIDSender UUID
var request = new HttpRequestMessage(HttpMethod.Get, $"https://api.hooksentry.com/api/v1/senders/{senderId}/mapping");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

using var client = new HttpClient();
var response = await client.SendAsync(request);

Return codes

  • 200 OK — configured mapping
  • 401 Unauthorized — missing or invalid token
  • 403 Forbidden — sender belongs to another tenant
  • 404 Not Found — sender not found, or no mapping configured
{
  "mapping": {
    "eventId": "id",
    "userName": "user:name",
    "repoName": "repository:full_name",
    "action": "action",
    "tags": ["ref", "head_commit:id"]
  }
}

Delete Sender Mapping

DELETE /api/v1/senders/{id}/mapping

Removes the configured mapping. After removal, events ingested via this sender's token are queued with the raw payload, without transformation.

Auth: Bearer token

Path parameters

ParameterTypeDescription
idUUIDSender UUID
var request = new HttpRequestMessage(HttpMethod.Delete, $"https://api.hooksentry.com/api/v1/senders/{senderId}/mapping");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

using var client = new HttpClient();
var response = await client.SendAsync(request);

Return codes

  • 204 No Content — mapping removed
  • 401 Unauthorized — missing or invalid token
  • 403 Forbidden — sender belongs to another tenant
  • 404 Not Found — sender not found