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

# Partner webhook delivery

> Element Pay POSTs to your configured `webhook_url` when orders, customers, or accounts change. Treat webhooks as the source of truth for settlement and KYC readiness.

**Signature verification**
1. Parse `X-Webhook-Signature`: `t=<unix_ts>,v1=<base64_hmac>`.
2. Reject if `t` is older than 5 minutes.
3. Compute HMAC-SHA256 over `{t}.{raw_body}` with `webhook_secret`; constant-time compare to `v1`.

**Idempotency:** dedupe on `X-Webhook-Id`. Return 2xx quickly.

Guide: `webhooks.mdx` / hosted `/webhooks`.



## OpenAPI

````yaml /api-reference/openapi.json webhook partnerEvent
openapi: 3.1.0
info:
  title: Element Pay Partner API
  description: >
    Provider-neutral fiat ↔ crypto ramps for partners. Discover corridors,
    create a binding quote, accept it, and receive webhooks. African local fiat
    (mobile money and bank) is auto-routed by corridor.


    ## Agent / integrator notes


    - Canonical machine-readable contract: `openapi.yaml` (this document) and
    `openapi.json`.

    - Human/agent quickstart: `docs/agents.md` - local fiat <-> USDC/USDT:
    `docs/integration-fiat-stablecoin.md` - gaps: `docs/KNOWN_GAPS.md`.

    - All partner routes are under `/partner/*` relative to the server base URL.

    - Settlement source of truth: webhooks (see `webhooks` section); poll `GET
    /partner/orders/{order_id}` as backup.
  version: 1.0.0
servers:
  - url: https://sandbox.elementpay.net/api/v1
    description: Sandbox (API keys prefixed is_test_)
  - url: https://api.elementpay.net/api/v1
    description: Production (API keys prefixed is_live_)
security:
  - APIKeyHeader: []
tags:
  - name: partner
    description: >-
      Corridor discovery, indicative rates, binding quotes, and order acceptance
      (including order-path account currency conversion rails). Customer ledger
      conversions use partner-customer-transfers `/conversions`.
    x-group: Partner
  - name: partner-customers
    description: >-
      Vault KYC: requirements, create, list, get/update, documents, submit, and
      revoke (`pcus_*`).
    x-group: Customers
  - name: partner-customer-accounts
    description: >-
      Customer deposit rails: open / list / get accounts and deposit
      instructions.
    x-group: Customer accounts
  - name: partner-customer-transfers
    description: >-
      On-ledger money movement: stablecoin sends, same-currency book transfers,
      and cross-currency conversions.
    x-group: Customer transfers
  - name: partner-customer-payouts
    description: >-
      External bank payouts: scheme discovery, local bank directory
      (NGN/GHS/CAD), preview, confirm, and status.
    x-group: Customer payouts
paths: {}
components:
  securitySchemes:
    APIKeyHeader:
      type: apiKey
      in: header
      name: X-API-Key
      description: >-
        Partner API key. Sandbox keys start with `is_test_`; production keys
        start with `is_live_`. Keys are not interchangeable across environments.
        Send on every request. Never expose in browser or mobile clients.

````