---
title: "Point this agent's Google traffic at your own endpoint"
method: PUT
path: "/v1/agents/{id}/webhook"
tags: ["Google inbound routing"]
---

# Point this agent's Google traffic at your own endpoint

`PUT /v1/agents/{id}/webhook`

## Request

- Base URL: `https://api.cadencercs.com`
- URL: `https://api.cadencercs.com/v1/agents/{id}/webhook`
- Auth: HTTP bearer

**This is Google's inbound routing for one agent — it is not how you receive messages from Cadence.** It tells Google to push this agent's traffic to a URL of your own instead of to the partner-level endpoint that Cadence normally receives on, which means Cadence stops seeing that agent's replies and stops driving its flows.

If what you want is your application to learn about inbound replies, you want a `flow` (the server answers for you), `GET /v1/events` (SSE), or `GET /v1/conversations/{id}/answers` (polling) — see the guide at https://cadencercs.com/docs.html#receiving.

We issue the verification token rather than accepting one, so it is always high-entropy. It is **derived, not stored** — re-issuing returns the same value; `?rotate=true` invalidates the old one. Your endpoint must echo the token on Google's verification handshake, and every push is signed with it.

## Path parameters

- `id` string, required

## Query parameters

- `rotate` 'true' | 'false'

## Request body

- object
  - `webhookUri` string, required: A public `https://` URL. Google posts to it directly.

## Response `200`

Configured. The token is shown once.

- object
  - `ok` boolean, required
  - `webhookUri` string, required
  - `integrationId` string
  - `verificationToken` string, required: Shown exactly once, for the same reason an API key is.
  - `nextStep` string
  - `ourEndpoint` string: Point Google here instead if you would rather Cadence keep receiving.
  - `note` string

## Other responses

- `400`: `webhookUri` must be a public https:// URL.
- `401`: Not signed in, and no account-linked API key was sent.
- `404`: No such agent on this account.
- `409`: This agent doesn't exist at Google yet.
- `500`: Unexpected server error. The body is always JSON.
- `502`: Google rejected the request.
- `503`: RBM not configured, or `WEBHOOK_SIGNING_SECRET` is unset.

---

[API](https://skmtc.dev/cadencercs/apis/cadence-api.md) · [All operations](https://skmtc.dev/cadencercs/apis/cadence-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cadencercs/apis/cadence-api/revisions/9438443c2081?raw)
