---
title: ZevPay ID
description: How the ZevPay ID (PayID) method works. A dynamic PayID and QR code are created per session, and the customer pays from the ZevPay app for instant confirmation.
---

# ZevPay ID

ZevPay ID lets a customer pay from the ZevPay app. When they pick it, we create a dynamic PayID and a QR code for the session. The customer sends to the PayID or scans the QR code, and the payment confirms instantly.

Identifier: `payid` (also `payid` in the inline SDK).

## How it works

1. The customer selects ZevPay ID.
2. We create a dynamic PayID and a QR code for the session.
3. The customer opens the ZevPay app and sends to the PayID, or scans the QR code.
4. The payment confirms instantly.
5. The session moves to completed and your webhook fires.

## What the customer sees

Selecting the method returns the PayID and QR data:

```json
{
  "payment_method": "payid",
  "pay_id": "abc3.dypid",
  "qr_data": "https://zevpay.me/abc3.dypid",
  "amount": 500000,
  "expires_at": "2026-01-01T12:30:00.000Z"
}
```

`amount` is in kobo. `qr_data` is a URL you can render as a QR code for scanning.

## Key details

- The PayID is dynamic and expires with the session after 30 minutes.
- The amount must match exactly. The PayID accepts a single payment for the session amount.
- A QR code is provided for quick scanning.
- On an [invoice](/checkout/invoice) that requires full payment (`allow_partial_payments: false`), ZevPay ID is hidden, because a customer-initiated transfer cannot enforce an exact partial amount.

## Verifying the payment

Confirm the payment from your server before fulfilling. See [Verify Session](/api/verify-session) and [Payment Lifecycle](/guide/payment-lifecycle).

## Related

- [Bank Transfer](/payment-methods/bank-transfer)
- [Payment Methods overview](/payment-methods/overview)
- [Virtual PayID](/guide/virtual-payid)
