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

# Orange Money — DRC

> Integrate Orange Money DRC with the LigdiCash API. Validation mode: LigdiCash redirect (pre-filtered payment page).

## Identity

| Field           | Value                                            |
| --------------- | ------------------------------------------------ |
| Country         | DRC                                              |
| Operator        | Orange Money DRC                                 |
| `operator_id`   | `34`                                             |
| `operator_name` | `ORANGE RDC CONGO`                               |
| Country code    | +243                                             |
| Number format   | `243XXXXXXXXX` (no `+` or spaces)                |
| Endpoint        | `POST /pay/v01/straight/checkout-invoice/create` |
| Validation mode | LigdiCash redirect                               |

## Validation mode: LigdiCash redirect

For Orange Money DRC, the LigdiCash integration currently goes through a **dedicated LigdiCash web page**, rather than direct API processing. The flow is:

1. You call `/pay/v01/straight/checkout-invoice/create` with the customer's number in `customer` and `otp: ""`.
2. LigdiCash responds with the transaction `token` and a `response_text` field containing **the URL of a LigdiCash payment page** where the number is pre-filled and only Orange DRC is offered.
3. You redirect the customer's browser to that URL.
4. The customer confirms the payment from the LigdiCash page and the payment proceeds following the operator's own flow.
5. LigdiCash notifies you of the final result via your `callback_url`.

<Warning>
  Pre-filling `customer` with the customer's number is **mandatory**. Without `customer`, the number-based filtering does not work and the payment page will not display Orange DRC correctly.
</Warning>

<Note>
  This mode does use the `/straight/checkout-invoice/create` endpoint (direct payin). Do not confuse this with [hosted payin](/en/payment-api/hosted-payin/introduction), which uses a distinct endpoint and exposes a multi-operator payment page.
</Note>

## Recommended UX

<Steps>
  <Step title="Collect the customer's number">
    Your form collects the Orange Money DRC phone number.
  </Step>

  <Step title="Submit the request">
    Request to `POST /pay/v01/straight/checkout-invoice/create` with `customer` filled and `otp: ""`.
  </Step>

  <Step title="Retrieve the LigdiCash page URL">
    In the response, the `response_text` field contains the URL of the dedicated LigdiCash payment page.
  </Step>

  <Step title="Redirect the customer">
    Redirect the customer's browser to that URL. The page shows the pre-filled number and Orange DRC pre-selected.
  </Step>

  <Step title="Wait for the callback">
    The final result arrives via your `callback_url`. Show a waiting state — do not rely on the browser-side return.
  </Step>
</Steps>

## Request example

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://app.ligdicash.com/pay/v01/straight/checkout-invoice/create \
    -H "Apikey: {API_KEY}" \
    -H "Authorization: Bearer {API_TOKEN}" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d '{
      "commande": {
        "invoice": {
          "items": [],
          "total_amount": 5000,
          "devise": "XOF",
          "description": "Pro Subscription — January 2025",
          "customer": "243850000000",
          "customer_firstname": "Joseph",
          "customer_lastname": "Mwamba",
          "customer_email": "joseph@example.com",
          "external_id": "",
          "otp": ""
        },
        "store": {
          "name": "MyApp",
          "website_url": "https://myapp.com"
        },
        "actions": {
          "cancel_url": "",
          "return_url": "",
          "callback_url": "https://myapp.com/api/callback/ligdicash"
        },
        "custom_data": {
          "transaction_id": "ORD-2025-00057"
        }
      }
    }'
  ```

  ```javascript Node.js theme={null}
  const response = await fetch(
    "https://app.ligdicash.com/pay/v01/straight/checkout-invoice/create",
    {
      method: "POST",
      headers: {
        Apikey: process.env.LIGDICASH_API_KEY,
        Authorization: `Bearer ${process.env.LIGDICASH_API_TOKEN}`,
        Accept: "application/json",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        commande: {
          invoice: {
            items: [],
            total_amount: 5000,
            devise: "XOF",
            description: "Pro Subscription — January 2025",
            customer: "243850000000",
            customer_firstname: "Joseph",
            customer_lastname: "Mwamba",
            customer_email: "joseph@example.com",
            external_id: "",
            otp: "",
          },
          store: { name: "MyApp", website_url: "https://myapp.com" },
          actions: {
            cancel_url: "",
            return_url: "",
            callback_url: "https://myapp.com/api/callback/ligdicash",
          },
          custom_data: { transaction_id: "ORD-2025-00057" },
        },
      }),
    }
  );

  const data = await response.json();
  // Redirect the customer to the LigdiCash payment page
  window.location.href = data.response_text;
  ```

  ```php PHP theme={null}
  $payload = [
    "commande" => [
      "invoice" => [
        "items" => [],
        "total_amount" => 5000,
        "devise" => "XOF",
        "description" => "Pro Subscription — January 2025",
        "customer" => "243850000000",
        "customer_firstname" => "Joseph",
        "customer_lastname" => "Mwamba",
        "customer_email" => "joseph@example.com",
        "external_id" => "",
        "otp" => "",
      ],
      "store" => ["name" => "MyApp", "website_url" => "https://myapp.com"],
      "actions" => [
        "cancel_url" => "",
        "return_url" => "",
        "callback_url" => "https://myapp.com/api/callback/ligdicash",
      ],
      "custom_data" => ["transaction_id" => "ORD-2025-00057"],
    ],
  ];

  $ch = curl_init("https://app.ligdicash.com/pay/v01/straight/checkout-invoice/create");
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
  curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Apikey: " . $_ENV["LIGDICASH_API_KEY"],
    "Authorization: Bearer " . $_ENV["LIGDICASH_API_TOKEN"],
    "Accept: application/json",
    "Content-Type: application/json",
  ]);

  $data = json_decode(curl_exec($ch), true);
  // Redirect the customer to the LigdiCash payment page
  header("Location: " . $data["response_text"]);
  ```
</CodeGroup>

## Expected response

```json theme={null}
{
  "response_code": "00",
  "token": "eyJ0eXAiOiJKV1Qi...",
  "response_text": "https://app.ligdicash.com/pay/.../checkout/...",
  "description": "",
  "custom_data": {
    "transaction_id": "ORD-2025-00057"
  },
  "wiki": "https://client.ligdicash.com/wiki/createInvoice"
}
```

Redirect the customer to the URL in `response_text`. The payment page will only show Orange Money DRC with the pre-filled number.

<Warning>
  Store the `token` immediately after creation. Use it to call `confirm` when the callback is received — never rely on the token in the callback payload.
</Warning>

## Limits

| Parameter      | Value  |
| -------------- | ------ |
| Minimum amount | 10 XOF |
| Maximum amount | --     |
| Daily limit    | --     |

## Related pages

* [Validation modes — LigdiCash redirect](/en/payment-api/direct-payin/validation-modes) — flow details
* [Create a transaction](/en/payment-api/direct-payin/create-transaction) — full endpoint reference
* [Verify the status](/en/payment-api/direct-payin/verify-status) — call `confirm` after the callback
