Developer docs v0.1.0

Payment links

Shareable links for one-time payments with no customer or stored card.

POST /v1/payment-links

Create a payment link

Creates a link for a one-time payment with no customer and no stored card. Share url with the payer: a Payware page asks for their email, name and billing details, then sends them to NETOPIA Payments' secure page to pay. The link is single use, reopens if a payment attempt fails, and expires after expires_in_days (default 7). The result appears in GET /v1/payments as a payment with customer_id: null; read status there or consume payment.succeeded/payment.failed. An abandoned checkout stays pending until it is reconciled.

Authentication
Merchant API key
Effect
Creates a payment link; nothing is charged until the payer pays.

Headers

NameTypeRequiredDescription
Idempotency-KeystringnoMakes retries safe: same key + body replays the stored response (idempotency-replayed: true); a different body returns 409 idempotency_key_in_use. · ≤ 96 chars

Request body

Example request
{
  "kind": "payment",
  "amount": 1,
  "currency": "RON",
  "description": "string",
  "return_url": "https://example.com/hooks/payware",
  "expires_in_days": 7,
  "metadata": {},
  "payment_methods": [
    "card"
  ]
}

Responses

StatusMeaningBody / error codes
201Success.PaymentLink
400Invalid body, no usable instrument, or instrument not verified.validation_failed instrument_required instrument_enrollment_required
401Missing or invalid API key.authentication_error
429Rate limited; honor retry-after.rate_limit_exceeded too_many_auth_failures
500Server error.api_error
Example response
{
  "object": "payment_link",
  "id": "01JB9XK3M2R7TQ8N4V6Y0ZPA1C",
  "kind": "payment",
  "status": "open",
  "url": "https://example.com/hooks/payware",
  "amount": 1,
  "currency": "RON",
  "description": "string",
  "return_url": "https://example.com/hooks/payware",
  "metadata": {},
  "expires_at": "2026-10-25T18:00:00.000Z",
  "payer_email": "string",
  "payer_name": "string",
  "payment_id": "01JB9XK3M2R7TQ8N4V6Y0ZPA1C",
  "completed_at": "2026-10-25T18:00:00.000Z",
  "created_at": "2026-10-25T18:00:00.000Z",
  "payment_methods": [
    "card"
  ],
  "price_id": "string",
  "quantity": 1,
  "customer_id": "string",
  "subscription_id": "string"
}

POST /v1/payment-links/:id/cancel

Cancel a payment link

Cancels an open link. A link with a payment in progress cannot be canceled (409).

Authentication
Merchant API key
Effect
Marks the link canceled.

Path parameters

NameTypeRequiredDescription
idstringyesObject ID (ULID). · 26 chars

Headers

NameTypeRequiredDescription
Idempotency-KeystringnoMakes retries safe: same key + body replays the stored response (idempotency-replayed: true); a different body returns 409 idempotency_key_in_use. · ≤ 96 chars

Responses

StatusMeaningBody / error codes
200Success.PaymentLink
401Missing or invalid API key.authentication_error
404Not found, or not yours.resource_missing
409Review is already resolved differently, or not open.payment_review_already_resolved payment_review_not_open
429Rate limited; honor retry-after.rate_limit_exceeded too_many_auth_failures
500Server error.api_error
Example response
{
  "object": "payment_link",
  "id": "01JB9XK3M2R7TQ8N4V6Y0ZPA1C",
  "kind": "payment",
  "status": "open",
  "url": "https://example.com/hooks/payware",
  "amount": 1,
  "currency": "RON",
  "description": "string",
  "return_url": "https://example.com/hooks/payware",
  "metadata": {},
  "expires_at": "2026-10-25T18:00:00.000Z",
  "payer_email": "string",
  "payer_name": "string",
  "payment_id": "01JB9XK3M2R7TQ8N4V6Y0ZPA1C",
  "completed_at": "2026-10-25T18:00:00.000Z",
  "created_at": "2026-10-25T18:00:00.000Z",
  "payment_methods": [
    "card"
  ],
  "price_id": "string",
  "quantity": 1,
  "customer_id": "string",
  "subscription_id": "string"
}