Documentation
MCPTool reference

Checkouts tools

Arguments, results, errors, and access, confirmation, and retry policy for each Checkouts tool in FloPay MCP, from the reviewed API contract.

Checkouts tools

Generated from the FloPay MCP contract version 1, revision 764b41d5c7205d6df7eeaeac832fafe882247f5526b1d4d6bc6f98e3eaca7784.

CheckoutAnalytics_get

Checkout performance stats

Returns loads and canonical session-cohort attempt totals, conversion, and money-derived ratios anchored to session creation; transaction tries and approval use attempt-row creation time; headline non-rebill purchase transactions and revenue use financial business time. An automatic upsell is a customer-linked automatic sale preceded at or before its business time, and by strictly less than 24 hours, by a successful standard sale for the same client and resolved customer; each automatic sale is counted once and attributed by its own business time. Refund and chargeback counts and amounts sit beside the gross figures on an issued-period (occurrence) basis: refunds are attributed by their own financial effective date and chargebacks by their own money-movement effective date within the half-open reporting interval, so they can exceed 100% of gross and are never clamped.

PolicyValue
OperationGET /v1/checkouts/stats
Classread-only
Riskmedium
Confirmationnot-required
Retrysafe
Rate-limit tieraggregate
Rolesowner, admin, member
Scopesmcp:read

Arguments

ArgumentInTypeRequiredDescription
fromquerystringYesInclusive reporting-period start as an ISO-8601 instant.
toquerystringYesExclusive reporting-period end as an ISO-8601 instant.

Result

Returns 200 with a JSON body. One coherent checkout performance snapshot.

FieldTypeRequiredDescription
attemptsobjectYes
attempts.approvalRatenumber or nullNoApproved transaction tries divided by transaction tries from the same attempt-outcome period. Minimum: 0.
attempts.revenuePerAttemptnumber or nullNoCanonical session-cohort revenue divided by attempted session-cohort checkouts. Minimum: 0.
attempts.toSalesConversionPercentagenumber or nullNoConversion percentage: session-cohort canonical sales divided by attempted session-cohort checkouts. Minimum: 0.
attempts.totalintegerNoDistinct selected-period session-cohort checkouts with an attempt inside 24 hours. Minimum: 0.
attempts.transactionTriesintegerNoTransaction-attempt outcomes attributed by lifecycle transition time for managed rows and creation time for legacy rows. Minimum: 0.
contextobjectYes
context.appliedFiltersarray of objectYesAdditional filters applied after the authoritative tenant boundary. Empty for merchant calls.
context.appliedFilters[].fieldstringYes
context.appliedFilters[].operatorstringYesAllowed values: eq.
context.appliedFilters[].valuestringYes
context.authoritativeLinksarray of objectYesRelative authenticated Flo API links for verifying authoritative source records.
context.authoritativeLinks[].hrefstringYes
context.authoritativeLinks[].relstringYes
context.consistencyobjectYesThe consistency model and its operator-facing freshness caveat.
context.consistency.modelstringYesAllowed values: eventual.
context.consistency.notestringYes
context.currencyobjectYesReporting-currency basis and immutable daily FX snapshots for home/platform totals. Source amounts remain separately segmented.
context.currency.fxobjectYes
context.currency.fx.appliedbooleanYesWhether this aggregate contains monetary values that were FX-valued.
context.currency.fx.effectiveDateTimezonestringYesAllowed values: UTC.
context.currency.fx.methodstringYesAllowed values: daily-exact-or-prior.
context.currency.fx.provisionalbooleanYes
context.currency.fx.snapshotsarray of objectYes
context.currency.fx.snapshots[].provisionalbooleanYes
context.currency.fx.snapshots[].valuationDatestring (date)Yes
context.currency.fx.snapshots[].versionintegerYesMinimum: 1.
context.currency.homeCurrencystring or nullYesMinimum length: 3. Maximum length: 3.
context.currency.reportingCurrencystringYesMinimum length: 3. Maximum length: 3.
context.currency.reportingCurrencyBasisstringYesAllowed values: client-home, platform-usd.
context.dataAsOfstring (date-time)YesThe persisted-data observation boundary for this response.
context.generatedAtstring (date-time)YesWhen the API generated this response.
context.statusSemanticsarray of objectYesCanonical definitions and time bases for statuses and outcomes used in the response.
context.statusSemantics[].appliesToarray of stringYes
context.statusSemantics[].codestringYes
context.statusSemantics[].descriptionstringYes
context.statusSemantics[].timeBasisstringYesAllowed values: created-at, financial-effective-at, billing-cycle-at, attempt-outcome-at.
context.tenantScopeobjectYesThe explicit client-selection mode used by the authenticated backend query.
context.tenantScope.clientIdstring or nullYes
context.tenantScope.kindstringYesAllowed values: authenticated-client, selected-client, all-clients.
context.timeRangeobjectYesThe explicit half-open UTC reporting window applied to the aggregate.
context.timeRange.boundsstringYesAllowed values: [from,to).
context.timeRange.fromstring (date-time)Yes
context.timeRange.timezonestringYesAllowed values: UTC.
context.timeRange.tostring (date-time)Yes
currencystringYesMinimum length: 3. Maximum length: 3.
finalAtstring (date-time)YesThe unchanged instant 24 hours after the requested period ends when isFinal becomes true.
isFinalbooleanYesTrue after the existing checkout-attribution finality window closes; it does not guarantee that financial totals are frozen against later-arriving settlements.
loadsobjectYes
loads.revenuePerLoadnumber or nullNoCanonical session-cohort revenue divided by checkout sessions created in this period. Minimum: 0.
loads.toSalesConversionPercentagenumber or nullNoConversion percentage: session-cohort canonical sales divided by checkout sessions created in this period. Minimum: 0.
loads.totalintegerNoCheckout sessions attributed to this period by session creation time. Minimum: 0.
periodobjectYes
period.fromstring (date-time)No
period.tostring (date-time)No
revenueobjectYes
revenue.averageOrderValuenumber or nullNoCanonical session-cohort revenue divided by the canonical session-cohort sale count. Minimum: 0.
revenue.chargebacksobjectNoDeprecated compatibility alias for disputes. Same values as revenue.disputes. Removal is tracked separately.
revenue.chargebacks.amountnumberNoFX-valued charged-back amount for this period.
revenue.chargebacks.percentageOfRevenuenumber or nullNoCharged-back amount divided by gross revenue amount from exact unrounded totals, HALF_UP to two places; null when gross revenue is zero and not clamped above 100%.
revenue.disputesobjectNoDisputed amount valued in the same target currency as revenue.total, each Dispute money movement valued at its own effective date. Kept gross and separate from revenue.total. Network warnings are Pre-Dispute Alerts and are not included.
revenue.disputes.amountnumberNoFX-valued disputed amount for this period.
revenue.disputes.percentageOfRevenuenumber or nullNoDisputed amount divided by gross revenue amount from exact unrounded totals, HALF_UP to two places; null when gross revenue is zero and not clamped above 100%.
revenue.refundsobjectNoRefunded amount valued in the same target currency as revenue.total, each refund valued at its own financial effective date. Kept gross and separate from revenue.total.
revenue.refunds.amountnumberNoFX-valued refunded amount for this period.
revenue.refunds.percentageOfRevenuenumber or nullNoRefunded amount divided by gross revenue amount from exact unrounded totals, HALF_UP to two places; null when gross revenue is zero and not clamped above 100%.
revenue.totalnumberNoValued revenue from the period non-rebill transaction-identity sales. Minimum: 0.
revenue.upsellsobjectNoRevenue from qualifying automatic sales valued in the same reporting currency and through the same per-business-day FX path as revenue.total.
revenue.upsells.amountnumberNoFX-valued revenue from qualifying automatic sales.
revenue.upsells.percentageOfRevenuenumber or nullNoExact unrounded upsell revenue divided by exact unrounded gross checkout revenue, HALF_UP to two places; null when gross revenue is zero.
salesobjectYes
sales.changeinteger or nullNo
sales.chargebacksobjectNoDeprecated compatibility alias for disputes. Same values as sales.disputes. Removal is tracked separately.
sales.chargebacks.countintegerNoChargeback events in this period. Minimum: 0.
sales.chargebacks.percentageOfSalesnumber or nullNoChargeback count divided by gross sales count, HALF_UP to two places; null when gross sales count is zero and not clamped above 100%.
sales.comparisonUnavailableReasonstring or nullNoAllowed values: insufficient_history.
sales.directionstring or nullNoAllowed values: up, down, unchanged.
sales.disputesobjectNoDisputes (actual Stripe and PayPal chargebacks) against checkout sales attributed to this period by their own money-movement effective date (issued-period / occurrence basis), independent of when the disputed sale occurred. Disputes against subscription renewal charges are reported on the rebill figures (subscription stats), not here; a dispute against the first charge of a subscription is a checkout sale and stays here. Each dispute money movement is counted once. Network warnings are Pre-Dispute Alerts and are not included.
sales.disputes.countintegerNoDispute events in this period. Minimum: 0.
sales.disputes.percentageOfSalesnumber or nullNoDispute count divided by gross sales count, HALF_UP to two places; null when gross sales count is zero and not clamped above 100%.
sales.previousFromstring (date-time) or nullNoStart of the previous equal-duration financial period when history is covered.
sales.previousSalesinteger or nullNoNon-rebill purchase transactions attributed to the previous period by financial business time. Minimum: 0.
sales.previousTostring (date-time) or nullNoEnd of the previous equal-duration financial period when history is covered.
sales.refundsobjectNoRefunds against checkout sales attributed to this period by their own financial effective date (issued-period / occurrence basis), independent of when the refunded sale occurred. Refunds against subscription renewal charges are reported on the rebill figures (subscription stats), not here; a refund against the first charge of a subscription (including a trial conversion) is a checkout sale and stays here. Each refund is counted once.
sales.refunds.countintegerNoRefund events in this period. Minimum: 0.
sales.refunds.percentageOfSalesnumber or nullNoRefund count divided by gross sales count, HALF_UP to two places; null when gross sales count is zero and not clamped above 100%.
sales.totalintegerNoNon-rebill purchase transactions whose financial business time is in this period. Minimum: 0.
sales.upsellsobjectNoSuccessful automatic checkout sales in this period whose resolved customer completed a standard buyer-present checkout for the same client at or before the automatic sale and strictly less than 24 hours earlier. Each automatic sale is counted once.
sales.upsells.countintegerNoQualifying automatic sales in this period. Minimum: 0.
sales.upsells.percentageOfSalesnumber or nullNoUpsell count divided by gross checkout sales count, HALF_UP to two places; null when gross sales count is zero.
sourceCurrencySegmentsarray of objectYesGross source amounts grouped by uppercase ISO currency. Amounts are summed exactly then rounded once to that source currency minor unit; no counts are repeated here.
sourceCurrencySegments[].currencystringYesMinimum length: 3. Maximum length: 3.
sourceCurrencySegments[].disputeAmountnumberYes
sourceCurrencySegments[].refundAmountnumberYes
sourceCurrencySegments[].salesAmountnumberYes
sourceCurrencySegments[].sessionCohortSalesAmountnumberYes
sourceCurrencySegments[].upsellAmountnumberYes

Errors

StatusDescription
401Client Basic authentication or OAuth2 bearer authentication is required.

Create a reusable checkout link

PolicyValue
OperationPOST /v1/checkout-links
Classmutating
Riskmedium
Confirmationrequired
Retrysame-idempotency-key
Rate-limit tiermutation
Rolesowner, admin
Scopesmcp:write

Arguments

ArgumentInTypeRequiredDescription
avsCheckbodybooleanNoEnable AVS (Address Verification) on checkouts opened from this link. Default: false.
avsFieldsbodyobject or nullNoPer-field AVS exposure. Requires avsCheck to be enabled. Fields the gateway requires for the buyer's country are always collected regardless of this selection.
avsFields.citybodybooleanNoExpose the city field.
avsFields.line1bodybooleanNoExpose the street address line 1 field.
avsFields.line2bodybooleanNoExpose the street address line 2 field.
avsFields.postalbodybooleanNoExpose the postal / ZIP code field.
avsFields.statebodybooleanNoExpose the state / province / region field.
cancelUrlbodystring (uri) or nullNoMaximum length: 2048.
captureMethodbodystringNoAllowed values: automatic, manual. Default: automatic.
checkoutModebodystringNoCheckout mode the hosted link opens in. Only full is currently supported on a reusable link; other modes are rejected because a fresh anonymous buyer lacks their prerequisites. Allowed values: auto, full, confirm, setup. Default: full.
couponCodesbodyarray of stringNoDefault: [].
currencybodystringYesMinimum length: 3. Maximum length: 3.
expiresAtbodystring (date-time) or nullNo
productsbodyarray of objectYesMinimum items: 1.
products[].codebodystringYes
products[].quantitybodynumberYesMinimum: 1.
products[].variantIdbodystring (uuid)No
successUrlbodystring (uri) or nullNoMaximum length: 2048.
surfacebodystringNoHosted-page surface: full_detail renders order summary and merchandising around the embed; widget_only renders just the payment embed. The AVS form lives inside the embed in both surfaces. Allowed values: full_detail, widget_only. Default: full_detail.

Result

Returns 201 with a JSON body.

FieldTypeRequiredDescription
avsCheckbooleanYes
avsFieldsobject or nullYes
avsFields.citybooleanNoExpose the city field.
avsFields.line1booleanNoExpose the street address line 1 field.
avsFields.line2booleanNoExpose the street address line 2 field.
avsFields.postalbooleanNoExpose the postal / ZIP code field.
avsFields.statebooleanNoExpose the state / province / region field.
cancelUrlstring or nullYes
captureMethodstringYesAllowed values: automatic, manual.
checkoutModestringYesAllowed values: auto, full, confirm, setup.
clientIdstringYes
couponCodesarray of stringYes
createdAtstring (date-time)Yes
currencystringYes
expiresAtstring (date-time) or nullYes
isActivebooleanYes
productsarray of objectYes
products[].codestringYes
products[].quantitynumberYesMinimum: 1.
products[].variantIdstring (uuid)No
publicTokenstringYes
successUrlstring or nullYes
surfacestringYesAllowed values: full_detail, widget_only.
updatedAtstring (date-time)Yes
urlstringYes
uuidstringYes

Errors

StatusDescription
400The checkout link options are invalid.
401Client Basic authentication or OAuth2 bearer authentication is required. For Basic, use client.uuid as the username and client.api_key as the password; for bearer, send a valid OAuth2 access token with the required scope.
422The selected catalog offer is unavailable.

Get a reusable checkout link

PolicyValue
OperationGET /v1/checkout-links/{uuid}
Classread-only
Risklow
Confirmationnot-required
Retrysafe
Rate-limit tierread
Rolesowner, admin, member
Scopesmcp:read

Arguments

ArgumentInTypeRequiredDescription
uuidpathstringYes

Result

Returns 200 with a JSON body.

FieldTypeRequiredDescription
avsCheckbooleanYes
avsFieldsobject or nullYes
avsFields.citybooleanNoExpose the city field.
avsFields.line1booleanNoExpose the street address line 1 field.
avsFields.line2booleanNoExpose the street address line 2 field.
avsFields.postalbooleanNoExpose the postal / ZIP code field.
avsFields.statebooleanNoExpose the state / province / region field.
cancelUrlstring or nullYes
captureMethodstringYesAllowed values: automatic, manual.
checkoutModestringYesAllowed values: auto, full, confirm, setup.
clientIdstringYes
couponCodesarray of stringYes
createdAtstring (date-time)Yes
currencystringYes
expiresAtstring (date-time) or nullYes
isActivebooleanYes
productsarray of objectYes
products[].codestringYes
products[].quantitynumberYesMinimum: 1.
products[].variantIdstring (uuid)No
publicTokenstringYes
successUrlstring or nullYes
surfacestringYesAllowed values: full_detail, widget_only.
updatedAtstring (date-time)Yes
urlstringYes
uuidstringYes

Errors

StatusDescription
401Client Basic authentication or OAuth2 bearer authentication is required. For Basic, use client.uuid as the username and client.api_key as the password; for bearer, send a valid OAuth2 access token with the required scope.
404No checkout link with the requested id exists for this client.

List reusable checkout links

PolicyValue
OperationGET /v1/checkout-links
Classread-only
Risklow
Confirmationnot-required
Retrysafe
Rate-limit tierread
Rolesowner, admin, member
Scopesmcp:read

Arguments

ArgumentInTypeRequiredDescription
pagequeryintegerNo1-based page number for paginated list endpoints. Default: 1. Minimum: 1.
limitqueryintegerNoMaximum number of records to return per page. Default: 20. Minimum: 1. Maximum: 100.
sortquerystringNoSort by one allowed field. Use exactly one of sort[asc] or sort[desc]. Allowed fields: id, createdAt, updatedAt, expiresAt, isActive, currency, checkoutMode, captureMethod, surface, avsCheck. Default: createdAt DESC. Allowed values: id, createdAt, updatedAt, expiresAt, isActive, currency, checkoutMode, captureMethod, surface, avsCheck.
relationquerystringNoThis endpoint does not support relation aliases. Supplying relation returns 400.
avsCheckquerystringNoWhether AVS collection is enabled for the link. Equality filter. Pass without operator for exact match. Allowed values: true, false.
cancelUrlquerystringNoBuyer cancellation destination URL. Equality filter. Pass without operator for exact match or pass any of the following operators: [search]. [search] is case-insensitive text contains matching.
captureMethodquerystringNoCheckout capture method. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400. Allowed values: automatic, manual.
checkoutModequerystringNoCheckout mode stored on the link. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400. Allowed values: auto, full, confirm, setup.
couponCodesquerystringNoIndividual coupon codes stored on the link. Pass any of the following operators: [search]. [search] is case-insensitive text contains matching.
createdAtquerystring (date-time)NoCheckout link creation timestamp. Equality filter. Pass without operator for exact match or pass any of the following operators: [gt] [gte] [lt] [lte].
currencyquerystringNoUppercase ISO 4217 checkout currency. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400.
expiresAtquerystring (date-time)NoOptional checkout link expiry timestamp. Equality filter. Pass without operator for exact match or pass any of the following operators: [gt] [gte] [lt] [lte].
idquerystring (uuid)NoCheckout link id. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400.
isActivequerystringNoWhether the link can currently resolve for buyers. Equality filter. Pass without operator for exact match. Allowed values: true, false.
productsquerystringNoProduct code or optional variant id stored on the link. Pass any of the following operators: [search]. [search] is case-insensitive text contains matching.
publicTokenquerystringNoOpaque public checkout-link token. Equality filter. Pass without operator for exact match or pass any of the following operators: [search]. [search] is case-insensitive text contains matching.
successUrlquerystringNoBuyer success destination URL. Equality filter. Pass without operator for exact match or pass any of the following operators: [search]. [search] is case-insensitive text contains matching.
surfacequerystringNoHosted checkout presentation surface. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400. Allowed values: full_detail, widget_only.
updatedAtquerystring (date-time)NoCheckout link update timestamp. Equality filter. Pass without operator for exact match or pass any of the following operators: [gt] [gte] [lt] [lte].

Result

Returns 200 with a JSON body.

FieldTypeRequiredDescription
dataarray of objectYes
data[].avsCheckbooleanYes
data[].avsFieldsobject or nullYes
data[].avsFields.citybooleanNoExpose the city field.
data[].avsFields.line1booleanNoExpose the street address line 1 field.
data[].avsFields.line2booleanNoExpose the street address line 2 field.
data[].avsFields.postalbooleanNoExpose the postal / ZIP code field.
data[].avsFields.statebooleanNoExpose the state / province / region field.
data[].cancelUrlstring or nullYes
data[].captureMethodstringYesAllowed values: automatic, manual.
data[].checkoutModestringYesAllowed values: auto, full, confirm, setup.
data[].clientIdstringYes
data[].couponCodesarray of stringYes
data[].createdAtstring (date-time)Yes
data[].currencystringYes
data[].expiresAtstring (date-time) or nullYes
data[].isActivebooleanYes
data[].productsarray of objectYes
data[].products[].codestringYes
data[].products[].quantitynumberYesMinimum: 1.
data[].products[].variantIdstring (uuid)No
data[].publicTokenstringYes
data[].successUrlstring or nullYes
data[].surfacestringYesAllowed values: full_detail, widget_only.
data[].updatedAtstring (date-time)Yes
data[].urlstringYes
data[].uuidstringYes
limitnumberYes
pagenumberYes
pagesnumberYes
totalnumberYes

Errors

StatusDescription
401Client Basic authentication or OAuth2 bearer authentication is required. For Basic, use client.uuid as the username and client.api_key as the password; for bearer, send a valid OAuth2 access token with the required scope.

getCheckoutDeclineAnalysis

Analyze checkout payment failures

Returns current DECLINE and ERROR transaction-attempt outcomes for the authenticated merchant in an explicit half-open UTC period, grouped by source currency, canonical Flo decline reason, provider, and result. Managed provider objects are selected by lifecycle transition time; legacy append-only attempts use creation time. PENDING and ACTION_REQUIRED continuations and positive SUCCESS/AUTHORIZED outcomes are excluded.

PolicyValue
OperationGET /v1/checkouts/decline-analysis
Classread-only
Riskmedium
Confirmationnot-required
Retrysafe
Rate-limit tieraggregate
Rolesowner, admin, member
Scopesmcp:read

Arguments

ArgumentInTypeRequiredDescription
fromquerystringYesInclusive reporting-period start as an ISO-8601 instant.
toquerystringYesExclusive reporting-period end as an ISO-8601 instant.

Result

Returns 200 with a JSON body. One tenant-scoped current checkout-failure snapshot.

FieldTypeRequiredDescription
affectedCheckoutSessionCountintegerYesDistinct checkout sessions represented by the selected failure attempts. Minimum: 0.
contextobjectYes
context.appliedFiltersarray of objectYesAdditional filters applied after the authoritative tenant boundary. Empty for merchant calls.
context.appliedFilters[].fieldstringYes
context.appliedFilters[].operatorstringYesAllowed values: eq.
context.appliedFilters[].valuestringYes
context.authoritativeLinksarray of objectYesRelative authenticated Flo API links for verifying authoritative source records.
context.authoritativeLinks[].hrefstringYes
context.authoritativeLinks[].relstringYes
context.consistencyobjectYesThe consistency model and its operator-facing freshness caveat.
context.consistency.modelstringYesAllowed values: eventual.
context.consistency.notestringYes
context.currencyobjectYesReporting-currency basis and immutable daily FX snapshots for home/platform totals. Source amounts remain separately segmented.
context.currency.fxobjectYes
context.currency.fx.appliedbooleanYesWhether this aggregate contains monetary values that were FX-valued.
context.currency.fx.effectiveDateTimezonestringYesAllowed values: UTC.
context.currency.fx.methodstringYesAllowed values: daily-exact-or-prior.
context.currency.fx.provisionalbooleanYes
context.currency.fx.snapshotsarray of objectYes
context.currency.fx.snapshots[].provisionalbooleanYes
context.currency.fx.snapshots[].valuationDatestring (date)Yes
context.currency.fx.snapshots[].versionintegerYesMinimum: 1.
context.currency.homeCurrencystring or nullYesMinimum length: 3. Maximum length: 3.
context.currency.reportingCurrencystringYesMinimum length: 3. Maximum length: 3.
context.currency.reportingCurrencyBasisstringYesAllowed values: client-home, platform-usd.
context.dataAsOfstring (date-time)YesThe persisted-data observation boundary for this response.
context.generatedAtstring (date-time)YesWhen the API generated this response.
context.statusSemanticsarray of objectYesCanonical definitions and time bases for statuses and outcomes used in the response.
context.statusSemantics[].appliesToarray of stringYes
context.statusSemantics[].codestringYes
context.statusSemantics[].descriptionstringYes
context.statusSemantics[].timeBasisstringYesAllowed values: created-at, financial-effective-at, billing-cycle-at, attempt-outcome-at.
context.tenantScopeobjectYesThe explicit client-selection mode used by the authenticated backend query.
context.tenantScope.clientIdstring or nullYes
context.tenantScope.kindstringYesAllowed values: authenticated-client, selected-client, all-clients.
context.timeRangeobjectYesThe explicit half-open UTC reporting window applied to the aggregate.
context.timeRange.boundsstringYesAllowed values: [from,to).
context.timeRange.fromstring (date-time)Yes
context.timeRange.timezonestringYesAllowed values: UTC.
context.timeRange.tostring (date-time)Yes
failureAttemptCountintegerYesMinimum: 0.
missingCanonicalReasonAttemptCountintegerYesFailure attempts with no persisted canonical reason. Distinct from the canonical UNKNOWN_DECLINE_REASON bucket. Minimum: 0.
sourceCurrencySegmentsarray of objectYes
sourceCurrencySegments[].affectedCheckoutSessionCountintegerYesMinimum: 1.
sourceCurrencySegments[].currencystring or nullYesMinimum length: 3. Maximum length: 3.
sourceCurrencySegments[].currencyStatusstringYesAllowed values: known, unavailable, mixed.
sourceCurrencySegments[].failureAttemptCountintegerYesMinimum: 1.
sourceCurrencySegments[].groupsarray of objectYes
sourceCurrencySegments[].groups[].affectedCheckoutSessionCountintegerYesMinimum: 1.
sourceCurrencySegments[].groups[].attemptCountintegerYesMinimum: 1.
sourceCurrencySegments[].groups[].canonicalReasonstring or nullYesAllowed values: INSUFFICIENT_FUNDS, DO_NOT_HONOUR, TOO_MANY_ATTEMPTS, PARTIAL_APPROVAL, PAYMENT_GATEWAY_ERROR, TECHNICAL_ERROR, RETRYABLE_DECLINE, UNSUPPORTED_CARD_PURCHASE, USER_ERROR, CVV_INVALID, AVS_FAIL, POSTCODE_INVALID, 3DS_FAIL, EXCEEDS_CARD_LIMIT, CLIENT_ERROR, UNKNOWN_DECLINE_REASON.
sourceCurrencySegments[].groups[].providerstringYesAllowed values: stripe, paypal, worldpay_corporate_gateway.
sourceCurrencySegments[].groups[].resultstringYesAllowed values: DECLINE, ERROR.

Errors

StatusDescription
400The reporting range is missing or invalid.
401Client Basic or OAuth2 bearer authentication is required.
403The bearer token does not grant the required merchant read scope.
429The merchant aggregate rate limit was exceeded.

Session_createSetup

Create Card Setup Session

Creates a no-charge card setup session for an existing customer linked to the authenticated client.

PolicyValue
OperationPOST /v1/checkouts/sessions/setup
Classmutating
Riskmedium
Confirmationrequired
Retrymanual-reconciliation
Rate-limit tiermutation
Rolesowner, admin
Scopesmcp:write

Arguments

ArgumentInTypeRequiredDescription
cancelUrlbodystring or nullNoDefault: null. Maximum length: 2048.
successUrlbodystring or nullNoDefault: null. Maximum length: 2048.
userIdbodystring (uuid)YesFlo customer UUID. The customer must already belong to the authenticated client.

Result

Returns 201 with a JSON body. A checkout session was created and requires client-side follow-up.

FieldTypeRequiredDescription
autoProcessingAttemptedbooleanNo
autoProcessingErrorobjectNo
autoProcessingError.advicestringNoAdvice for next action.
autoProcessingError.fieldsarray of objectNo
autoProcessingError.fields[].fieldstringYes
autoProcessingError.fields[].messagestringYes
autoProcessingError.gatewayErrorCodestringNoGateway-specific error code.
autoProcessingError.messagestringNoMessage to display to user.
autoProcessingError.nextActionRedirectUrlstringNoProvider-hosted next-action URL (e.g. Stripe 3DS challenge page) the SDK must render to obtain client authentication. Set together with type=three_d_secure_required; without it the SDK cannot present the challenge and the attempt times out.
autoProcessingError.orderIdstringNoPayPal Order id (or Subscription id, for subscription checkouts) the SDK should bind its DirectPayPalButton to. Returned alongside type=paypal_direct_required so the buyer can re-approve via PayPal without re-creating the intent on the backend.
autoProcessingError.paymentMethodIdstringNoPayment method identifier when available.
autoProcessingError.threeDSecureTokenstringNo3DS token used for 3DS authentication.
autoProcessingError.transactionIdstringNoTransaction ID if available.
autoProcessingError.typestringYesException type based on action. Allowed values: 3ds_required, paypal_redirect_required, paypal_direct_required, unknown.
autoProcessingPendingobjectNo
autoProcessingPending.retryAfterMsnumberYes
autoProcessingPending.sessionIdstringYes
autoProcessingPending.sessionUrlstringYes
autoProcessingPending.statusUrlstringYes
autoProcessingPending.typestringYes
dataobjectYes
data.accountDataobjectYes
data.accountData.addressLine1string or nullYesDefault: null.
data.accountData.addressLine2string or nullYesDefault: null.
data.accountData.citystring or nullYesDefault: null.
data.accountData.countrystring or nullYesDefault: null.
data.accountData.emailstring or nullYes
data.accountData.firstNamestringYes
data.accountData.genderstring or nullYesDefault: null.
data.accountData.lastNamestringYes
data.accountData.statestring or nullYesDefault: null.
data.accountData.userIdstring or nullYes
data.accountData.zipstring or nullYesDefault: null.
data.authorizationExpiresAtstring (date-time) or nullYes
data.authorizationVoidReasonstring or nullYesAllowed values: merchant_requested, expired, provider_canceled.
data.avsCheckbooleanYesWhether AVS was enabled for this session.
data.buyerIdentifiedbooleanYesFalse when the session has no buyer email yet (an anonymous / Flo-hosted checkout). Lets a reader distinguish "email not collected yet" from an empty email: attach one by re-entering the claim endpoint with a buyer block. Always true for every session created with a buyer.
data.cancelUrlstring or nullYes
data.captureMethodstringYesWhether the checkout captures immediately or reserves funds for merchant capture. Allowed values: automatic, manual.
data.checkoutLayoutstring or nullYesdefault_layout, buttons_layout, or custom_layout.
data.checkoutMetadataobjectNoImmutable non-sensitive client context supplied when the checkout session was created.
data.checkoutModestringYesAllowed values: auto, full, confirm, setup.
data.checkoutTypestring or nullYesstandard_checkout or embedded_checkout.
data.clientIdstring or nullYesUUID of the Flopay client account that owns this checkout session. Returned so SDKs and the demo portal can keep multi-account sessions in sync with the right client.
data.couponsarray of stringYes
data.createdAtstring (date-time)Yes
data.dataAttachmentDeferredbooleanYesTrue only for an opt-in lightweight session that still requires buyer and catalog data through the claim endpoint.
data.discountAmountnumberYesTotal reduction in major units of the session currency: includes both sale savings and coupon reductions (subtotalAmount - totalAmount).
data.gatewaysobjectYes
data.gateways.paypalobject or nullYes
data.gateways.paypal.enabledPaymentMethodCountriesobjectYesPer-method buyer-country gate; methods omitted here are country-agnostic.
data.gateways.paypal.enabledPaymentMethodsarray of stringYesStripe payment method types enabled on the routed gateway account, filtered against the session's mode and with card excluded.
data.gateways.paypal.environmentstringYesAllowed values: stage, production.
data.gateways.paypal.providerObjectTypestringNoAllowed values: order, setup_token.
data.gateways.paypal.publishableKeystring or nullYes
data.gateways.stripeobject or nullYes
data.gateways.stripe.enabledPaymentMethodCountriesobjectYesPer-method buyer-country gate; methods omitted here are country-agnostic.
data.gateways.stripe.enabledPaymentMethodsarray of stringYesStripe payment method types enabled on the routed gateway account, filtered against the session's mode and with card excluded.
data.gateways.stripe.environmentstringYesAllowed values: stage, production.
data.gateways.stripe.providerObjectTypestringNoAllowed values: order, setup_token.
data.gateways.stripe.publishableKeystring or nullYes
data.gateways.worldpayCorporateGatewayobjectNo
data.gateways.worldpayCorporateGateway.enabledPaymentMethodCountriesobjectYesPer-method buyer-country gate; methods omitted here are country-agnostic.
data.gateways.worldpayCorporateGateway.enabledPaymentMethodsarray of stringYesStripe payment method types enabled on the routed gateway account, filtered against the session's mode and with card excluded.
data.gateways.worldpayCorporateGateway.environmentstringYesAllowed values: stage, production.
data.gateways.worldpayCorporateGateway.providerObjectTypestringNoAllowed values: order, setup_token.
data.gateways.worldpayCorporateGateway.publishableKeystring or nullYes
data.itemsarray of objectYesDeprecated. Use products[] filtered by type === "item". Removal tracked separately.
data.items[].checkoutSessionIdstringYes
data.items[].currencystringYes
data.items[].metadataobject or nullYes
data.items[].providerItemDescriptionstring or nullNo
data.items[].providerItemIdstringYes
data.items[].providerItemNamestringYes
data.items[].quantitynumberYes
data.items[].totalAmountnumberYes
data.items[].uuidstringYes
data.noncestringYes
data.productsarray of objectYes
data.products[].checkoutSessionIdstringYes
data.products[].codestringYes
data.products[].currencystringYes
data.products[].descriptionstring or nullNo
data.products[].metadataobject or nullYes
data.products[].namestringYes
data.products[].originalAmountnumber or nullNoThe original (non-sale) price in major units. Present only when a sale is active, allowing the client to display strikethrough pricing.
data.products[].overrideAmountnumber or nullNoSet to 0 when the resolved subscription product has a non-zero recurring trial period. Absent when the catalog was not resolved.
data.products[].productIdstring or nullNoStable Flopay catalog product UUID.
data.products[].productPriceIdstring or nullNoStable Flopay catalog price UUID.
data.products[].quantitynumberYes
data.products[].rebillAmountnumber or nullNoGo-forward renewal price in major units for a subscription product. When a sale is active and rebillAtSaleAmount is false this is the full (non-sale) amount; when rebillAtSaleAmount is true it stays the sale price. Absent for non-subscription products.
data.products[].rebillAtSaleAmountboolean or nullNoWhether an active sale price is retained for the lifetime of the subscription (true) or applies to the first charge only (false). Absent for non-subscription products.
data.products[].saleAmountnumber or nullNoActive sale price in major units. Present only when the product has a sale running within its valid date range.
data.products[].saleEndsAtstring (date-time) or nullNoEnd of the sale window (inclusive). Null when the sale has no end constraint.
data.products[].saleStartsAtstring (date-time) or nullNoStart of the sale window (inclusive). Null when the sale has no start constraint.
data.products[].totalAmountnumberYes
data.products[].typestringYesAllowed values: subscription, item.
data.products[].uuidstringYes
data.products[].variantIdstring or nullNoSelected Flopay catalog variant UUID.
data.statusstringYesAllowed values: pending, authorized, completed, voided.
data.subscriptionsarray of objectYesDeprecated. Use products[] filtered by type === "subscription". Removal tracked separately.
data.subscriptions[].checkoutSessionIdstringYes
data.subscriptions[].currencystringYes
data.subscriptions[].metadataobject or nullYes
data.subscriptions[].overrideAmountnumber or nullNoSet to 0 when the resolved product has a non-zero recurring trial period. Absent on responses where the catalog was not resolved.
data.subscriptions[].providerPlanDescriptionstring or nullYes
data.subscriptions[].providerPlanIdstringYes
data.subscriptions[].providerPlanNamestring or nullYes
data.subscriptions[].quantitynumberYes
data.subscriptions[].totalAmountnumberYes
data.subscriptions[].uuidstringYes
data.subtotalAmountnumberYesCart subtotal in major units using original (non-sale) catalog prices. When no sale is active this equals the sum of product prices before coupon reductions.
data.successUrlstring or nullYes
data.tagsDataobjectYes
data.tagsData.googleContainerIdstring or nullYes
data.tagsData.sessionIdstring or nullYes
data.tagsData.testEventCodestring or nullYes
data.totalAmountnumberYesFinal cart total in major units (subtotalAmount - discountAmount), clamped at zero.
data.transactionAttemptsarray of objectYes
data.transactionAttempts[].checkoutSessionsUuidstringYes
data.transactionAttempts[].createdAtstring (date-time)Yes
data.transactionAttempts[].declineReasonstring or nullYesAllowed values: INSUFFICIENT_FUNDS, DO_NOT_HONOUR, TOO_MANY_ATTEMPTS, PARTIAL_APPROVAL, PAYMENT_GATEWAY_ERROR, TECHNICAL_ERROR, RETRYABLE_DECLINE, UNSUPPORTED_CARD_PURCHASE, USER_ERROR, CVV_INVALID, AVS_FAIL, POSTCODE_INVALID, 3DS_FAIL, EXCEEDS_CARD_LIMIT, CLIENT_ERROR, UNKNOWN_DECLINE_REASON.
data.transactionAttempts[].gatewaystringYesAllowed values: stripe, paypal, worldpay_corporate_gateway.
data.transactionAttempts[].nextActionRedirectUrlstring or nullYesProvider-hosted next-action URL (e.g. Stripe 3DS challenge page). Populated together with result=ACTION_REQUIRED; the SDK loads this URL in an iframe / popup to let the buyer complete the challenge.
data.transactionAttempts[].providerIntentIdstring or nullYesProvider PaymentIntent id (e.g. Stripe pi_*) the attempt is bound to. Surfaced so the SDK can correlate a 3DS challenge to its originating intent and so /3ds/complete has the id without re-parsing the client secret.
data.transactionAttempts[].resultstringYesAllowed values: PENDING, AUTHORIZED, SUCCESS, DECLINE, ERROR, ACTION_REQUIRED.
data.transactionAttempts[].uuidstringYes
data.uuidstringYes
vaultobjectNoEmbedded vault capture credentials for a pending card-capable session, independent of the reported SDK version. The explicit POST /v1/checkouts/sessions/{id}/vault/capture endpoint remains available for idempotent recovery and retry.
vault.expectedOriginstringNoExact hosted-form origin the SDK targets and accepts for vault postMessages.
vault.htmlstringNoPCIVault hosted-form HTML the SDK injects into the buyer flow. Already wrapped in the Flo bundle (event listeners, postMessage handshake).
vault.messageTokenstringNoPer-session token authenticating messages exchanged with the hosted vault form.
vault.secretstringNoPCIVault submit secret used in the form POST.
vault.urlstringNoPCIVault submit URL the hosted form POSTs to.

Errors

StatusDescription
400The request body, session id, or resolved product provider credentials were invalid.
401Client Basic authentication or OAuth2 bearer authentication is required. For Basic, use client.uuid as the username and client.api_key as the password; for bearer, send a valid OAuth2 access token with the required scope.
404The requested customer is unknown or is not linked to the authenticated client, or no active card gateway is available.
424Throws in cases where Billing service cannot get data from billing provider.

Session_exportSessions

Export checkout-sessions

Exports the resource-owned list as a point-in-time framed stream. Reuses this endpoint's list query filters and sort. current_page preserves page/limit; all_matching ignores page/limit while preserving filters and sort. Client routes require an OAuth client_user owner/admin token; admin routes require a single valid clientId selector; partner routes require an authenticated partner seat and are scoped to that partner. Ordinary members, client Basic auth, and cross-tenant requests are rejected.

PolicyValue
OperationPOST /v1/checkouts/sessions/exports
Classread-only
Riskmedium
Confirmationnot-required
Retrysafe
Rate-limit tieraggregate
Rolesowner, admin
Scopesmcp:read

Arguments

ArgumentInTypeRequiredDescription
pagequeryintegerNo1-based page number for paginated list endpoints. Default: 1. Minimum: 1.
limitqueryintegerNoMaximum number of records to return per page. Default: 20. Minimum: 1. Maximum: 100.
sortquerystringNoSort by one allowed field. Use exactly one of sort[asc] or sort[desc]. Allowed fields: createdAt, status, updatedAt, products.id, products.productId, products.code, products.name, products.description, products.type, products.currency, products.totalAmount, products.quantity, products.createdAt, products.updatedAt, transactionAttempts.id, transactionAttempts.gateway, transactionAttempts.result, transactionAttempts.declineReason, transactionAttempts.gatewayPaymentIntentId, transactionAttempts.createdAt, user.id, user.email, user.firstName, user.lastName, user.createdAt, user.updatedAt, utmMetadata.id, utmMetadata.utmMedium, utmMetadata.utmCampaign, utmMetadata.utmSource, utmMetadata.utmTerm, utmMetadata.funnelDomain, utmMetadata.funnelUrl, utmMetadata.sourceOriginKey, utmMetadata.splitTestVariable, utmMetadata.funnelVersion, utmMetadata.createdAt, utmMetadata.updatedAt. Default: createdAt DESC. Allowed values: createdAt, status, updatedAt, products.id, products.productId, products.code, products.name, products.description, products.type, products.currency, products.totalAmount, products.quantity, products.createdAt, products.updatedAt, transactionAttempts.id, transactionAttempts.gateway, transactionAttempts.result, transactionAttempts.declineReason, transactionAttempts.gatewayPaymentIntentId, transactionAttempts.createdAt, user.id, user.email, user.firstName, user.lastName, user.createdAt, user.updatedAt, utmMetadata.id, utmMetadata.utmMedium, utmMetadata.utmCampaign, utmMetadata.utmSource, utmMetadata.utmTerm, utmMetadata.funnelDomain, utmMetadata.funnelUrl, utmMetadata.sourceOriginKey, utmMetadata.splitTestVariable, utmMetadata.funnelVersion, utmMetadata.createdAt, utmMetadata.updatedAt.
relationquerystringNoComma-separated relation aliases to include. Allowed aliases: client, products, transactionAttempts, user, utmMetadata. Unknown aliases return 400.
checkoutModequerystringNoCheckout mode. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400. Allowed values: auto, full, confirm, setup.
createdAtquerystring (date-time)NoSession creation timestamp. Equality filter. Pass without operator for exact match or pass any of the following operators: [gt] [gte] [lt] [lte].
gatewayquerystringNoBilling provider recorded on the session. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400. Allowed values: stripe, paypal, worldpay_corporate_gateway.
idquerystringNoAlias for uuid: matches the Flopay checkout-session UUID. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400.
statusquerystringNoSession status. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400. Allowed values: pending, authorized, completed, voided.
updatedAtquerystring (date-time)NoSession update timestamp. Equality filter. Pass without operator for exact match or pass any of the following operators: [gt] [gte] [lt] [lte].
userEmailquerystringNoEmail recorded on the session. Equality filter. Pass without operator for exact match or pass any of the following operators: [search]. [search] is case-insensitive text contains matching.
userIdquerystringNoClient-managed user identifier recorded on the session. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400.
userUuidquerystringNoLinked Flopay user UUID. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400.
uuidquerystringNoFlopay checkout-session UUID. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400.
fieldsbodyarray of stringNoStable export field keys in output order.
formatbodystringYesAllowed values: csv, json.
scopebodystringYesAllowed values: current_page, all_matching.

Result

Returns 200 as application/vnd.flopay.export-stream.v1. Versioned length-prefixed export stream containing started/progress/completed_file/file_chunk/complete frames.

Errors

StatusDescription
400Invalid scope, format, field key, query parameter, client selector, row cap, or plaintext byte cap.
401Authentication is missing or invalid.
403The actor is not allowed to export this resource.
424Throws in cases where Billing service cannot get data from billing provider.
429Export capacity exhausted. Retry-After is set to 60 seconds.
503Exports disabled or export storage unavailable.

Session_list

List Checkout Sessions

Returns paginated checkout sessions for the authenticated client. Supports page, limit, sort[asc|desc], whitelisted filters (id, status, gateway, checkoutMode, userId, userUuid, userEmail, createdAt, updatedAt), and the relation aliases products, transactionAttempts, user, client, and utmMetadata.

PolicyValue
OperationGET /v1/checkouts/sessions
Classread-only
Risklow
Confirmationnot-required
Retrysafe
Rate-limit tierread
Rolesowner, admin, member
Scopesmcp:read

Arguments

ArgumentInTypeRequiredDescription
pagequeryintegerNo1-based page number for paginated list endpoints. Default: 1. Minimum: 1.
limitqueryintegerNoMaximum number of records to return per page. Default: 20. Minimum: 1. Maximum: 100.
sortquerystringNoSort by one allowed field. Use exactly one of sort[asc] or sort[desc]. Allowed fields: createdAt, status, updatedAt, products.id, products.productId, products.code, products.name, products.description, products.type, products.currency, products.totalAmount, products.quantity, products.createdAt, products.updatedAt, transactionAttempts.id, transactionAttempts.gateway, transactionAttempts.result, transactionAttempts.declineReason, transactionAttempts.gatewayPaymentIntentId, transactionAttempts.createdAt, user.id, user.email, user.firstName, user.lastName, user.createdAt, user.updatedAt, utmMetadata.id, utmMetadata.utmMedium, utmMetadata.utmCampaign, utmMetadata.utmSource, utmMetadata.utmTerm, utmMetadata.funnelDomain, utmMetadata.funnelUrl, utmMetadata.sourceOriginKey, utmMetadata.splitTestVariable, utmMetadata.funnelVersion, utmMetadata.createdAt, utmMetadata.updatedAt. Default: createdAt DESC. Allowed values: createdAt, status, updatedAt, products.id, products.productId, products.code, products.name, products.description, products.type, products.currency, products.totalAmount, products.quantity, products.createdAt, products.updatedAt, transactionAttempts.id, transactionAttempts.gateway, transactionAttempts.result, transactionAttempts.declineReason, transactionAttempts.gatewayPaymentIntentId, transactionAttempts.createdAt, user.id, user.email, user.firstName, user.lastName, user.createdAt, user.updatedAt, utmMetadata.id, utmMetadata.utmMedium, utmMetadata.utmCampaign, utmMetadata.utmSource, utmMetadata.utmTerm, utmMetadata.funnelDomain, utmMetadata.funnelUrl, utmMetadata.sourceOriginKey, utmMetadata.splitTestVariable, utmMetadata.funnelVersion, utmMetadata.createdAt, utmMetadata.updatedAt.
relationquerystringNoComma-separated relation aliases to include. Allowed aliases: client, products, transactionAttempts, user, utmMetadata. Unknown aliases return 400.
checkoutModequerystringNoCheckout mode. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400. Allowed values: auto, full, confirm, setup.
createdAtquerystring (date-time)NoSession creation timestamp. Equality filter. Pass without operator for exact match or pass any of the following operators: [gt] [gte] [lt] [lte].
gatewayquerystringNoBilling provider recorded on the session. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400. Allowed values: stripe, paypal, worldpay_corporate_gateway.
idquerystringNoAlias for uuid: matches the Flopay checkout-session UUID. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400.
statusquerystringNoSession status. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400. Allowed values: pending, authorized, completed, voided.
updatedAtquerystring (date-time)NoSession update timestamp. Equality filter. Pass without operator for exact match or pass any of the following operators: [gt] [gte] [lt] [lte].
userEmailquerystringNoEmail recorded on the session. Equality filter. Pass without operator for exact match or pass any of the following operators: [search]. [search] is case-insensitive text contains matching.
userIdquerystringNoClient-managed user identifier recorded on the session. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400.
userUuidquerystringNoLinked Flopay user UUID. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400.
uuidquerystringNoFlopay checkout-session UUID. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400.

Result

Returns 200 with a JSON body.

FieldTypeRequiredDescription
dataarray of objectYes
data[].authorizationExpiresAtstring (date-time) or nullNo
data[].authorizationVoidReasonstring or nullNoAllowed values: merchant_requested, expired, provider_canceled.
data[].cancelUrlstring or nullNo
data[].captureMethodstringYesAllowed values: automatic, manual.
data[].checkoutMetadataobjectNoImmutable non-sensitive client context supplied when the checkout session was created.
data[].checkoutModestringYesAllowed values: auto, full, confirm, setup.
data[].checkoutUrlstringYes
data[].clientobject or nullNoOwning client. Present only when requested with relation=client.
data[].client.createdAtstring (date-time)Yes
data[].client.idstringYes
data[].client.slugstringYes
data[].client.updatedAtstring (date-time)Yes
data[].clientIdstring or nullNoOwning client UUID.
data[].couponsarray of stringYesCoupon codes applied to the session.
data[].createdAtstring (date-time)Yes
data[].gatewaystring or nullNoAllowed values: stripe, paypal, worldpay_corporate_gateway.
data[].gatewayIdstring or nullNoGateway configuration UUID.
data[].idstringYes
data[].productsarray of objectNoLine items. Present only when requested with relation=products.
data[].products[].codestringYes
data[].products[].createdAtstring (date-time)Yes
data[].products[].currencystringYes
data[].products[].descriptionstring or nullNo
data[].products[].idstringYes
data[].products[].metadataobject or nullNo
data[].products[].namestringYes
data[].products[].productIdstring or nullNoLinked Flopay product UUID.
data[].products[].productPriceIdstring or nullNoStable Flopay catalog price UUID.
data[].products[].quantitynumberYes
data[].products[].totalAmountnumberYes
data[].products[].typestringYesAllowed values: subscription, item.
data[].products[].updatedAtstring (date-time)Yes
data[].products[].variantIdstring or nullNoSelected Flopay catalog variant UUID.
data[].statusstringYesAllowed values: pending, authorized, completed, voided.
data[].successUrlstring or nullNo
data[].transactionAttemptsarray of objectNoPayment attempts. Present only when requested with relation=transactionAttempts.
data[].transactionAttempts[].checkoutSessionsUuidstringYesOwning checkout-session UUID.
data[].transactionAttempts[].createdAtstring (date-time)Yes
data[].transactionAttempts[].declineReasonstring or nullNoAllowed values: INSUFFICIENT_FUNDS, DO_NOT_HONOUR, TOO_MANY_ATTEMPTS, PARTIAL_APPROVAL, PAYMENT_GATEWAY_ERROR, TECHNICAL_ERROR, RETRYABLE_DECLINE, UNSUPPORTED_CARD_PURCHASE, USER_ERROR, CVV_INVALID, AVS_FAIL, POSTCODE_INVALID, 3DS_FAIL, EXCEEDS_CARD_LIMIT, CLIENT_ERROR, UNKNOWN_DECLINE_REASON.
data[].transactionAttempts[].gatewaystringYesAllowed values: stripe, paypal, worldpay_corporate_gateway.
data[].transactionAttempts[].gatewayAccountobject or nullNoGateway account (non-secret fields) this attempt ran on. Present only when requested.
data[].transactionAttempts[].gatewayAccount.codestringYesGateway account identifier (e.g. the Stripe connected account acct_…).
data[].transactionAttempts[].gatewayAccount.currencystringYes3-letter ISO default currency code (e.g. "USD") used by this gateway account.
data[].transactionAttempts[].gatewayAccount.environmentstringYesAllowed values: stage, production.
data[].transactionAttempts[].gatewayAccount.idstringYesGateway UUID.
data[].transactionAttempts[].gatewayAccount.namestringYesHuman-readable name of the gateway account.
data[].transactionAttempts[].gatewayAccount.providerTypestringYesAllowed values: stripe, paypal, worldpay_corporate_gateway.
data[].transactionAttempts[].gatewayAccount.publishableKeystringNoPublic API key used by frontend clients to identify the gateway account. Not a secret.
data[].transactionAttempts[].gatewayDeclineReasonstring or nullNoRaw provider decline reason.
data[].transactionAttempts[].gatewayPaymentIntentIdstring or nullNoOpaque provider payment-object id for this attempt, such as a Stripe PaymentIntent or PayPal Order/subscription id. The legacy field name is preserved for compatibility.
data[].transactionAttempts[].idstringYes
data[].transactionAttempts[].nextActionRedirectUrlstring or nullNoIssuer/3DS redirect URL surfaced when an attempt is in ACTION_REQUIRED state. The SDK renders this in a host-level iframe overlay; the outcome is resolved server-side when the challenge redirects to the Stripe return_url (GET /v1/vault/3ds/return), with POST /v1/checkouts/sessions/{id}/3ds/complete available as a sync probe.
data[].transactionAttempts[].paymentMethodobject or nullNoStored payment method (non-secret display fields) this attempt charged. An attempt charges exactly one method. Present only when the userPaymentMethod relation is requested.
data[].transactionAttempts[].paymentMethod.brandstring or nullNoCard brand as reported by the gateway (free-text, e.g. "visa"). Null for non-card types.
data[].transactionAttempts[].paymentMethod.createdAtstring (date-time)YesWhen the payment method row was created.
data[].transactionAttempts[].paymentMethod.expiryMonthnumber or nullNoCard expiry month (1-12). Null for non-card types.
data[].transactionAttempts[].paymentMethod.expiryYearnumber or nullNoCard expiry year (four digits). Null for non-card types.
data[].transactionAttempts[].paymentMethod.gatewayobject or nullNoOwning gateway (non-secret fields). Present when the gateway relation is loaded.
data[].transactionAttempts[].paymentMethod.gateway.codestringYesGateway account identifier (e.g. the Stripe connected account acct_…).
data[].transactionAttempts[].paymentMethod.gateway.currencystringYes3-letter ISO default currency code (e.g. "USD") used by this gateway account.
data[].transactionAttempts[].paymentMethod.gateway.environmentstringYesAllowed values: stage, production.
data[].transactionAttempts[].paymentMethod.gateway.idstringYesGateway UUID.
data[].transactionAttempts[].paymentMethod.gateway.namestringYesHuman-readable name of the gateway account.
data[].transactionAttempts[].paymentMethod.gateway.providerTypestringYesAllowed values: stripe, paypal, worldpay_corporate_gateway.
data[].transactionAttempts[].paymentMethod.gateway.publishableKeystringNoPublic API key used by frontend clients to identify the gateway account. Not a secret.
data[].transactionAttempts[].paymentMethod.idstringYesFlopay payment method UUID.
data[].transactionAttempts[].paymentMethod.lastFourstring or nullNoLast four digits of the card. Null for non-card types.
data[].transactionAttempts[].paymentMethod.payerEmailstring or nullNoPayer email for wallet types (PayPal). Null for cards.
data[].transactionAttempts[].paymentMethod.statusstringYesPayment method lifecycle status. Allowed values: pending, active, deleted.
data[].transactionAttempts[].paymentMethod.typestringYesStored payment method type. Allowed values: card, paypal.
data[].transactionAttempts[].providerPaymentMethodIdstring or nullNoProvider PaymentMethod id (e.g. Stripe pm_xxx) associated with this attempt. Set on vault-driven attempts once the bridge has minted a provider PM from the vault token; absent on legacy attempts.
data[].transactionAttempts[].resultstringYesAllowed values: PENDING, AUTHORIZED, SUCCESS, DECLINE, ERROR, ACTION_REQUIRED.
data[].updatedAtstring (date-time)Yes
data[].userobject or nullNoLinked Flopay user. Present only when requested with relation=user.
data[].user.clientUserIdstring or nullNo
data[].user.createdAtstring (date-time)Yes
data[].user.emailstringYes
data[].user.firstNamestringYes
data[].user.idstringYes
data[].user.lastNamestringYes
data[].user.updatedAtstring (date-time)Yes
data[].userAddressCitystring or nullYesBuyer city recorded on the checkout session.
data[].userAddressCountrystring or nullYesBuyer country as an ISO 3166-1 alpha-2 code.
data[].userAddressStatestring or nullYesBuyer state or region recorded on the checkout session.
data[].userEmailstringYes
data[].userFirstNamestringYes
data[].userIdstringYesClient-managed user identifier recorded on the session.
data[].userLastNamestringYes
data[].userUuidstring or nullNoLinked Flopay user UUID.
data[].utmMetadataarray of objectNoAnalytics attribution. Present only when requested with relation=utmMetadata.
data[].utmMetadata[].createdAtstring (date-time)Yes
data[].utmMetadata[].funnelDomainstring or nullNo
data[].utmMetadata[].funnelUrlstring or nullNo
data[].utmMetadata[].funnelVersionstring or nullNo
data[].utmMetadata[].idstringYes
data[].utmMetadata[].sourceOriginKeystring or nullNo
data[].utmMetadata[].splitTestVariablestring or nullNo
data[].utmMetadata[].updatedAtstring (date-time)Yes
data[].utmMetadata[].utmCampaignstring or nullNo
data[].utmMetadata[].utmMediumstring or nullNo
data[].utmMetadata[].utmSourcestring or nullNo
data[].utmMetadata[].utmTermstring or nullNo
limitnumberYes
pagenumberYes
pagesnumberYes
totalnumberYes

Errors

StatusDescription
400The request body, session id, or resolved product provider credentials were invalid.
401Client Basic authentication or OAuth2 bearer authentication is required. For Basic, use client.uuid as the username and client.api_key as the password; for bearer, send a valid OAuth2 access token with the required scope.
424Throws in cases where Billing service cannot get data from billing provider.

TransactionAttempts_findOne

Get Transaction Attempt

Returns a single transaction attempt by UUID, scoped to the authenticated client.

PolicyValue
OperationGET /v1/checkouts/transaction-attempts/{id}
Classread-only
Risklow
Confirmationnot-required
Retrysafe
Rate-limit tierread
Rolesowner, admin, member
Scopesmcp:read

Arguments

ArgumentInTypeRequiredDescription
idpathstringYes

Result

Returns 200 with a JSON body.

FieldTypeRequiredDescription
checkoutSessionsUuidstringYesOwning checkout-session UUID.
createdAtstring (date-time)Yes
declineReasonstring or nullNoAllowed values: INSUFFICIENT_FUNDS, DO_NOT_HONOUR, TOO_MANY_ATTEMPTS, PARTIAL_APPROVAL, PAYMENT_GATEWAY_ERROR, TECHNICAL_ERROR, RETRYABLE_DECLINE, UNSUPPORTED_CARD_PURCHASE, USER_ERROR, CVV_INVALID, AVS_FAIL, POSTCODE_INVALID, 3DS_FAIL, EXCEEDS_CARD_LIMIT, CLIENT_ERROR, UNKNOWN_DECLINE_REASON.
gatewaystringYesAllowed values: stripe, paypal, worldpay_corporate_gateway.
gatewayAccountobject or nullNoGateway account (non-secret fields) this attempt ran on. Present only when requested.
gatewayAccount.codestringYesGateway account identifier (e.g. the Stripe connected account acct_…).
gatewayAccount.currencystringYes3-letter ISO default currency code (e.g. "USD") used by this gateway account.
gatewayAccount.environmentstringYesAllowed values: stage, production.
gatewayAccount.idstringYesGateway UUID.
gatewayAccount.namestringYesHuman-readable name of the gateway account.
gatewayAccount.providerTypestringYesAllowed values: stripe, paypal, worldpay_corporate_gateway.
gatewayAccount.publishableKeystringNoPublic API key used by frontend clients to identify the gateway account. Not a secret.
gatewayDeclineReasonstring or nullNoRaw provider decline reason.
gatewayPaymentIntentIdstring or nullNoOpaque provider payment-object id for this attempt, such as a Stripe PaymentIntent or PayPal Order/subscription id. The legacy field name is preserved for compatibility.
idstringYes
nextActionRedirectUrlstring or nullNoIssuer/3DS redirect URL surfaced when an attempt is in ACTION_REQUIRED state. The SDK renders this in a host-level iframe overlay; the outcome is resolved server-side when the challenge redirects to the Stripe return_url (GET /v1/vault/3ds/return), with POST /v1/checkouts/sessions/{id}/3ds/complete available as a sync probe.
paymentMethodobject or nullNoStored payment method (non-secret display fields) this attempt charged. An attempt charges exactly one method. Present only when the userPaymentMethod relation is requested.
paymentMethod.brandstring or nullNoCard brand as reported by the gateway (free-text, e.g. "visa"). Null for non-card types.
paymentMethod.createdAtstring (date-time)YesWhen the payment method row was created.
paymentMethod.expiryMonthnumber or nullNoCard expiry month (1-12). Null for non-card types.
paymentMethod.expiryYearnumber or nullNoCard expiry year (four digits). Null for non-card types.
paymentMethod.gatewayobject or nullNoOwning gateway (non-secret fields). Present when the gateway relation is loaded.
paymentMethod.gateway.codestringYesGateway account identifier (e.g. the Stripe connected account acct_…).
paymentMethod.gateway.currencystringYes3-letter ISO default currency code (e.g. "USD") used by this gateway account.
paymentMethod.gateway.environmentstringYesAllowed values: stage, production.
paymentMethod.gateway.idstringYesGateway UUID.
paymentMethod.gateway.namestringYesHuman-readable name of the gateway account.
paymentMethod.gateway.providerTypestringYesAllowed values: stripe, paypal, worldpay_corporate_gateway.
paymentMethod.gateway.publishableKeystringNoPublic API key used by frontend clients to identify the gateway account. Not a secret.
paymentMethod.idstringYesFlopay payment method UUID.
paymentMethod.lastFourstring or nullNoLast four digits of the card. Null for non-card types.
paymentMethod.payerEmailstring or nullNoPayer email for wallet types (PayPal). Null for cards.
paymentMethod.statusstringYesPayment method lifecycle status. Allowed values: pending, active, deleted.
paymentMethod.typestringYesStored payment method type. Allowed values: card, paypal.
providerPaymentMethodIdstring or nullNoProvider PaymentMethod id (e.g. Stripe pm_xxx) associated with this attempt. Set on vault-driven attempts once the bridge has minted a provider PM from the vault token; absent on legacy attempts.
resultstringYesAllowed values: PENDING, AUTHORIZED, SUCCESS, DECLINE, ERROR, ACTION_REQUIRED.

Errors

StatusDescription
400The path, relation, filter, sort, or pagination input is invalid.
401Client Basic authentication or OAuth2 bearer authentication is required. For Basic, use client.uuid as the username and client.api_key as the password; for bearer, send a valid OAuth2 access token with the required scope.
403The bearer token does not grant the required merchant read scope.
404No transaction attempt with this id exists for the authenticated client.

TransactionAttempts_list

List Transaction Attempts

Returns paginated transaction attempts for the authenticated client. Supports page, limit, sort[asc|desc], whitelisted filters, and the relation aliases checkoutSession and gatewayAccount.

PolicyValue
OperationGET /v1/checkouts/transaction-attempts
Classread-only
Risklow
Confirmationnot-required
Retrysafe
Rate-limit tierread
Rolesowner, admin, member
Scopesmcp:read

Arguments

ArgumentInTypeRequiredDescription
pagequeryintegerNo1-based page number for paginated list endpoints. Default: 1. Minimum: 1.
limitqueryintegerNoMaximum number of records to return per page. Default: 20. Minimum: 1. Maximum: 100.
sortquerystringNoSort by one allowed field. Use exactly one of sort[asc] or sort[desc]. Allowed fields: createdAt. Default: createdAt DESC. Allowed values: createdAt.
relationquerystringNoComma-separated relation aliases to include. Allowed aliases: checkoutSession, gatewayAccount, userPaymentMethod. Unknown aliases return 400.
checkoutSessionIdquerystringNoOwning checkout-session UUID (alias for checkoutSessionsUuid). Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400.
checkoutSessionsUuidquerystringNoOwning checkout-session UUID. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400.
createdAtquerystring (date-time)NoAttempt creation timestamp. Equality filter. Pass without operator for exact match or pass any of the following operators: [gt] [gte] [lt] [lte].
declineReasonquerystringNoFlopay-normalised decline reason. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400. Allowed values: INSUFFICIENT_FUNDS, DO_NOT_HONOUR, TOO_MANY_ATTEMPTS, PARTIAL_APPROVAL, PAYMENT_GATEWAY_ERROR, TECHNICAL_ERROR, RETRYABLE_DECLINE, UNSUPPORTED_CARD_PURCHASE, USER_ERROR, CVV_INVALID, AVS_FAIL, POSTCODE_INVALID, 3DS_FAIL, EXCEEDS_CARD_LIMIT, CLIENT_ERROR, UNKNOWN_DECLINE_REASON.
gatewayquerystringNoPayment provider used for the attempt. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400. Allowed values: stripe, paypal, worldpay_corporate_gateway.
gatewayDeclineReasonquerystringNoRaw provider decline reason string. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400.
gatewayIdquerystringNoGateway account UUID the attempt ran on. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400.
idquerystringNoAlias for uuid: matches the attempt UUID. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400.
providerIntentIdquerystringNoProvider payment-intent id (e.g. Stripe pi_*). Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400.
resultquerystringNoAttempt result. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400. Allowed values: PENDING, AUTHORIZED, SUCCESS, DECLINE, ERROR, ACTION_REQUIRED.
userEmailquerystringNoEmail recorded on the owning checkout session. Equality filter. Pass without operator for exact match or pass any of the following operators: [search]. [search] is case-insensitive text contains matching.
userIdquerystringNoClient-managed user identifier on the owning checkout session. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400.
userPaymentMethodIdquerystringNoUser payment-method UUID associated with the attempt. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400.
userUuidquerystringNoLinked Flopay user UUID on the owning checkout session. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400.
uuidquerystringNoAttempt UUID. Equality filter. Pass without operator for exact match or pass any of the following operators: [in]. [in] accepts comma-separated values; blank entries return 400.

Result

Returns 200 with a JSON body.

FieldTypeRequiredDescription
dataarray of objectYes
data[].checkoutSessionsUuidstringYesOwning checkout-session UUID.
data[].createdAtstring (date-time)Yes
data[].declineReasonstring or nullNoAllowed values: INSUFFICIENT_FUNDS, DO_NOT_HONOUR, TOO_MANY_ATTEMPTS, PARTIAL_APPROVAL, PAYMENT_GATEWAY_ERROR, TECHNICAL_ERROR, RETRYABLE_DECLINE, UNSUPPORTED_CARD_PURCHASE, USER_ERROR, CVV_INVALID, AVS_FAIL, POSTCODE_INVALID, 3DS_FAIL, EXCEEDS_CARD_LIMIT, CLIENT_ERROR, UNKNOWN_DECLINE_REASON.
data[].gatewaystringYesAllowed values: stripe, paypal, worldpay_corporate_gateway.
data[].gatewayAccountobject or nullNoGateway account (non-secret fields) this attempt ran on. Present only when requested.
data[].gatewayAccount.codestringYesGateway account identifier (e.g. the Stripe connected account acct_…).
data[].gatewayAccount.currencystringYes3-letter ISO default currency code (e.g. "USD") used by this gateway account.
data[].gatewayAccount.environmentstringYesAllowed values: stage, production.
data[].gatewayAccount.idstringYesGateway UUID.
data[].gatewayAccount.namestringYesHuman-readable name of the gateway account.
data[].gatewayAccount.providerTypestringYesAllowed values: stripe, paypal, worldpay_corporate_gateway.
data[].gatewayAccount.publishableKeystringNoPublic API key used by frontend clients to identify the gateway account. Not a secret.
data[].gatewayDeclineReasonstring or nullNoRaw provider decline reason.
data[].gatewayPaymentIntentIdstring or nullNoOpaque provider payment-object id for this attempt, such as a Stripe PaymentIntent or PayPal Order/subscription id. The legacy field name is preserved for compatibility.
data[].idstringYes
data[].nextActionRedirectUrlstring or nullNoIssuer/3DS redirect URL surfaced when an attempt is in ACTION_REQUIRED state. The SDK renders this in a host-level iframe overlay; the outcome is resolved server-side when the challenge redirects to the Stripe return_url (GET /v1/vault/3ds/return), with POST /v1/checkouts/sessions/{id}/3ds/complete available as a sync probe.
data[].paymentMethodobject or nullNoStored payment method (non-secret display fields) this attempt charged. An attempt charges exactly one method. Present only when the userPaymentMethod relation is requested.
data[].paymentMethod.brandstring or nullNoCard brand as reported by the gateway (free-text, e.g. "visa"). Null for non-card types.
data[].paymentMethod.createdAtstring (date-time)YesWhen the payment method row was created.
data[].paymentMethod.expiryMonthnumber or nullNoCard expiry month (1-12). Null for non-card types.
data[].paymentMethod.expiryYearnumber or nullNoCard expiry year (four digits). Null for non-card types.
data[].paymentMethod.gatewayobject or nullNoOwning gateway (non-secret fields). Present when the gateway relation is loaded.
data[].paymentMethod.gateway.codestringYesGateway account identifier (e.g. the Stripe connected account acct_…).
data[].paymentMethod.gateway.currencystringYes3-letter ISO default currency code (e.g. "USD") used by this gateway account.
data[].paymentMethod.gateway.environmentstringYesAllowed values: stage, production.
data[].paymentMethod.gateway.idstringYesGateway UUID.
data[].paymentMethod.gateway.namestringYesHuman-readable name of the gateway account.
data[].paymentMethod.gateway.providerTypestringYesAllowed values: stripe, paypal, worldpay_corporate_gateway.
data[].paymentMethod.gateway.publishableKeystringNoPublic API key used by frontend clients to identify the gateway account. Not a secret.
data[].paymentMethod.idstringYesFlopay payment method UUID.
data[].paymentMethod.lastFourstring or nullNoLast four digits of the card. Null for non-card types.
data[].paymentMethod.payerEmailstring or nullNoPayer email for wallet types (PayPal). Null for cards.
data[].paymentMethod.statusstringYesPayment method lifecycle status. Allowed values: pending, active, deleted.
data[].paymentMethod.typestringYesStored payment method type. Allowed values: card, paypal.
data[].providerPaymentMethodIdstring or nullNoProvider PaymentMethod id (e.g. Stripe pm_xxx) associated with this attempt. Set on vault-driven attempts once the bridge has minted a provider PM from the vault token; absent on legacy attempts.
data[].resultstringYesAllowed values: PENDING, AUTHORIZED, SUCCESS, DECLINE, ERROR, ACTION_REQUIRED.
limitnumberYes
pagenumberYes
pagesnumberYes
totalnumberYes

Errors

StatusDescription
400The path, relation, filter, sort, or pagination input is invalid.
401Client Basic authentication or OAuth2 bearer authentication is required. For Basic, use client.uuid as the username and client.api_key as the password; for bearer, send a valid OAuth2 access token with the required scope.
403The bearer token does not grant the required merchant read scope.

On this page