> ## Documentation Index
> Fetch the complete documentation index at: https://hc.starbridge.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Webhook Payloads

> Headers, event types, and payload structure for Starbridge webhook deliveries.

When a bridge row is created or updated, Starbridge sends an HTTP `POST` request to your webhook URL with the row data.

## Headers

Every request includes three headers used for [signature verification](/api-reference/webhooks/verification):

| Header              | Description                                        | Example                                    |
| ------------------- | -------------------------------------------------- | ------------------------------------------ |
| `webhook-id`        | Unique identifier for this webhook delivery        | `msg_350d6ad7-13e1-47f8-8111-33f96313fabe` |
| `webhook-timestamp` | Unix timestamp (seconds) when the request was sent | `1775589603`                               |
| `webhook-signature` | Ed25519 signature, prefixed with `v1a,`            | `v1a,oB5S13Gyt...YuxkAg==`                 |

## Event types

| Event type           | Description                       |
| -------------------- | --------------------------------- |
| `bridge.row.created` | A new row was added to the bridge |
| `bridge.row.updated` | An existing row was updated       |

## Payload structure

The body is a JSON object with the following structure:

<Tabs>
  <Tab title="bridge.row.created">
    ```json theme={null}
    {
      "type": "bridge.row.created",
      "timestamp": "2026-04-09T15:57:42.586897Z",
      "data": {
        "rowId": "3c39eb0d-61f5-4cd4-9b77-93b6daeb59b3",
        "name": "City of Fort Worth",
        "bridgeId": "201377ef-0ae3-4103-988c-ed6ebfac03a6",
        "updatedAt": "2026-04-09T15:57:11.197818Z",
        "status": "Processed",
        "columns": {
          "Status": {
            "value": "New",
            "status": "Processed",
            "processedAt": "2026-04-09T15:57:11.008777Z"
          },
          "Buyer State Name": {
            "value": "Texas",
            "status": "Processed",
            "processedAt": "2026-04-09T15:57:12.482506Z"
          },
          "Buyer Summary": {
            "value": "## What's recent?\n\n**Municipal signal emergence...**",
            "status": "Processed",
            "processedAt": "2026-04-09T15:57:41.359512Z"
          }
        }
      }
    }
    ```
  </Tab>

  <Tab title="bridge.row.updated">
    ```json theme={null}
    {
      "type": "bridge.row.updated",
      "timestamp": "2026-04-09T15:55:49.491189Z",
      "data": {
        "rowId": "20ec3c30-131f-4a5a-beb9-9bfe31dd884c",
        "name": "City of Fort Collins",
        "bridgeId": "201377ef-0ae3-4103-988c-ed6ebfac03a6",
        "updatedAt": "2026-03-19T20:24:35.409137789Z",
        "status": "Processed",
        "columns": {
          "Status": {
            "value": "New",
            "status": "Processed",
            "processedAt": "2026-03-19T20:24:35.543823335Z"
          },
          "Buyer State Name": {
            "value": "Colorado",
            "status": "Processed",
            "processedAt": "2026-03-19T20:24:35.654070492Z"
          },
          "Buyer Summary": {
            "value": "## What's recent?\n\n**Water Utility Infrastructure Shift...**",
            "status": "Processed",
            "processedAt": "2026-04-03T21:37:56.388686984Z"
          }
        }
      }
    }
    ```
  </Tab>
</Tabs>

## Field reference

| Field                            | Type   | Description                                               |
| -------------------------------- | ------ | --------------------------------------------------------- |
| `type`                           | string | `"bridge.row.created"` or `"bridge.row.updated"`          |
| `timestamp`                      | string | ISO 8601 timestamp of when the webhook was created        |
| `data.rowId`                     | string | Unique ID of the bridge row                               |
| `data.name`                      | string | Name of the row (nullable)                                |
| `data.bridgeId`                  | string | ID of the bridge this row belongs to                      |
| `data.updatedAt`                 | string | When the row was last updated                             |
| `data.status`                    | string | Processing status of the row                              |
| `data.columns`                   | object | Map of column names to their values and status            |
| `data.columns[name].value`       | any    | The computed value for this column (string, object, etc.) |
| `data.columns[name].status`      | string | Processing status of this column                          |
| `data.columns[name].processedAt` | string | When this column finished processing                      |

## Response

Your endpoint should return an HTTP `200` status code to indicate successful receipt. Any other status code is treated as a failure — see [Error Handling and Retries](/api-reference/webhooks/overview#error-handling-and-retries) for details.

## Quick reference

* **Signature algorithm:** Ed25519 (asymmetric)
* **Signed message format:** `{webhook-id}.{webhook-timestamp}.{body}`
* **Signature header format:** `v1a,{base64_signature}`
* **Public key format:** `whpk_{base64_key}` (DER-encoded X.509/SPKI)
* **Event types:** `bridge.row.created`, `bridge.row.updated`
* **Request timeout:** 30 seconds
* **Based on:** [Standard Webhooks specification](https://github.com/standard-webhooks/standard-webhooks/blob/main/spec/standard-webhooks.md)
