> ## Documentation Index
> Fetch the complete documentation index at: https://docs.payfonte.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Direct Charge Example Payloads

> Copy-ready direct charge payloads for standard mobile money, Bank Transfer, and Orange pre-OTP provider flows.

Use these payload templates when calling:

`POST /payments/v1/payments/direct-charge`

## Common Payload (Most Providers)

```json theme={null}
{
  "reference": "ORDER-1001",
  "amount": 10000,
  "provider": "mtn-momo-ivory-coast",
  "webhook": "https://yourapp.com/webhooks/payfonte",
  "narration": "Order payment",
  "customerInput": {
    "phoneNumber": "2250512345678"
  }
}
```

## Orange Pre-OTP Payload

Orange providers may require a customer-generated code before request submission.

### USSD guidance

* Orange Senegal: `#144#391#`
* Orange Mali: `#144#77#`
* Orange Burkina Faso: `*144*4*6*amount#`

On sandbox, any random 6-digit code can be used for testing.

```json theme={null}
{
  "reference": "ORDER-1003",
  "amount": 10000,
  "provider": "orange-senegal",
  "webhook": "https://yourapp.com/webhooks/payfonte",
  "narration": "Order payment",
  "customerInput": {
    "phoneNumber": "786175702",
    "customerCode": "<6-digit-code>"
  }
}
```

## Field Reference

| Field                        | Type    | Required          | Notes                                               |
| ---------------------------- | ------- | ----------------- | --------------------------------------------------- |
| `reference`                  | string  | Recommended       | Must be unique per transaction                      |
| `amount`                     | integer | Yes               | Minor-unit value only                               |
| `provider`                   | string  | Yes               | Use slug from Supported Providers                   |
| `webhook`                    | string  | No                | Per-request webhook override                        |
| `narration`                  | string  | No                | Human-readable transaction note                     |
| `customerInput.phoneNumber`  | string  | Usually Yes       | Format based on provider/country                    |
| `customerInput.network`      | string  | Provider-specific | Required for some specific flows like bank transfer |
| `customerInput.customerCode` | string  | Provider-specific | Required for Orange pre-OTP flows                   |

## Validation Checklist Before Sending

<AccordionGroup>
  <Accordion title="Amount format" icon="hashtag" defaultOpen>
    Send integer minor-unit amounts only. Decimals are not supported.
  </Accordion>

  <Accordion title="Provider slug" icon="tag">
    Ensure `provider` matches a valid slug from [Supported Providers](/en/guides/introductions/supported-providers).
  </Accordion>

  <Accordion title="Required customerInput fields" icon="list-check">
    Confirm provider-specific fields exist (`phoneNumber`, `network`, `customerCode`) before sending request.
  </Accordion>

  <Accordion title="Reference uniqueness" icon="fingerprint">
    Generate unique references to prevent duplicate transaction errors.
  </Accordion>
</AccordionGroup>

## Related Docs

<CardGroup cols={3}>
  <Card title="Direct Charge API" icon="bolt" href="/en/guides/collections/direct-charge-api">
    Request flow and response/action handling.
  </Card>

  <Card title="Processing Flows" icon="bolt" href="/en/guides/collections/direct-charge/response-types">
    Processing, redirect, bankTransfer, and pre-OTP behavior.
  </Card>

  <Card title="Amount Specification" icon="hashtag" href="/en/guides/introductions/amount-specification">
    Minor-unit conversion rules for all amounts.
  </Card>
</CardGroup>
