PayMeNow Docs

Provisioning clients

Partner endpoints for creating, reading, and updating merchant accounts. All calls require a Bearer pmn_partner_... key issued by PayMeNow.

Create a merchant

POST https://paymenow.dev/api/partner/clients
Authorization: Bearer pmn_partner_...
Content-Type: application/json

{
  "email": "owner@merchant.com",
  "name": "Acme Co",
  "fee_percent": 5
}

Response:

{
  "client_id": "e2a0...",
  "api_key": "pmn_live_...",
  "secret_key": "pmn_sec_...",
  "webhook_secret": "pmn_whsec_...",
  "dashboard_url": "https://paymenow.dev/dashboard/"
}
Field Required Notes
email yes Owner email. Must be unique across PayMeNow.
name no Display name.
fee_percent no Clamped to the fee range your partner account is configured with. Omit to use the maximum.

Store api_key (public, used in embeds) and secret_key (server-side only, used from your backend) on your side keyed to the user who owns the merchant.

webhook_secret is for verifying normalized PayMeNow webhooks. Automatic outbound webhook delivery is not currently enabled; use the merchant dashboard/API for payment status.

Idempotency

Posting the same email under the same partner twice returns the existing record (same client_id and api_key). Safe to retry.

Posting an email that already exists under a different partner or as a self-serve PayMeNow signup returns 409 Conflict. You cannot capture merchants who already have an account.

Read a merchant

GET /api/partner/clients/{client_id}
Authorization: Bearer pmn_partner_...

Response:

{
  "client_id": "e2a0...",
  "email": "owner@merchant.com",
  "name": "Acme Co",
  "fee_percent": 5,
  "onboarded": false,
  "created_at": "2026-10-02T10:00:00Z"
}

Returns 404 for any client that was not provisioned by your partner account.

Update metadata

PATCH /api/partner/clients/{client_id}
Authorization: Bearer pmn_partner_...
Content-Type: application/json

{ "name": "Acme Corporation" }

Only metadata is updatable by partners. fee_percent, email changes, and other sensitive fields require merchant action or PayMeNow support.

Rendering the embed

Once you have the api_key, drop the standard embed on your user's site:

<div id="paymenow-form"
  data-api-key="pmn_live_..."
  data-product-id="550e8400-e29b-41d4-a716-446655440000">
</div>
<script src="https://paymenow.dev/embed/paymenow.js"></script>

See the client Getting started doc for all embed modes.

Letting the owner log in

PayMeNow's dashboard accepts any merchant email via OTP login. Point partner-provisioned users at /dashboard/, they enter their email, receive a code, and sign in. On first sign-in they must accept the Terms of Service. Payments for the merchant are rejected with 403 and code terms_not_accepted until they do. From there they can:

  • See their payment history and balance
  • Create / edit products
  • Connect a Stripe account to receive payouts

Your platform does not need to manage any of that.