# Bank transfer and USSD from your own UI (/docs/guides/bank-transfer-ussd)

If you already have your own payment screen and only need transfer or USSD details, create a **collection** from your server. For anything involving cards, use [hosted checkout](/docs/guides/accept-payments) instead: the collections endpoint does not accept card details.

## Create a collection [#create-a-collection]

`POST /payments/collections` with the `collections:create` permission.

```bash
curl https://api.creddot.com/api/v1/payments/collections \
  -H "x-api-key: $CREDDOT_API_KEY" \
  -H "x-api-secret: $CREDDOT_API_SECRET" \
  -H "x-idempotency-key: col-ORD-100001" \
  -H "content-type: application/json" \
  -d '{
    "amountMinor": "150000",
    "currency": "NGN",
    "channel": "BANK_TRANSFER",
    "reference": "ORD-100001",
    "customerEmail": "customer@example.com",
    "customerName": "Ada Okafor"
  }'
```

| Field | Notes |
| --- | --- |
| `channel` | `BANK_TRANSFER`, `USSD` or `QR` |
| `customerEmail` / `customerPhone` | At least one is required |
| `reference` | Your unique reference; look the payment up with it later |
| `callbackUrl` | Optional HTTPS URL for the provider's redirect |

The response has the Creddot `transactionId`, `status` (usually `PENDING`), the `feeMinor` you'll be charged and `netCreditMinor` that lands in your wallet. Show the customer the instructions from the response, then wait for the `transaction.success` [webhook](/docs/guides/webhooks) or poll `GET /transactions/by-reference/{reference}`.

## Dedicated accounts [#dedicated-accounts]

`GET /virtual-accounts` lists your business's dedicated collection accounts. Transfers into them are recorded as collections automatically and trigger `transaction.success`.
