> For the complete documentation index, see [llms.txt](https://docs.tryterra.co/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.tryterra.co/destinations/setting-up-data-destinations.md).

# Overview

Choose where Terra sends events from the Unified API and other products, add the destination in the dashboard, and allow Terra's IP addresses.

A destination is where Terra sends events: a webhook, a database, cloud storage or a queue. Destinations belong to an [environment](/unified-api/understanding-terra-environments.md), and every product in that environment delivers to them:

* **Unified API:** auth events and health data from your users' wearables and apps.
* **Lab Reports:** results from the lab reports you upload.
* **Planned Workouts API and Routes API:** planned workouts and routes received from or revised on a user's provider.

A destination receives every event type unless you limit it to chosen types with its `event_types` setting in the [Admin API](https://docs.tryterra.co/reference/admin-api/overview). This page lists the destination types and how to add one. [Event delivery](/destinations/events.md) explains what Terra sends and how delivery and retries work.

{% hint style="info" %}
**Vantage API doesn't use destinations.** It sends order and result updates to a single webhook URL that you set for Vantage. See [Configure your webhook endpoint](/vantage-api/account-setup-and-api-keys.md#configure-your-webhook-endpoint) and [Vantage webhooks](/vantage-api/webhooks.md).
{% endhint %}

## Choose a destination

* [Webhooks](/destinations/webhooks.md): Terra makes a POST request to your URL with each new event.
* [SQL database (Postgres, MySQL)](/destinations/sql-database-postgres-mysql.md): Terra creates the tables and inserts a row per event, with download links for the full payloads.
* [Supabase](/destinations/supabase.md): Postgres tables and S3-compatible storage in one platform, provisioned automatically through OAuth.
* [Cloud storage (S3, GCS, Azure Blob)](/destinations/cloud-storage-s3-gcp.md): raw payloads written to your bucket, for archival, batch processing or a data lake.
* [Queues (SQS, Kafka)](/destinations/queuing-services-sqs-kafka.md): messages published to your managed queue for asynchronous ingestion.
* [MongoDB](/destinations/mongodb.md): full payloads stored in your MongoDB collections, with indices created for you.
* [Firestore](/destinations/firestore.md): full payloads stored as documents in your Google Cloud Firestore database.

## Add a destination

1. Open the [Connections page](https://dashboard.tryterra.co/dashboard/connections) in your Terra dashboard.
2. Click **Add New** and choose a destination type: Webhook, Database, Bucket and other.
3. Add the necessary details and click **Apply**.

Each destination page lists the details it needs.

{% prompt description="Add a webhook destination and get its signing secret" icon="terminal" openInAIProviders="true" defaultExpanded="full" %}

```markdown
Add a webhook destination to my testing environment pointing at https://example.com/terra, and give me the signing secret so I can verify payloads.

Use the Terra CLI: brew install tryterra/tap/terra, or npm install -g @tryterra/cli, then terra login. Run terra docs ask --question "<question>" for anything you need from the Terra docs, and terra <command> --help for usage.
```

{% endprompt %}

{% hint style="info" %}
**Don't have a destination yet?** If you are just starting off building your product and want to test how Terra works, you can use [https://webhook.site](https://webhook.site/#!/) to set up a temporary destination for webhooks.

For further information about each destination, see [https://docs.tryterra.co/reference/health-and-fitness-api/destinations](https://docs.tryterra.co/reference/health-and-fitness-api/destinations "mention") in the API reference.
{% endhint %}

## IP allowlist

Terra sends data to your destinations from a fixed set of IP addresses. If your infrastructure uses a firewall or IP access list, add the following IPs to ensure Terra can reach your destination:

* `18.133.218.210`
* `18.169.82.189`
* `18.132.162.19`
* `18.130.218.186`
* `13.43.183.154`
* `3.11.208.36`
* `35.214.201.105`
* `35.214.230.71`
* `35.214.252.53`

{% hint style="warning" %}
These IPs apply to all data destinations: webhooks, databases, queues, and storage buckets. Allow them wherever you accept connections from Terra.
{% endhint %}

## Next steps

* [Webhooks](/destinations/webhooks.md): set up the most common destination.
* [User authentication](/unified-api/authentication-flow.md): link a user's wearable so events start flowing.
* [Event delivery](/destinations/events.md): see what Terra sends and how delivery works.
