---
title: "One-tap opt-in link"
method: GET
path: "/v1/agents/{id}/deep-link"
tags: ["Agents"]
---

# One-tap opt-in link

`GET /v1/agents/{id}/deep-link`

## Request

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

"Text SURVEY to +1…" asks someone to open an app, type an exact word and address it correctly. This does all three in a tap — the missing half of a keyword opt-in flow.

Built from the agent's `rbm_service_id`, which Google's API cannot return: copy it from the Console overview page into `PATCH /v1/agents/{id}/launch-info` first.

**Not available on a sandbox key**, for the same reason — the service ID only exists after the irreversible `sync-google`. Since a deep link is the only way a *user* can start a conversation, that one journey cannot be rehearsed in sandbox. Agent-initiated conversations, which is everything this API opens, are fully testable.

## Path parameters

- `id` string, required

## Query parameters

- `phone` string
- `body` string

## Response `200`

The link.

- object
  - `url` string, required
  - `launched` boolean, required
  - `caveat` string: Present when the agent isn't launched — the link only works for allowlisted test devices.

## Other responses

- `400`: Couldn't build the link from the values given.
- `401`: Not signed in, and no account-linked API key was sent.
- `404`: No such agent on this account.
- `409`: The agent's service id isn't recorded and can't be read from Google.
- `500`: Unexpected server error. The body is always JSON.

---

[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)
