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

# POBO overview

> Pay out on behalf of a named originator, through Paywho rails

Payment on behalf of. You pay a recipient **on behalf of a named sender** — the
originator of the money — and that sender is recorded on every transaction.

POBO is a separate surface from the standard Partner API, with three differences
that will catch you out if you assume otherwise.

## What is different

|             | Standard Partner API                          | POBO                                                        |
| ----------- | --------------------------------------------- | ----------------------------------------------------------- |
| Scope       | User-scoped — `{userId}` in nearly every path | **Partner-scoped** — no `userId` anywhere                   |
| Identifiers | Internal UUIDs                                | **Prefixed reference ids** — `snd_`, `rec_`, `qut_`, `txn_` |
| Routing     | Paywho or Bridge                              | **Paywho only** — a Bridge route is a `400`                 |
| Permission  | `quotes`, `recipients`, `transactions`        | **`pobo`**                                                  |

<Note>
  Internal UUIDs are never exchanged on this surface. Every identifier you send or
  receive is a reference id, and the prefix tells you what it points at.
</Note>

## Base URL

| Environment | Base URL                      |
| ----------- | ----------------------------- |
| Sandbox     | `https://api-sandbox.endl.io` |
| Production  | Issued at onboarding          |

Every POBO endpoint lives under `/api/v0/pobo`.

## Authentication

The same single header as the rest of the Endl API, and the key must carry the
**`pobo`** permission.

```bash theme={null}
curl https://api-sandbox.endl.io/api/v0/pobo/senders \
  -H "API-KEY: $ENDL_API_KEY"
```

A key without `pobo` is rejected with `403`, raised at the edge before the
request reaches the service. See [Authentication](/api-reference/authentication).

## Paywho only

This is the constraint most likely to surprise you. **A POBO quote must resolve to
a Paywho route.** That means either:

* a Paywho-supported currency on a bank-transfer rail, or
* `INR` on `BANK_TRANSFER`, `IMPS`, `UPI` or `CRYPTO`

Anything that would route through Bridge — `USD → EUR` over `ACH`, for example —
is refused:

```json 400 theme={null}
{
  "code": 400,
  "message": "Rail not supported for POBO",
  "status": "ERROR",
  "data": null,
  "errors": [
    { "code": "VALIDATION_ERROR", "message": "Rail not supported for POBO", "field": null }
  ]
}
```

Treat this as a routing decision rather than a malformed request — the payload was
fine, the corridor simply is not available on POBO.

## The sender is mandatory

`senderId` is required on **every** POBO transaction, at both
[pre-transaction](/api-reference/pobo/create-pre-transaction) and
[submit](/api-reference/pobo/submit-transaction). That is the entire purpose of
the surface: the payment is made on behalf of a named originator, and the record
carries who that was.

Before a sender can be used for a payout it needs three things:

| Field             | Why                                                                    |
| ----------------- | ---------------------------------------------------------------------- |
| A name            | `firstName`/`lastName`, or `businessName` for a business               |
| `governmentId`    | Identifies the originator. Unique per partner — a duplicate is a `409` |
| `address.country` | Jurisdiction of the originator                                         |

A sender created without them is accepted, but a payout referencing it will not
proceed.

## A POBO payout, end to end

1. **Register the originator.** [Create sender](/api-reference/pobo/create-sender)
   with a name, `governmentId` and country. Keep the `snd_` id.
2. **Register the recipient.** Ask
   [Get recipient required fields](/api-reference/reference/get-recipient-required-fields)
   on the standard Partner API which fields the destination currency and rail
   need, then [create the recipient](/api-reference/pobo/create-recipient). Keep
   the `rec_` id.
3. **Price it.** [Generate a quote](/api-reference/pobo/generate-quote) on a
   Paywho route. Keep the `qut_` id.
4. **Fund it.** [Create a pre-transaction](/api-reference/pobo/create-pre-transaction)
   with the quote, the recipient and — mandatorily — the sender. You get deposit
   instructions back.
5. **Submit and track.** [Submit](/api-reference/pobo/submit-transaction), then
   [get the transaction](/api-reference/pobo/get-transaction) by its `txn_` id.
   Submitted rows are marked `alias=POBO`.

## Conventions

| Convention           | Detail                                                                                                                         |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| Identity             | Comes from your API key. POBO is partner-scoped, so there is no user in any path.                                              |
| Reference ids        | `snd_` sender · `rec_` recipient · `qut_` quote · `txn_` transaction · `dep_` deposit · `acct_` account · `file_` invoice file |
| Listing              | `POST …/all` rather than `GET`, because the paging options travel in the body                                                  |
| Updating a recipient | `PUT /api/v0/pobo/recipients` with `id` **in the body**, not in the path                                                       |
| Errors               | The shared envelope, as elsewhere on the Partner API. See [Errors](/api-reference/errors).                                     |

<Warning>
  **Success payloads are not specified yet.** This reference was built from the
  POBO Postman collection, which carried no saved responses. Requests, parameters
  and error bodies are accurate; the shape of `data` in a successful response has
  not been captured from a live environment. See [what is
  missing](/api-reference/introduction#whats-missing).
</Warning>
