SpareSpare Docs
GuidesAPI Reference

Single Instant Payment

Integrate a one-off immediate payment (SingleInstantPayment).

Integration guide

Goal: Collect one amount from a payer immediately after bank authorization, using the SingleInstantPayment type.

Estimated time: 15 minutes

Prerequisites

When to use

  • E-commerce checkout
  • Invoice payment links
  • One-time service fees

Payment type: SingleInstantPayment
Regions: UAE (primary), KSA (SINGLE_DOMESTIC), Bahrain (domestic PIS)

Integration summary

Register creditor account

Register the bank account that receives funds.

Bank account setup β†’

Create payment request

Set paymentType to SingleInstantPayment. Put amount and currency inside instructions, not at the root of the body.

curl -X POST https://api.sandbox.tryspare.ae/payment-requests \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "x-tenant: UAE" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "SingleInstantPayment",
    "creditorType": "MERCHANT",
    "creditorReference": "Order #9876",
    "merchantReference": "order-9876",
    "purpose": "GDDS",
    "creditorAccount": {
      "schemeName": "IBAN",
      "identification": "AE070331234567890123456",
      "name": "Acme Trading LLC"
    },
    "instructions": {
      "amount": { "amount": "100.00", "currency": "AED" }
    }
  }'
await client.paymentRequests.create({
  paymentType: "SingleInstantPayment",
  instructions: { amount: 100_00, currency: "AED" },
  // creditorAccount, creditorReference, redirectUrl, ...
});
client.payment_requests.create(
    payment_type="SingleInstantPayment",
    instructions={"amount": 100_00, "currency": "AED"},
    # creditor_account, creditor_reference, redirect_url, ...
)
client.paymentRequests().create(
    CreatePaymentRequest.builder()
        .paymentType("SingleInstantPayment")
        .instructions(PaymentInstructions.builder().amount(100_00).currency("AED").build())
        // creditorAccount, creditorReference, redirectUrl, ...
        .build());
await client.PaymentRequests.CreateAsync(new CreatePaymentRequest
{
    PaymentType = "SingleInstantPayment",
    Instructions = new PaymentInstructions { Amount = 100_00, Currency = "AED" },
    // CreditorAccount, CreditorReference, RedirectUrl, ...
});
client.PaymentRequests.Create(ctx, &spareapi.CreatePaymentRequest{
    PaymentType:  "SingleInstantPayment",
    Instructions: &spareapi.PaymentInstructions{Amount: 100_00, Currency: "AED"},
    // CreditorAccount, CreditorReference, RedirectUrl, ...
})

Create consent from the payment request and redirect the payer to authorizationUrl, or use Spare Link to host bank UI.

Verify and fulfill

Poll consent/payment status or use webhooks. Fulfill only after Authorised + payment confirmation.

Key takeaways

  • This is the path covered end-to-end in Payment.
  • Amount lives in instructions; root-level amount fields aren't accepted.
  • Same consent objects whether you use direct API or Spare Link.

On this page