> Fetch clean Markdown by appending `.md` to any page URL under https://signalwire.com/docs or requesting it with the HTTP header `Accept: text/markdown`. The root index at https://signalwire.com/docs/llms.txt lists the available documentation indexes.

# register

> Record which conversation and call a handoff nonce stands for.

[ref-handoffrouter]: /docs/server-sdks/reference/python/agents/handoff-router

[user-variables]: /docs/server-sdks/reference/python/core/capabilities/user-variables

Record what a nonce is a capability for. Call it from the dynamic-config callback of the dial that
carried the nonce, reading `call_id` from the request the platform sent and never from anything the
browser supplied. Expired entries are pruned on every call. A nonce that isn't a non-empty string is
ignored.

## Parameters

**`nonce`** `str` — required

The random value your application placed in the dial's `handoff_nonce` user variable. Read it with
[`user_variables()`][user-variables].

---

**`conversation_id`** `str` — required

The conversation this call continues. Keyword-only.

---

**`call_id`** `str | None` — default: None

The platform call ID. Required for `/handoff` to end the call and for `/say` to deliver text.
Keyword-only.

---

## Returns

`None`

## Example

```python {3-7}
def remember_nonce(query_params, body_params, headers, ephemeral_agent):
    variables = user_variables(body_params)
    handoff.register(
        variables["handoff_nonce"],
        conversation_id=gateway.read_handle(variables["chat_handle"]),
        call_id=body_params.get("call", {}).get("call_id"),
    )
```

See [`HandoffRouter`][ref-handoffrouter] for the full flow.