# Manual Payment API (https://talivia.com/docs/revenue-guides/manual)



Use the Manual Payment API when revenue comes from a custom checkout, bank transfer, crypto processor, app store, invoice system, or another provider that Talivia does not connect to directly.

## Create an API key [#create-an-api-key]

Open **Website settings -> API keys** and generate a key. Talivia creates it for the current
website.

Copy the secret immediately because it is shown only once. Store it only on your backend and do not
expose it in browser code.

## Send a payment [#send-a-payment]

Send payment events to Talivia after your backend confirms the money was received.

Before checkout, send `window.talivia.getSessionId()` to your backend and keep it with the order as `sessionId`.

```javascript title="Record a confirmed payment"
await fetch('https://talivia.com/api/payments/manual', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'x-talivia-api-key': process.env.TALIVIA_API_KEY,
  },
  body: JSON.stringify({
    websiteId: 'YOUR_WEBSITE_ID',
    transactionId: 'order_123',
    amount: 49,
    currency: 'USD',
    providerName: 'manual',
    providerPaymentId: 'payment_123',
    providerCustomerId: 'customer_123',
    sessionId: order.sessionId,
  }),
});
```

Use stable ids. `transactionId` should be unique for the payment in your system. Reuse the same id if you retry the request.

## Supported attribution fields [#supported-attribution-fields]

Send the session field when possible:

* `sessionId`
* `providerCustomerId`
* `externalCustomerId`
* `email`
* `emailHash`

Talivia uses `sessionId` to connect the payment to the exact visitor journey. Customer fields can reconnect later renewals after the initial payment has been matched.

## Verify [#verify]

1. Send a test payment from your backend.
2. Open Talivia payments for the website.
3. Confirm the amount, currency, provider name, and transaction id.
4. Open the session detail and verify the spend amount appears on the matched session.
