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

# Voucherify

> Voucherify helps businesses quickly launch and manage promotions, loyalty programs, referrals, and gift cards through a flexible API-first platform, reducing development effort while enabling personalized customer incentives.

Voucherify is a promotion and loyalty platform for coupons, referrals, and loyalty programs. Hightouch keeps Voucherify customers up to date, tracks custom events against them, and maintains segment membership from your warehouse data.

## Supported syncing

| Sync Type | Description | Supported Sync Modes | API Reference |
| - | - | - | - |
| [**Customers**](#syncing-customers) | Sync data from any source to Contacts in Voucherify | Upsert | [Upsert a customer ↗](https://docs.voucherify.io/api-reference/customers/customer-object) |
| [**Events**](#syncing-events) | Sync data from any source to custom events in Voucherify | Insert | [Track a custom event ↗](https://docs.voucherify.io/api-reference/events/track-custom-event) |
| [**Segments**](#syncing-segments) | Sync data from any source to active segments in Voucherify | Add, Remove | [Create a segment ↗](https://docs.voucherify.io/api-reference/segments/create-segment) |

For more information about sync modes, refer to the [sync modes](https://docs.hightouch.com/syncs/types-and-modes.md#sync-modes) docs.

## Connect to Voucherify

Go to the [**Destinations** overview page](https://app.hightouch.com/destinations?from=docs) and click the **Add destination** button. Select **Voucherify** and click **Continue**. You can then authenticate Hightouch to **Voucherify**.

Enter the following fields into Hightouch:

* **Region** — The region your Voucherify project is hosted in. Select **EU**, **US**, or **APAC** for a project on one of Voucherify's shared clusters, or **Dedicated cluster** if Voucherify assigned your project its own cluster.
* **Cluster ID** — Required when the region is **Dedicated cluster**. See [Connect a dedicated cluster](#connect-a-dedicated-cluster).
* **Application ID** — Your Voucherify application ID.
* **App token** — The secret key paired with the application ID.

The application ID and token must be able to read segments, because Hightouch lists segments to test the connection.

### Connect a dedicated cluster

Voucherify assigns one immutable API endpoint per project. A project on a dedicated cluster answers on its own host, and calls to a shared host fail even though the credentials are valid.

Find the endpoint in your Voucherify project settings and enter the first hostname label as the **Cluster ID**. For the endpoint `https://cluster1.api.voucherify.io`, the cluster ID is `cluster1`. Enter the label on its own, not the full URL.

## Sync configuration

Once you've set up your Voucherify destination and have a [model](https://docs.hightouch.com/getting-started/concepts.md#models) to pull data from, you can set up your sync configuration to begin syncing data. Go to the [**Syncs** overview page](https://app.hightouch.com/syncs?from=docs) and click the **Add sync** button to begin. Then, select the relevant model and the Voucherify destination you want to sync to.

### Syncing customers

Sync data from any source to Contacts in Voucherify.

#### Record matching

To match rows from your model to customers in Voucherify, you need to select the model column that contains values that match the **Source ID** field.
Refer to the [record matching docs](https://docs.hightouch.com/syncs/record-matching.md) for more information.

#### Field mapping

Hightouch lets you sync customer fields via [field mapping](https://docs.hightouch.com/syncs/mapping-data.md).
You can map data from any of your model columns to default and custom customer fields.
Ensure your model's columns have the same data types as the fields you want to sync to.

#### Delete behavior

The [delete behavior](https://docs.hightouch.com/syncs/overview.md#delete-behavior) you select dictates what to do when a row no longer appears in your model's query results. You have the following options:

| Behavior | Description |
| - | - |
| **Do nothing** | Keep the customer in Voucherify with all its synced fields |
| **Delete** | Delete the synced customers from Voucherify |

#### Use bulk ingestion

High-volume customer syncs can send batches to Voucherify's bulk ingestion endpoints instead of the standard API. See [Bulk ingestion](#bulk-ingestion) for when to turn it on and what you give up.

### Syncing events

Sync data from any source to custom events in Voucherify.

> [!WARNING]
>
> To ensure syncs send each event, your event model must use a truly unique [primary key](https://docs.hightouch.com/getting-started/concepts.md#unique-primary-key-requirement). See the [events syncs](https://docs.hightouch.com/syncs/types-and-modes.md#event-syncs) documentation for more information.

#### Record matching

You can match rows from your model to events in Voucherify on any column in your model and any field in Voucherify. Ensure the data types of the model column and Voucherify field you select match.
Refer to the [record matching docs](https://docs.hightouch.com/syncs/record-matching.md) for more information.

#### Field mapping

Hightouch lets you sync event properties via field mapping.

The event name must match a custom event schema defined in the Voucherify dashboard, and each metadata field you map must exist on that schema.

#### Use bulk ingestion

High-volume event syncs can send batches to Voucherify's bulk ingestion endpoints instead of the standard API. See [Bulk ingestion](#bulk-ingestion) for when to turn it on and what you give up.

### Syncing segments

Sync data from any source to active segments in Voucherify.

#### Record matching

To match rows from your model to segments in Voucherify, you need to select the model column that contains values that match the **Source ID** field.
Refer to the [record matching docs](https://docs.hightouch.com/syncs/record-matching.md) for more information.

#### Field mapping

Hightouch lets you sync segment fields via [field mapping](https://docs.hightouch.com/syncs/mapping-data.md).
You can map data from any of your model columns to the default segment fields.
Ensure your model's columns have the same data types as the fields you want to sync to.

## Tips and troubleshooting

To see the exact API requests and responses from each sync run, use the [live debugger](https://docs.hightouch.com/syncs/debugger.md). To get notified by Slack, PagerDuty, SMS, or email when a sync fails, set up [sync alerts](https://docs.hightouch.com/syncs/alerting.md). If you run into an issue this page doesn't cover, [contact support](#pylon-chat).

### Bulk ingestion

Voucherify runs a separate pair of bulk ingestion endpoints for high-volume customer and event syncs. They accept a batch and queue it, rather than applying it during the request, which raises throughput well above the standard API.

Bulk ingestion is available on customer and event syncs. Segment syncs always use the standard API.

Two things must be true before you can use it:

* Voucherify must enable bulk ingestion for your account. Ask your Voucherify account team.
* The destination's region must be **Dedicated cluster**, because Voucherify serves the bulk endpoints per cluster rather than on the public API. A sync with bulk ingestion turned on against a shared region fails.

To turn it on, expand the optional settings at the bottom of the sync configuration and enable **Use bulk ingestion**. The switch is off by default, and existing syncs keep using the standard API until you turn it on.

> [!WARNING]
>
> Bulk ingestion gives up row-level error reporting. Voucherify acknowledges a
> batch before processing it, so a success means the batch was accepted, not
> applied, and rows Voucherify later rejects are never reported back. If
> Voucherify rejects the request itself, the whole batch fails rather than
> individual rows. Keep bulk ingestion off for any sync where you need to see
> which rows failed.

> [!NOTE]
>
> For Hightouch platform error codes related to Voucherify, see [Error codes:
> Other destinations](https://docs.hightouch.com/developer-tools/error-codes.md#other-destinations).

### Validate your setup

After a sync run, open **Customers** in the [Voucherify dashboard](https://app.voucherify.io/) and search for a source ID from your model. Events appear on the customer's **Activity** timeline. For a bulk ingestion sync, allow extra time: Voucherify queues the batch and applies it after acknowledging it, so records appear after the sync run already reports success.

## Common errors

### Voucherify rejected the request: wrong\_api\_endpoint

```
403 wrong_api_endpoint
```

**Cause:** The destination points at a different cluster than the one Voucherify assigned your project. Because the endpoint is wrong rather than the credentials, the same misconfiguration returns a `401` on a sync run, which reads as a credentials problem.

**Solution:** Check the API endpoint in your Voucherify project settings. If it isn't one of the shared region hosts, set **Region** to **Dedicated cluster** and enter the cluster label as the **Cluster ID**. Voucherify's error names the correct host, and Hightouch surfaces it in the test connection message.

### Missing cluster ID

```
This Voucherify destination is on a dedicated cluster but names no cluster ID.
```

**Cause:** The region is set to **Dedicated cluster** but no cluster ID is saved. Destinations created through the API can reach this state, because saving through the API doesn't run the form's validation.

**Solution:** Set the cluster ID to the first label of your Voucherify API endpoint, for example `cluster1` for `https://cluster1.api.voucherify.io`.

### Bulk ingestion on a shared region

```
This sync uses bulk ingestion, which Voucherify serves only on a dedicated cluster.
```

**Cause:** The sync has **Use bulk ingestion** enabled, but the destination's region is one of the shared clusters.

**Solution:** Set the destination's region to **Dedicated cluster** and enter your cluster ID, or turn bulk ingestion off for this sync.
