# Use data in a voice sequence

Define the data a call entry accepts, then use that data in supported step fields. A reminder might accept a customer name and appointment time from the application that starts the call.

Use the field picker to see which sources and value modes the selected step supports.

## Define entry data

1. Select the **Voice call** entry in your draft.
2. Add its data fields and mark the required ones.
3. Select a later step and open its expanded editor.
4. Choose a field from **Available data**, then preview it with representative entry data.

An API call's `sequence.trigger_data` must be an object matching the selected entry's schema. Supply `{}` when the entry needs no data. An incoming number route supplies `{}`, so its entry must accept an empty object. Keep incoming fields optional and handle missing values in later steps.

Application data is separate from call identity. A field named `caller` supplied by your application does not establish who is calling or grant permission to use a number.

## Map a value or compose text

Supported fields offer fixed values, values from earlier steps, text with inserted values, or **fx** expressions. Use a direct value for a typed field and text with inserted values for spoken sentences. A string containing digits remains text.

For example, define a required string field named `customer_name` on the entry. In a supported speech field, combine `Hello`, a space, the field value, and `, your appointment is confirmed.` Preview with `{"customer_name":"Ada"}` to inspect the prepared text.

Voice expressions read entry fields as `trigger.data.customer_name`. Earlier eligible outputs use `steps.<step_id>.output`. The source picker helps you choose the correct step and field.

## Handle missing data and branches

Optional fields may be absent, null, or empty. Preview those cases and choose an explicit fallback when it is appropriate. A step on an untaken path has no output in that run.

Call observations live under `execution`. For example, the original caller's number can be absent. A guarded expression reads it safely:

```text
execution.call.orig != null && has(execution.call.orig.address) ? execution.call.orig.address : ''
```

These observations describe telephone endpoints; they do not authenticate a person. Preview needs an execution sample when a reached expression uses `execution`. Without one, the preview stops before evaluating that step. Supply it through **Advanced scenario JSON**, following the shape reported by validation.

Private keypad observations are unavailable to later expression sources or retained step detail. Do not design a later speech or result field around private digits.

## Pass data through a transfer

A local **Transfer** supplies a new object to the destination entry. Map the values that entry needs and check its required fields.

The destination receives fresh `trigger.data`, and earlier step outputs are cleared. Call identity, recording state, and execution limits continue. Passing a value explicitly is necessary when the new entry needs information from the previous path.

## Next steps

- [Configure prompts and keypad menus](/docs/guides/voice/sequences/media-and-keypad).
- [Dial and transfer calls](/docs/guides/voice/sequences/dial-and-transfer).
- [Preview and check a sequence](/docs/guides/voice/sequences/preview).
- [Create a call through the API](/docs/guides/voice/create-calls).

## Related resources

- [Voice sequences](/docs/guides/voice/sequence-builder) (docs)
