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

# Reference user-entered details with data bundles

> Zapier stores data from users' authentication and input forms for API calls in the `bundle` object. You can reference that data in your integration using either `{{bundle.bundleName.field}}` or `${bundle.bundleName.field}`, depending on the context. Replace `bundleName` with the bundle name and `field` with the input field key or API response field key you need.

You can reference a field in the `bundle` object in these ways:

* In Form Mode (the default mode), use `{{bundle.bundleName.field}}`
* In Code Mode, use standard JavaScript syntax. For example:
  * Reference the field directly like `return bundle.bundleName.field`
  * Use a template literal like `${bundle.bundleName.field}`

See also: [When to use placeholders or curlies?](/integrations/build-cli/faqs#when-to-use-placeholders-or-curlies%3F)

To reference a nested field in the `bundle` object, use dot notation like `field.nestedfield`. For example, `{{bundle.inputData.data.name}}` refers to the `name` field nested inside the `data` field.

Zapier integrations include the following bundles:

* `bundle`
  * `authData`
  * `inputData`
  * `meta`
  * `rawRequest` and `cleanedRequest`
  * `outputData`
  * `targetURL`
  * `subscribeData`
* `process.env`

## `authData`

Reference with: `{{bundle.authData.field}}` or `${bundle.authData.field}`

Includes data users enter into the authentication input form, such as the `username` field for [basic authentication](/integrations/build/basicauth) and any additional fields configured in the authentication input form for API Key, Basic, Session, and Digest authentication methods.

For these methods, fields from the input form or the Token Exchange Endpoint can be accessed using `{{bundle.authData.field}}`, where "field" matches the field name.
However, when using the OAuth v2 authentication method, data entered by users into the authentication input form is not included in `{{bundle.authData}}`. Instead, it is available in `{{bundle.inputData}}`.

Additionally, with OAuth v2, session authentication, and digest authentication, `authData` includes all data returned by the Token Exchange Endpoint url, referenced with the following, replacing `field` with the field name from your API response: `{{bundle.authData.field}}`

For example, the Access Token value will often be accessed via `{{bundle.authData.access_token}}` or `{{bundle.authData.accessToken}}`.

However, the `authData` bundle does not support nested objects: all values returned from authentication functions need to be at the top level. This bundle also does not include values provided by intermediate steps in OAuth v2 or session authentication flows, like `redirect_uri`.

Commonly used authData fields include:

* Username: `{{bundle.authData.username}}`
* Password: `{{bundle.authData.password}}`
* Access Token: `{{bundle.authData.access_token}}`

## `inputData`

Reference with: `{{bundle.inputData.field}}` or `${bundle.inputData.field}`

In authentication configuration, including connection labels, `inputData` contains the fields returned from the test API call, as well as some values provided by intermediate steps in more complex auth flows, such as the OAuth v2 `redirect_uri`. Values returned by the test API call are typically used to add a [connection label](./auth#label) to new integration connections.

In triggers and actions, `inputData` contains the data that users enter into the input forms for this particular run of the trigger or action. The `{{curlies}}` (mapped fields from previous Zap steps) are rendered with their raw data from previous steps.

If you want the input field data with the original `{{curlies}}` and not the data from previous steps, use `{{bundle.inputDataRaw.field}}` instead. This is less common.

Commonly used inputData fields include:

* Zapier Redirect URI: `{{bundle.inputData.redirect_uri}}`
* Authorization Code: `{{bundle.inputData.code}}`
* ID of selected triggering event: `{{bundle.inputData.id}}`

### Note on OAuth Configuration Data

For OAuth configurations, user submitted data for authentication forms (via ["Request Template"](https://docs.zapier.com/integrations/build/requesttemplate#add-authentication-fields-to-request-template)) are stored in `bundle.inputData`.

## `meta`

Reference with: `{{bundle.meta.field}}` or `${bundle.meta.field}`

`bundle.meta` contains information on what the user is doing. It has the following options for `field`:

| key                        | default | description                                                                                                                                                                                                                                                                                                                   |
| -------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `isLoadingSample`          | `false` | If true, this run was initiated manually via the Zap Editor                                                                                                                                                                                                                                                                   |
| `isFillingDynamicDropdown` | `false` | If true, this poll is being used to populate a dynamic dropdown. You only need to return the fields you specified (such as `id` and `name`), though returning everything is fine too                                                                                                                                          |
| `isPopulatingDedupe`       | `false` | If true, the results of this poll will be used to initialize the deduplication list rather than trigger a zap. You should grab as many items as possible. See also: [deduplication](#dedup)                                                                                                                                   |
| `limit`                    | `-1`    | The number of items you should fetch. `-1` indicates there's no limit. Build this into your calls insofar as you are able                                                                                                                                                                                                     |
| `page`                     | `0`     | Used in [paging](#paging) to uniquely identify which page of results should be returned                                                                                                                                                                                                                                       |
| `isTestingAuth`            | `false` | (legacy property) If true, the poll was triggered by a user testing their account (via [clicking “test”](https://cdn.zapier.com/storage/photos/5c94c304ce11b02c073a973466a7b846.png) or during setup). We use this data to populate the auth label, but it's mostly used to verify we made a successful authenticated request |

## `rawRequest` and `cleanedRequest`

<Info>
  **Note:** `bundle.rawRequest` and `bundle.cleanedRequest` are only available
  in the `perform` for webhooks, `getAccessToken` for OAuth v2 and
  `performResume` in callback actions.
</Info>

Reference with: `{{bundle.rawRequest.field}}`, `{{bundle.cleanedRequest.field}}`, `${bundle.rawRequest.field}`, or `${bundle.cleanedRequest.field}`

It includes the raw or cleaned information, respectively, from the HTTP request that triggered the `perform` method, or from the user's browser request that triggers the `getAccessToken` call from OAuth v2 authentication. You can reference individual fields with `cleanedRequest`.

Use `bundle.rawRequest` if you need access to header data. In `bundle.rawRequest`, headers other than `Content-Length` and `Content-Type` will be prefixed with `Http-`, and all headers will be named in Camel-Case.

## `outputData`

Reference with: `{{bundle.outputData}}` or `${bundle.outputData}`

<Info>
  **Note:** `bundle.outputData` is only available in the `performResume` in a
  callback action - read about that advanced functionality
  [here](https://github.com/zapier/zapier-platform/blob/main/packages/cli/README.md#zgeneratecallbackurl).
</Info>

Using `bundle.outputData` will return a whatever data you originally returned in the `perform`, allowing you to mix that with `bundle.rawRequest` or `bundle.cleanedRequest`.

## `targetUrl`

Referenced with: `{{bundle.targetUrl}}` or `${bundle.targetUrl}`

In triggers using REST hooks, this returns the URL your app should send data to when the triggering event occurs, such as `https://hooks.zapier.com/1234/abcd`.

## `subscribeData`

Referenced with: `{{bundle.subscribeData}}` or `${bundle.subscribeData}`

In triggers using REST hooks, this includes the data returned by your API from the `performSubscribe` function. This should include all information needed to send a `DELETE` request to your server to stop sending webhook data to Zapier when the user turns off a Zap.

## `process.env`

Reference with: `{{process.env.field}}` or `${process.env.field}`

Commonly used `process.env` fields include:

* Client Secret: `{{process.env.CLIENT_SECRET}}`
* Client ID: `{{process.env.CLIENT_ID}}`

***

*Need help? [Tell us about your problem](https://developer.zapier.com/contact) and we'll connect you with the right resource or contact support.*
