Skip to main content
POST

Authorizations

Authorization
string
header
required

A secret key, sk_test_... or sk_live_...; a publishable key (pk_...) on the browser routes only

Body

application/json
session
string

A session of yours that has succeeded. Each session creates one payment method. Send this or us_bank_account.

Required string length: 1 - 64
Example:

"pms_test_7Hs2kQ9mL1pXv4cR8tWzAbCd"

account_holder_authorization
boolean

Required, and true, when a card session named a customer and the card is saved: your attestation that the cardholder agreed to keep the card on file. Not used for a bank account: the account holder accepted the ACH authorization, or the pre-authorized debit agreement on a Canadian account, in Payra Elements. Leave it out with us_bank_account, where ach_authorization is your attestation.

Example:

true

usage
enum<string>

Leave it out and the session decides: saved when it named a customer, one_time when it did not. Send one_time for a card collected on a session with a customer when the cardholder chose not to keep it: it is charged once and not saved, and its payment is still filed on the customer. So your page can bind the session to a signed-in buyer before they choose. saved needs a customer on the session; a bank account follows its session only. Leave it out with us_bank_account, where customer decides.

Available options:
saved,
one_time
Example:

"one_time"

return_url
string<uri>

Where the cardholder comes back after their bank's 3-D Secure step, with ?payment_method=pm_… appended, when your server sends them there. With it, a card the bank wants to authenticate before it is saved answers requires_action with a redirect next_action, a Payra page. Send this or use_payra_js to have the bank authenticate the card; without either the card is saved without that step, as before. Must be https (or http://localhost with a sandbox key). No effect on a one-time card, or while 3-D Secure is not enabled for your workspace.

Maximum string length: 2048
use_payra_js
boolean

true when your page runs the bank's 3-D Secure step itself, with Payra Elements: a card the bank wants to authenticate before it is saved answers requires_action with a three_ds_fingerprint or three_ds_challenge next_action, which payra.handleNextAction(paymentMethod) runs without leaving the page. Send this or return_url, not both.

us_bank_account
object

A US bank account your server already holds, sent instead of a session. Once the request passes its checks, Payra puts the numbers in its vault and keeps only the token and the last four digits. Only on a workspace Payra enabled it for.

ach_authorization
object

Your attestation that the account holder authorized the debit, required with us_bank_account. Payra records it in your words of the ACH authorization (one debit of amount, or a standing authorization with customer), never as the account holder accepting it in Payra.

customer
string<uuid>

With us_bank_account: the customer to save the account on, under a standing authorization (usage: saved). Leave it out for a one-time debit of amount.

amount
integer

With us_bank_account and no customer: the one debit the account holder authorized, in cents. The payment must be for exactly this amount.

currency
enum<string>

With amount. A US bank account is debited in USD.

Available options:
USD,
usd

Response

The customer already had this card saved: its saved payment method, with a next_action when the cardholder's bank authenticates the card before its new details are saved

object
enum<string>
required
Available options:
payment_method
id
string
required
Example:

"pm_test_9kQ2mL7Hs1pXv4cR8tWzAbCdEf"

type
enum<string>
required
Available options:
card,
us_bank_account,
acss_debit
Example:

"card"

usage
enum<string>
required

saved when the session named a customer: the instrument is vaulted and stays on their file. one_time otherwise: chargeable once, before expires_at.

Available options:
one_time,
saved
Example:

"saved"

status
enum<string>
required

active can be charged. consumed: a one-time method already charged. expired: a one-time method past expires_at. detached: removed from the customer's file. requires_action while a card being saved waits on the cardholder's bank (3-D Secure), as next_action says; it then turns active, or failed when nothing was saved (see failure). A method only reads requires_action when its create sent return_url or use_payra_js. A saved method stays active, and chargeable with the details it has, while new details for its card wait on the bank.

Available options:
active,
consumed,
expired,
detached,
requires_action,
failed
Example:

"active"

customer
string<uuid> | null
required
Example:

null

session
string
required

The session the card or account was collected in; for bank details your server sent, the session Payra made for them.

Example:

"pms_test_7Hs2kQ9mL1pXv4cR8tWzAbCd"

card
object | null
required

Set when type is card.

us_bank_account
object | null
required

Set when type is us_bank_account.

Example:

null

acss_debit
object | null
required

Set when type is acss_debit.

Example:

null

billing_details
object
required
next_action
object | null
required

Set while the cardholder's bank wants to authenticate the card before it is saved: on a method that reads requires_action, and on an active saved method your create answered with 200 for a card collected again with a new expiry, name or postal code, which takes those once the step is done and keeps the ones it has if it is not. redirect, when the create sent return_url: send the cardholder to url, a Payra page; they come back to your return_url with ?payment_method=. three_ds_fingerprint and three_ds_challenge, when it sent use_payra_js: Payra Elements runs the step on your page in handleNextAction. Null otherwise.

Example:

null

failure
object | null
required

Set when status is failed: why the card was not saved. card_authentication_failed: the bank did not authenticate the cardholder, or they closed or left its step. card_verification_failed: the processor refused the card after the bank authenticated it. processing_error: anything else. message is Payra's own sentence. Collect the card again with a new session to retry.

Example:

null

livemode
boolean
required
Example:

false

expires_at
string<date-time> | null
required

Set on a one-time method.

Example:

null

created_at
string<date-time>
required
Example:

"2026-09-18T14:00:00.000Z"