---
title: Request a pre-approval
description: Ask a customer to approve future debits without a prompt each time. Needs the collect permission.
api: POST /preapprovals
---

Sends the customer a prompt to approve future charges. Once it's `approved`, [collect](/docs/api/collect) with `preapproval_reference` to charge them without asking again. See [Recurring payments](/docs/guides/recurring-payments).

- **`external_reference`** · body · `string` · required

  Your unique reference for this pre-approval. Retrying with it returns the original.

- **`provider`** · body · `string` · required · default `momo`

  Provider to request it through.

- **`phone_number`** · body · `string` · required

  The customer's MoMo number.

- **`currency`** · body · `string` · required · default `SZL`

  Currency of the charges it will cover.

- **`message`** · body · `string`

  Shown to the customer when they approve. RazPay appends a short ` Ref XXXXXXXX` tag; the whole message stays within 160 characters.

- **`validity_seconds`** · body · `integer` · required

  How long the approval lasts once given.

- **`metadata`** · body · `object`

  Your own data.

## The pre-approval object

- **`external_reference`** · `string` · required

  Your reference.

- **`provider_id`** · `string` · required

  The provider.

- **`provider_ref`** · `string` · required

  The reference RazPay gave the provider.

- **`payer_phone`** · `string` · required

  The customer's number, canonical form.

- **`currency`** · `string` · required

  ISO 4217 code.

- **`message`** · `string` · required

  The message the customer saw, including the tag.

- **`validity_seconds`** · `integer` · required

  As requested.

- **`status`** · `string` · required

  `pending`, `approved`, `failed`, `cancelled` or `expired`.

- **`failure_reason`** · `string`

  Why it failed, was cancelled by the payer, or expired.

- **`expires_at`** · `integer`

  Unix time (seconds) the approval runs out, once approved.

- **`metadata`** · `object` · required

  Your own data.

- **`created_at`** · `integer` · required

  Unix time (seconds) it was requested.

- **`updated_at`** · `integer` · required

  Unix time (seconds) of its last change.

```json 200
{
  "success": true,
  "message": "pre-approval requested",
  "data": {
    "external_reference": "gym-membership-sipho",
    "provider_id": "momo",
    "provider_ref": "11377cbe-374c-43f6-a019-4fb70e57b617",
    "payer_phone": "26876123456",
    "currency": "SZL",
    "message": "Monthly gym membership Ref 11377CBE",
    "validity_seconds": 31536000,
    "status": "pending",
    "metadata": {},
    "created_at": 1760774400,
    "updated_at": 1760774400
  }
}
```
