TigerPayDevelopers API v1 tigerpay.app

Get started

Quick start

Create a test payment, open the checkout page, and see the result. It takes about five minutes.

1. Get a test key#

Sign in to your TigerPay merchant dashboard and create an API key in test mode. It starts with sk_test_. The dashboard shows the full key once, so copy it now.

Test keys work straight away. You do not need to wait for your account to be verified. No real money moves in test mode.

Keep the key on your server

Never put a secret key in a web page, a mobile app or a public code repository. Store it in an environment variable.

2. Create a payment#

Send the amount, your own order reference, and two https URLs on your site (success_url and cancel_url, both required). Replace sk_test_YOUR_KEY with your key.

curl https://api.tigerpay.app/v1/payments \
  -H "Authorization: Bearer sk_test_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-1001" \
  -d '{
    "amount": "340.00",
    "currency": "AED",
    "reference": "order-1001",
    "description": "Blue mug",
    "customer_email": "buyer@example.com",
    "success_url": "https://shop.example.com/thanks",
    "cancel_url": "https://shop.example.com/cart",
    "metadata": { "cart_id": "42" }
  }'
// Node 18 or newer (fetch is built in)
const response = await fetch("https://api.tigerpay.app/v1/payments", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.TIGERPAY_SECRET_KEY}`,
    "Content-Type": "application/json",
    "Idempotency-Key": "order-1001",
  },
  body: JSON.stringify({
    amount: "340.00",
    currency: "AED",
    reference: "order-1001",
    description: "Blue mug",
    customer_email: "buyer@example.com",
    success_url: "https://shop.example.com/thanks",
    cancel_url: "https://shop.example.com/cart",
    metadata: { cart_id: "42" },
  }),
});

const payment = await response.json();
if (!response.ok) {
  throw new Error(`${payment.error.code}: ${payment.error.message}`);
}
console.log(payment.id, payment.checkout_url);
<?php
$ch = curl_init('https://api.tigerpay.app/v1/payments');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 30,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . getenv('TIGERPAY_SECRET_KEY'),
        'Content-Type: application/json',
        'Idempotency-Key: order-1001',
    ],
    CURLOPT_POSTFIELDS     => json_encode([
        'amount'         => '340.00',
        'currency'       => 'AED',
        'reference'      => 'order-1001',
        'description'    => 'Blue mug',
        'customer_email' => 'buyer@example.com',
        'success_url'    => 'https://shop.example.com/thanks',
        'cancel_url'     => 'https://shop.example.com/cart',
        'metadata'       => ['cart_id' => '42'],
    ]),
]);
$body   = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payment = json_decode($body, true);
if ($status >= 400) {
    throw new Exception($payment['error']['code'] . ': ' . $payment['error']['message']);
}
echo $payment['id'] . ' ' . $payment['checkout_url'];

You get back the payment. The status is pending and checkout_url is set:

{
  "id": "pay_kY9pF34Qy6nB3Wwd25rq4f5z",
  "object": "payment",
  "status": "pending",
  "amount": "340.00",
  "amount_refunded": "0.00",
  "currency": "AED",
  "fee": null,
  "net": null,
  "reference": "order-1001",
  "description": "Blue mug",
  "customer_email": "buyer@example.com",
  "metadata": { "cart_id": "42" },
  "checkout_url": "https://pay.tigerpay.app/…",
  "card": null,
  "failure_message": null,
  "livemode": false,
  "created_at": "2026-10-20T10:00:00.000Z",
  "paid_at": null
}

The exact checkout_url is different for every payment. Treat it as a plain string. In test mode it can be on a different test host.

3. Send the customer to the checkout page#

Redirect the customer's browser to checkout_url. In a web app that is a normal HTTP redirect:

// Express example
app.post("/checkout", async (req, res) => {
  const payment = await createTigerPayPayment(req.body.orderId); // the call from step 2
  res.redirect(303, payment.checkout_url);
});

While testing, open the URL yourself and pay. Ask TigerPay support (or check your dashboard) for test card details. They are not listed in these docs.

4. Check the result#

Fetch the payment with the id you got in step 2:

curl https://api.tigerpay.app/v1/payments/pay_kY9pF34Qy6nB3Wwd25rq4f5z \
  -H "Authorization: Bearer sk_test_YOUR_KEY"

After a successful payment, status is succeeded and fee, net, card and paid_at are filled in. If the customer has not finished, it stays pending.

Polling is fine for a first test. For a real shop, use webhooks instead.

5. Add a webhook#

In your dashboard, add a webhook endpoint (an https URL on your server) for test mode. Copy its signing secret, which starts with whsec_. Then follow Webhooks to check the signature and mark orders paid.

Go live#

When testing works, ask TigerPay to enable live payments for your account. We verify your business and website first. After that you can create a live key (sk_live_) and a live webhook endpoint. See the go-live checklist.