Travel Partner · Implementation Guide

Travel Partner Integration Guide

Everything your technical team needs to integrate DutyBoost into your booking platform — so every confirmed booking automatically generates a DutyCredit for the traveler.

< 1 day integration
Single API call
Works with any booking system

How it works

1

Booking confirmed

Traveler books a flight through your platform

2

API call

Your system calls the DutyBoost API with booking details

3

Voucher generated

DutyBoost creates a personalised QR code voucher

4

Email sent

Traveler receives their DutyCredit — ready to use at the airport

Getting started

Account creation and access:

Your DutyBoost Travel Partner account is created by the DutyBoost team. You'll receive a welcome email with a magic link to set your password and access your Travel Partner dashboard. No manual signup needed — just wait for the email and click the link.

Before you start

You will need:

  • Your DutyBoost API key — available in your Travel Partner dashboard under Settings → API
  • A server-side environment to make API calls (Node.js, Python, PHP, or any backend language)
  • The ability to trigger code after a booking is confirmed in your booking engine

Never expose your API key on the frontend. All calls to the DutyBoost API must be made from your server, not from client-side JavaScript in the browser.

1

Get your API key

Log into your DutyBoost Travel Partner dashboard and navigate to Settings → API Integration. Copy your API key. This key identifies your Travel Partner account and attributes commissions correctly.

Test your API key works with a quick curl call:

Terminal
# Replace with your DutyBoost API key from your Travel Partner dashboard
curl -X POST https://api.dutyboost.com/v1/generate-duty-credit \
  -H "Content-Type: application/json" \
  -H "X-DutyBoost-Key: YOUR_API_KEY" \
  -d '{
    "booking_id": "TEST-001",
    "total_ticket_price": 500,
    "number_of_travelers": 1,
    "travel_type": "Short-haul",
    "departure_airport": "AMS",
    "travel_date": "2025-12-01",
    "traveler_email": "test@youragency.com",
    "traveler_name": "Test Traveler",
    "agency_email": "you@youragency.com"
  }'

You should receive a JSON response with success: true and a voucher_code. A test email will be sent to the traveler_email you provided.

2

Call the API after booking confirmation

After every confirmed flight booking, your system must make a single POST request to the DutyBoost API. The ideal trigger point is your booking confirmation webhook, post-payment callback, or the "booking completed" event in your booking engine.

POST
https://api.dutyboost.com/v1/generate-duty-credit
FieldTypeReq.Description
booking_idstring✅Your unique booking reference ID
total_ticket_pricenumber✅Total ticket price in EUR (all travelers)
number_of_travelersinteger✅Number of travelers on the booking
travel_typestring✅"Short-haul" or "Long-haul"
departure_airportstring✅IATA code (e.g. "AMS") or full airport name
travel_datestring✅Flight date in YYYY-MM-DD format
traveler_emailstring✅Email to send the DutyCredit voucher to
traveler_namestring—Used for personalised email greeting
travel_partner_emailstring—Your Travel Partner email for commission tracking
travel_partner_namestring—Displayed in the traveler-facing email

Code examples:

API Response

The API returns a JSON object. On success, use the fields below:

Response JSON
{
  "success": true,
  "voucher_code": "DB-X7K2M4NP",
  "discount_percentage": 16,
  "expiration_date": "2025-12-01",
  "duty_credit_url": "https://dutyboost.com/voucher?code=DB-X7K2M4NP",
  "qr_image_url": "https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=DB-X7K2M4NP",
  "html_snippet": "<div style='...'>...</div>",
  "message": "DutyCredit generated and emailed to traveler"
}
FieldDescription
voucher_codeUnique alphanumeric code for the traveler to quote manually if QR fails
credit_amount_eurThe fixed euro DutyCredit value (e.g. 14.00) — display this prominently in your email
max_basket_pctCredit cap as a fraction of basket (0.15 = 15%) — no minimum spend, just proportional to basket
expiration_dateThe voucher expires at midnight on the departure date
duty_credit_urlDirect link to the traveler's voucher page — include this in any email
qr_image_urlHosted QR code image URL — usable in custom email templates
html_snippetReady-made HTML block — paste directly into your confirmation email template
3

Embed the DutyCredit in your confirmation email

The API response includes a ready-to-use html_snippet — a self-contained HTML block compatible with all major email clients (Gmail, Outlook, Apple Mail). Inject it into your booking confirmation email template, right below the booking summary.

email-builder.js
// After calling the DutyBoost API, inject html_snippet into your email:
const duty = await issueDutyCredit(booking);

const confirmationEmailHtml = `
  <h2>Your booking is confirmed! ✈️</h2>

  <p>Booking reference: ${booking.id}</p>
  <p>Departure: ${booking.departureAirport} on ${booking.departureDate}</p>

  <!-- ↓↓↓ Paste DutyBoost block here ↓↓↓ -->
  ${duty.html_snippet}
  <!-- ↑↑↑ End DutyBoost block ↑↑↑ -->

  <p>Have a great trip!</p>
`;

DutyBoost also sends its own email automatically

Even if you don't embed the snippet, DutyBoost sends a standalone co-branded email to the traveler from your Travel Partner name. Embedding the snippet in your own email gives a better, more seamless experience.

How discounts are calculated

DutyBoost calculates discounts based on basket spend — simple and transparent. Discounts are capped at €60 on €300+ spend.

Basket spend (before discount)Traveler discount (DutyCredit)
€70€5 discount
€100€10+ discount
€200€30+ discount
€300+Up to €60 discount

The more the traveler spends, the higher the discount — up to a maximum of €60 on €300+ spend.
Example: A traveler spends €300 at a retailer and receives a €60 discount. The net sales value (€240) is the basis for commission distribution.

Key redemption rules:

→ Minimum basket spend: €70 — travelers need at least €70 to receive a DutyCredit.

→ Discount cap: €60 — maximum discount available at €300+ spend.

This performance-based model rewards both travelers and retailers — higher spending means higher discounts, and travel partners earn commission on the full transaction value.

4

Optional: Receive redemption webhooks

When a traveler redeems their DutyCredit at an airport store, DutyBoost can notify your system via a webhook. This is useful for CRM updates, commission tracking, or notifying account managers.

Configure your webhook URL in your Travel Partner dashboard under Settings → Webhooks.

webhook-handler.js
// DutyBoost will POST to your webhook URL when a voucher is redeemed
// Configure your webhook URL in your Travel Partner dashboard settings

app.post('/webhooks/dutyboost', (req, res) => {
  const { event, voucher_code, store_name, discount_amount, redeemed_at } = req.body;

  if (event === 'voucher.redeemed') {
    // Log commission earned, update CRM, notify account manager, etc.
    console.log(`Voucher ${voucher_code} redeemed at ${store_name}`);
    console.log(`You earned commission on ${discount_amount} EUR discount applied`);
  }

  res.status(200).send('OK');
});
5

Testing your integration

Sandbox mode

Add "test_mode": true to any API request to use the sandbox. Vouchers generated in sandbox mode are flagged and will not be accepted at stores.

Check the email

Use a real email address when testing. Verify the DutyCredit email arrives correctly and the QR code resolves to a valid voucher page.

Verify the voucher page

Open the duty_credit_url from the response. It should show the correct discount %, store list, and expiry date.

Dashboard confirmation

Log into your Travel Partner dashboard → Vouchers. Every API call should appear here in real time.

Commission & revenue share

DutyBoost operates on a performance-based revenue model. You earn commission on every redeemed DutyCredit based on the net sales value at the retailer.

Example transaction:

Basket spend (before discount)€300
Traveler discount (DutyCredit)−€60
Net sales value€240

Commission distribution on €240:

DutyBoost fee (2.5%)€6.00
Travel Partner share (0.5%)€1.20
DutyBoost net revenue€4.80

How it works:

  • → Net sales value = basket total minus the DutyCredit discount applied
  • → Commission = 0.5% of net sales value is paid to the Travel Partner
  • → Platform fee cap = €25 maximum on baskets up to €1,000
  • → Large baskets = all basket value above €1,000 goes entirely to the retailer (no platform fee)
  • → No hidden costs — you only earn on real transactions
  • → Commission is calculated automatically and appears in your Travel Partner dashboard

What the traveler experiences

Booking confirmation email

The DutyCredit block appears inside your confirmation email — branded with your Travel Partner name. No separate email needed from you.

Personal QR code page

Tapping the link opens a mobile-optimised voucher page showing the QR code, participating stores at their departure airport, discount %, and expiry.

Instant scan at the store

The retailer scans the QR code at the till. Discount is applied immediately. Traveler gets their discount — you earn your commission.

Need help integrating?

Our technical team is ready to support your integration. We can jump on a call, review your code, or provide a sandbox API key for testing.

We use cookies to improve your experience. You decide which cookies to allow — essential cookies are always required for the platform to function. Cookie Policy