Confirm session with a processor token
const url = 'https://api.govifi.com/v1/hosted-sessions/example/confirm';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"processor_token":"example","method":"card","save_method":true,"billing_details":{"cardholder":"example","zip":"example","street":"example","street2":"example","city":"example","state":"example","country":"example","phone":"example","email":"example"},"challenge_response":{"type":"hcaptcha","token":"example","code":"example"},"payment_method":{"card":{"last4":"example","exp_month":1,"exp_year":1,"bin":"example","card_brand":"example"},"ach":{"bank_name":"example","routing_number":"example","account_number_suffix":"example","account_type":"checking"}},"ach_authorization":{"sec_code":"web","accepted_at":"2026-04-15T12:00:00Z"},"duplicate_acknowledged":true}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.govifi.com/v1/hosted-sessions/example/confirm \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "processor_token": "example", "method": "card", "save_method": true, "billing_details": { "cardholder": "example", "zip": "example", "street": "example", "street2": "example", "city": "example", "state": "example", "country": "example", "phone": "example", "email": "example" }, "challenge_response": { "type": "hcaptcha", "token": "example", "code": "example" }, "payment_method": { "card": { "last4": "example", "exp_month": 1, "exp_year": 1, "bin": "example", "card_brand": "example" }, "ach": { "bank_name": "example", "routing_number": "example", "account_number_suffix": "example", "account_type": "checking" } }, "ach_authorization": { "sec_code": "web", "accepted_at": "2026-04-15T12:00:00Z" }, "duplicate_acknowledged": true }'Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”Header Parameters
Section titled “Header Parameters ”Optional client-generated key that makes confirm retries idempotent. A retry carrying the same key returns the original result instead of re-charging. Confirm is single-use on success — a second confirm WITHOUT the matching key returns 409 already_confirmed.
Request Body required
Section titled “Request Body required ”object
Token from Zift/Stripe/etc. tokenization
Save for future use (requires session.setup_future_usage != off)
object
Payer’s solution to the active challenge, supplied on confirm.
object
Captcha response token (hcaptcha/turnstile).
Verification code (sms/email).
Tokenized, non-PCI method metadata the processor needs to charge the processor_token.
Never carries PAN or CVV. Supply card for card payments, ach for bank payments.
object
object
object
ADDITIVE (rfc-ach-authorization.md). The NACHA authorization the payer accepted for an ACH debit, recorded with the captured payment. Sent only for an authorized ACH method.
object
NACHA Standard Entry Class — web (internet), tel (telephone/agent), ppd.
When the payer accepted the authorization affirmation (ISO8601).
Set true to proceed despite a detected duplicate payment (“submit anyway”).
Responses
Section titled “ Responses ”Payment succeeded
object
Incidental processor (Zift) transaction id. Prefer payment_uid as the stable reference for recording/reconciliation.
ADDITIVE (see rfc-payment-uid-confirm.md). Canonical PaymentApi payment id (e.g. “P-…”) for the captured sale — the stable, account-scoped identifier hosts should record and later verify against. Unlike transaction_id it never changes and is unique per account.
Set when save_method=true and setup_future_usage allowed
For hosted flow — signed success_url
HMAC over session_id+transaction_id, host should verify before trusting redirect
Example
{ "status": "succeeded"}Payment declined (decline code in Error.code) or validation error
object
Example
{ "code": "card_declined"}A fraud challenge is required or the response was invalid (challenge_required / challenge_failed), or the session credential is wallet-scoped and may not pay (insufficient_scope).
object
Example
{ "code": "card_declined"}Duplicate payment (resubmit with duplicate_acknowledged=true), OR the session was already confirmed (already_confirmed) — confirm is single-use on success. Retrying with the original Idempotency-Key returns the original result instead of a 409.
object
Example
{ "code": "card_declined"}