Skip to content
Docs

API reference

Webhook endpoints

The URLs a customer's messages are delivered to, and their signing secrets.

Webhook endpoints belong to a customer: each customer's Owners and Admins add up to 10 endpoints, and every message from that customer's devices is POSTed to each enabled one, signed with that endpoint's secret. Resellers can read their customers' endpoints. See Receiving webhooks for the request your endpoint receives.

The webhook endpoint object

A URL that receives messages. The signing secret is only ever shown masked, except once when it is generated.

Attributes

  • iduuidRequired

    Unique identifier.

  • customer_iduuidRequired

    The customer organization the endpoint belongs to.

  • descriptionstring· nullable
  • enabledbooleanRequired

    Only enabled endpoints receive new messages.

  • inserted_attimestampRequired
  • reseller_iduuid· nullable

    The customer's reseller.

  • signing_secret_maskedstring· nullable

    The signing secret, masked, e.g. "whsec_••••••••Wq1c".

  • updated_attimestampRequired
  • urlstringRequired

    Where messages are POSTed (https).

The webhook endpoint object
{
  "type": "webhook_endpoint",
  "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
  "attributes": {
    "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
    "description": "Fleet telemetry",
    "enabled": true,
    "inserted_at": "2026-10-12T14:03:21Z",
    "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
    "signing_secret_masked": "whsec_••••••••Wq1c",
    "updated_at": "2026-10-12T14:03:21Z",
    "url": "https://fleet.example.com/hooks"
  }
}

Endpoints

List webhook endpoints

get/api/json/webhook_endpoints

Endpoints in your scope, oldest first.

Who
Resellers and Customers
Roles
Owner, Admin, Staff

Query parameters

  • filter[<field>]object

    Narrows the list: filter[status]=active, or with an operator: filter[inserted_at][greater_than_or_equal]=2026-10-01T00:00:00Z. Operators: in, is_nil, greater_than, greater_than_or_equal, less_than, less_than_or_equal.

    One ofcustomer_iddescriptionenabledidinserted_atreseller_idupdated_aturl

  • sortstring

    A field to sort by; prefix it with - for descending, e.g. sort=-inserted_at. Separate several with commas.

  • page[limit]integer

    Page size: 50 by default, at most 200.

  • page[after]string

    The cursor from links.next of the previous page. page[offset] works too.

  • page[count]boolean

    true adds the total number of matches in meta.page.total.

Request
curl https://api.houndsat.com/api/json/webhook_endpoints \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN"
Response200 OK
{
  "data": [
    {
      "type": "webhook_endpoint",
      "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
      "attributes": {
        "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
        "description": "Fleet telemetry",
        "enabled": true,
        "inserted_at": "2026-10-12T14:03:21Z",
        "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
        "signing_secret_masked": "whsec_••••••••Wq1c",
        "updated_at": "2026-10-12T14:03:21Z",
        "url": "https://fleet.example.com/hooks"
      }
    }
  ],
  "links": {
    "next": "/api/json/webhook_endpoints?page[after]=g2wAAAABbQAAACQ1ZjBj…"
  }
}

Get a webhook endpoint

get/api/json/webhook_endpoints/{id}

One endpoint in your scope.

Who
Resellers and Customers
Roles
Owner, Admin, Staff

Path parameters

  • iduuidRequired

    The record's id.

Request
curl https://api.houndsat.com/api/json/webhook_endpoints/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8 \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN"
Response200 OK
{
  "data": {
    "type": "webhook_endpoint",
    "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
    "attributes": {
      "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
      "description": "Fleet telemetry",
      "enabled": true,
      "inserted_at": "2026-10-12T14:03:21Z",
      "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "signing_secret_masked": "whsec_••••••••Wq1c",
      "updated_at": "2026-10-12T14:03:21Z",
      "url": "https://fleet.example.com/hooks"
    }
  }
}

Add a webhook endpoint

post/api/json/webhook_endpoints

Adds an https:// endpoint for your customer organization and generates its signing secret. The secret is in meta.signing_secret of this response only: store it now.

Who
Customers
Roles
Owner, Admin

Attributes

Sent as data.attributes.

  • urlstringRequired

    Where messages are POSTed (https).

  • descriptionstring· nullable
  • enabledboolean· nullable

    Only enabled endpoints receive new messages.

Request
curl -X POST https://api.houndsat.com/api/json/webhook_endpoints \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{"data":{"type":"webhook_endpoint","attributes":{"url":"https://fleet.example.com/hooks","description":"Fleet telemetry","enabled":true}}}'
Response201 Created
{
  "data": {
    "type": "webhook_endpoint",
    "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
    "attributes": {
      "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
      "description": "Fleet telemetry",
      "enabled": true,
      "inserted_at": "2026-10-12T14:03:21Z",
      "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "signing_secret_masked": "whsec_••••••••Wq1c",
      "updated_at": "2026-10-12T14:03:21Z",
      "url": "https://fleet.example.com/hooks"
    }
  },
  "meta": {
    "signing_secret": "whsec_N2Q0YjQ5ZTE4Y2ZmNDc0YmE1ZDhkMWM3Wq1c"
  }
}

Update a webhook endpoint

patch/api/json/webhook_endpoints/{id}

Changes the URL, description or enabled flag. Disabling an endpoint cancels its pending deliveries.

Who
Customers
Roles
Owner, Admin

Path parameters

  • iduuidRequired

    The record's id.

Attributes

Sent as data.attributes.

  • descriptionstring· nullable
  • enabledboolean· nullable

    Only enabled endpoints receive new messages.

  • urlstring· nullable

    Where messages are POSTed (https).

Request
curl -X PATCH https://api.houndsat.com/api/json/webhook_endpoints/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8 \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{"data":{"type":"webhook_endpoint","id":"5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8","attributes":{"description":"Fleet telemetry","enabled":true,"url":"https://fleet.example.com/hooks"}}}'
Response200 OK
{
  "data": {
    "type": "webhook_endpoint",
    "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
    "attributes": {
      "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
      "description": "Fleet telemetry",
      "enabled": true,
      "inserted_at": "2026-10-12T14:03:21Z",
      "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "signing_secret_masked": "whsec_••••••••Wq1c",
      "updated_at": "2026-10-12T14:03:21Z",
      "url": "https://fleet.example.com/hooks"
    }
  }
}

Rotate the signing secret

patch/api/json/webhook_endpoints/{id}/rotate_secret

Replaces the signing secret with a newly generated one, returned once in meta.signing_secret. The old secret stops working immediately, including for pending retries.

Who
Customers
Roles
Owner, Admin

Path parameters

  • iduuidRequired

    The record's id.

Request
curl -X PATCH https://api.houndsat.com/api/json/webhook_endpoints/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8/rotate_secret \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{"data":{"type":"webhook_endpoint","id":"5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8","attributes":{}}}'
Response200 OK
{
  "data": {
    "type": "webhook_endpoint",
    "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
    "attributes": {
      "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
      "description": "Fleet telemetry",
      "enabled": true,
      "inserted_at": "2026-10-12T14:03:21Z",
      "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "signing_secret_masked": "whsec_••••••••Wq1c",
      "updated_at": "2026-10-12T14:03:21Z",
      "url": "https://fleet.example.com/hooks"
    }
  },
  "meta": {
    "signing_secret": "whsec_N2Q0YjQ5ZTE4Y2ZmNDc0YmE1ZDhkMWM3Wq1c"
  }
}

Generate a signing secret

patch/api/json/webhook_endpoints/{id}/generate_secret

Replaces a secret you set yourself with a generated one, returned once in meta.signing_secret.

Who
Customers
Roles
Owner, Admin

Path parameters

  • iduuidRequired

    The record's id.

Request
curl -X PATCH https://api.houndsat.com/api/json/webhook_endpoints/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8/generate_secret \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{"data":{"type":"webhook_endpoint","id":"5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8","attributes":{}}}'
Response200 OK
{
  "data": {
    "type": "webhook_endpoint",
    "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
    "attributes": {
      "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
      "description": "Fleet telemetry",
      "enabled": true,
      "inserted_at": "2026-10-12T14:03:21Z",
      "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "signing_secret_masked": "whsec_••••••••Wq1c",
      "updated_at": "2026-10-12T14:03:21Z",
      "url": "https://fleet.example.com/hooks"
    }
  },
  "meta": {
    "signing_secret": "whsec_N2Q0YjQ5ZTE4Y2ZmNDc0YmE1ZDhkMWM3Wq1c"
  }
}

Set your own signing secret

patch/api/json/webhook_endpoints/{id}/set_secret

Uses a secret you choose: 24 to 256 printable ASCII characters, no spaces. It replaces the old one immediately and is never echoed back.

Who
Customers
Roles
Owner, Admin

Path parameters

  • iduuidRequired

    The record's id.

Attributes

Sent as data.attributes.

  • signing_secretstringRequired

    The new secret: 24-256 printable ASCII characters, no whitespace.

Request
curl -X PATCH https://api.houndsat.com/api/json/webhook_endpoints/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8/set_secret \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{"data":{"type":"webhook_endpoint","id":"5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8","attributes":{"signing_secret":"whsec_N2Q0YjQ5ZTE4Y2ZmNDc0YmE1ZDhkMWM3Wq1c"}}}'
Response200 OK
{
  "data": {
    "type": "webhook_endpoint",
    "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
    "attributes": {
      "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
      "description": "Fleet telemetry",
      "enabled": true,
      "inserted_at": "2026-10-12T14:03:21Z",
      "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "signing_secret_masked": "whsec_••••••••Wq1c",
      "updated_at": "2026-10-12T14:03:21Z",
      "url": "https://fleet.example.com/hooks"
    }
  }
}

Delete a webhook endpoint

delete/api/json/webhook_endpoints/{id}

Deletes the endpoint and cancels its pending deliveries.

Who
Customers
Roles
Owner, Admin

Path parameters

  • iduuidRequired

    The record's id.

Request
curl -X DELETE https://api.houndsat.com/api/json/webhook_endpoints/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8 \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN"
Response200 OK
(empty body)