Skip to main content

Setup Flow

Before your backend can issue or redeem anything, a merchant administrator configures the incentive programme in the eXlr8 dashboard. This page describes what they set up and why it matters to your integration — so you understand what the identifiers in your API calls refer to, and can tell an administrator exactly what you need.

None of this is done through the API you have access to. It is dashboard work, performed once, before integration begins.

The hierarchy

Everything hangs off a merchant. Each level constrains the one beneath it.

Merchant one merchant, one currency
└── Program (campaign) the budget and the lifecycle
└── Template the rules every instrument inherits
└── Instrument the gift card or coupon a customer holds
└── Transaction / Redemption

A program — also called a campaign — holds the budget and the status. A template holds the rules: denomination, expiry, discount behaviour. An instrument is a single issued gift card or coupon. Your API calls create instruments from a template, then move value on them.

The consequence worth remembering: you never send a denomination, an expiry date, or a discount rule. All of it is fixed on the template. Your issuance call names a template and nothing else.

What the administrator sets up

1. The campaign

The administrator creates a campaign and gives it a currency, a budget and an optional end date. Two properties of it reach into your integration:

  • Instrument type — a campaign carries either gift cards or coupons, never both. A merchant running both will have at least two campaigns.
  • End date — an hourly job moves campaigns past their end date to EXPIRED, and issuance stops at that moment.

2. Activation

A campaign is created as a draft and must be activated before it can issue anything. Its lifecycle:

DRAFT ──► ACTIVE ◄──► PAUSED
│ │
└─────┬─────┘

EXPIRED ──► ARCHIVED

This gates your integration. Issuance requires the campaign to be ACTIVE. If an administrator pauses a campaign, or it passes its end date, your issuance calls start returning PROGRAM_INACTIVE (HTTP 422) — with no change on your side. Instrument up front and alert on it.

Redemption of instruments already issued is a separate matter; see How Redemption Works.

3. The template

The template is where every rule an instrument obeys is written down. It is created once and reused for every instrument you issue.

Gift card settings that shape your code

SettingWhy it matters to you
Face valueThe single denomination of every card issued from this template
Partial redemptionWhen disabled, a redemption must spend the entire remaining balance in one go
Minimum redemption amountThe floor on a single partial redemption
Expiry ruleEither a validity period counted from issuance, or one fixed date shared by every card

You do not have to take these on trust — Gift Card Inquiry returns the partial-redemption flag, the minimum amount and the expiry for any card you look up. Read them there rather than hard-coding assumptions.

Coupon settings that shape your code

SettingWhy it matters to you
Coupon typeSAVE_X, BUY_X_GET_Y or FREE_SHIPPING — determines how the discount is computed
Type configurationThe percentages, thresholds and product lists behind that maths. See Redeem Coupon
Code typeUNIQUE issues a distinct code per customer; SHARED gives everyone one public promo code
Usage limitHow many times a coupon may be redeemed
ApplicabilityALL, CATEGORIES or PRODUCTS

Two of these change how your integration behaves:

Code type decides what issuance means. A UNIQUE template produces a new code on every call — issue one per customer. A SHARED template is issued once and the returned code distributed however you like.

Applicability decides what you must send at redemption. When a coupon is scoped to categories or products, the discount is computed only over matching order lines, and an order with no matching line is rejected as CV_NOT_APPLICABLE. This is why redemption takes order line items rather than a total.

4. Your API client

Finally, the administrator provisions the identity your backend will use, as a user with the MERCHANT_API_CLIENT role.

That role is onboarded differently from every other. There is no temporary password, no OTP and no first sign-in — an API client never signs in at all. The platform generates a client secret at creation and emails the credentials to the address on the account:

X-Client-Id: b7e2f1a0-4c3d-4e5f-9a8b-1c2d3e4f5a6b
X-Client-Secret: <64-character secret>

:::caution The secret is shown once Only a hash of the client secret is stored. It appears in that one email and can never be retrieved again — not by you, and not by the administrator who created it. Move it into your secret manager as soon as it arrives. :::

The client ID is stable and never changes. Only the secret rotates.

Rotating the secret

If the secret is lost or compromised, an administrator triggers a rotation from the dashboard. The new secret is emailed to the API client's own address, exactly as at provisioning — the administrator performing the rotation never sees it either.

The previous secret stops working immediately. There is no overlap window, so agree a rotation time when you can deploy the new value promptly. A sudden run of 401 API_KEY_INVALID on a previously working integration almost always means a rotation happened; check for a credentials email.

What you receive

At the end of setup you should have been given:

ItemExampleUsed for
Client IDb7e2f1a0-…The X-Client-Id header
Client secret<64 chars>The X-Client-Secret header
Template ID(s)d4c3b2a1-…Issuing instruments
Base URLSee AuthenticationEvery request

You do not need a merchant ID or a campaign ID. Both are resolved from your credentials and the template.

:::tip Ask for one thing more Ask which campaign each template belongs to and when that campaign ends. It is the single most useful piece of context for diagnosing a PROGRAM_INACTIVE months later. :::

Next steps