# Phase 14.3 — Payment Requests

| Field | Value |
| --- | --- |
| Identifier | `payment-14.3` |
| Implementation Priority | **HIGH** |
| Status | Complete |
| Service | `payment` |
| Depends On | `payment-14.2` |

> Full specification: [payment-roadmap.md](../../payment-roadmap.md#phase-14-3--payment-requests)

## Purpose

Idempotent payment request initiation for any vertical — amount, currency (IRR first), commercial refs, redirect/token payload from selected PSP.

## Business Scope

Initiate pay for order/invoice/membership/checkout refs. Expire abandoned requests. Route via BYO-PSP or facilitator merchant.

## Technical Scope

Aggregates: PaymentRequest, PaymentRequestLine, PaymentRequestStatusHistory. Idempotency-Key enforcement. Adapter `initiate_payment()`.

## Dependencies

`payment-14.2`, active PSP connection or merchant account

## Out of Scope

Callbacks (14.4), ledger (14.5), refunds (14.6).

## Capabilities

`payment.requests`, `payment.initiate`, `payment.idempotency`

## Permissions

`payment.requests.view|create|cancel|manage`; internal `payment.requests.create`

## Events

`payment.request.created|redirect_issued|expired|cancelled|failed`

## API Contracts

POST/GET `/api/v1/payment-requests`, POST `.../cancel`, internal `/internal/v1/payment-requests`

## Data Ownership

Payment owns request lifecycle; vertical owns commercial aggregate.

## Provider Ownership

PSP initiate APIs in adapters only.

## Integration Rules

Verticals pass refs only. Duplicate idempotency key returns same request.

## Quality Gates

Idempotency, amount validation, state machine, tenant isolation.

## Definition of Done

Mock initiate returns redirect payload; events emitted; ledger deferred to 14.5.

## Future Compatibility

Multi-currency; tokenized card metadata slots.
