Documentation
MCPTool reference

Users tools

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

Users tools

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

InvoicePreview_list

List User Invoices

Returns locally persisted invoice records for the supplied user id, ingested via provider webhooks. The user id must belong to the authenticated client. Supports page, limit, sort[asc|desc], and whitelisted filters for uuid, state, total, paidAt, createdAt, and updatedAt. Invalid list parameters return 400.

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

Arguments

ArgumentInTypeRequiredDescription
idpathstring (uuid)YesThe Flopay user UUID scoped to the authenticated client.
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, paidAt, total, updatedAt. Default: createdAt DESC. Allowed values: createdAt, paidAt, total, updatedAt.
relationquerystringNoThis endpoint does not support relation aliases. Supplying relation returns 400.
createdAtquerystring (date-time)NoInvoice creation timestamp. Equality filter. Pass without operator for exact match or pass any of the following operators: [gt] [gte] [lt] [lte].
paidAtquerystring (date-time)NoInvoice paid timestamp. Equality filter. Pass without operator for exact match or pass any of the following operators: [gt] [gte] [lt] [lte].
statequerystringNoInvoice state. 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: open, pending, processing, pastDue, paid, closed, failed, voided, unknown.
totalquerynumberNoInvoice total amount. Equality filter. Pass without operator for exact match or pass any of the following operators: [gt] [gte] [lt] [lte].
updatedAtquerystring (date-time)NoInvoice update timestamp. Equality filter. Pass without operator for exact match or pass any of the following operators: [gt] [gte] [lt] [lte].
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 invoice 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. A paginated list of invoices for the requested user.

FieldTypeRequiredDescription
dataarray of objectYesInvoices returned for the requested user.
data[].billingReasonstring or nullNoProvider-reported billing reason.
data[].createdAtstring (date-time)YesWhen the invoice was created.
data[].currencystring or nullNo
data[].gatewayobject or nullNoOwning gateway (non-secret fields). Present when the gateway relation is loaded.
data[].gateway.codestringYesGateway account identifier (e.g. the Stripe connected account acct_…).
data[].gateway.currencystringYes3-letter ISO default currency code (e.g. "USD") used by this gateway account.
data[].gateway.environmentstringYesAllowed values: stage, production.
data[].gateway.idstringYesGateway UUID.
data[].gateway.namestringYesHuman-readable name of the gateway account.
data[].gateway.providerTypestringYesAllowed values: stripe, paypal, worldpay_corporate_gateway.
data[].gateway.publishableKeystringNoPublic API key used by frontend clients to identify the gateway account. Not a secret.
data[].gatewayInvoiceIdstring or nullNoThe invoice identifier in the billing provider (e.g. Stripe in_…). Null only briefly while a one-time purchase invoice is being minted at the gateway.
data[].gatewayTypestringYesThe billing provider that produced this invoice. Allowed values: stripe, paypal, worldpay_corporate_gateway.
data[].idstringYesThe Flopay invoice UUID.
data[].paidAtstring (date-time) or nullNoWhen the invoice was paid by the provider.
data[].statestringYesThe current invoice state. Allowed values: open, pending, processing, pastDue, paid, closed, failed, voided, unknown.
data[].totalnumber or nullNo
data[].transactionobjectNoLinked Flopay transaction (non-secret fields incl. metadata). Present only when the transaction relation is loaded and a transaction settled this invoice.
data[].transaction.amountnumberYes
data[].transaction.authorizationExpiresAtstring (date-time) or nullNoDeadline for capturing an active authorization.
data[].transaction.authorizationVoidReasonstring or nullNoWhy an uncaptured authorization was voided. Allowed values: merchant_requested, expired, provider_canceled.
data[].transaction.checkoutMetadataobjectNoImmutable non-sensitive client context inherited from the originating checkout.
data[].transaction.checkoutSessionIdstring or nullNoOriginating checkout session UUID.
data[].transaction.createdAtstring (date-time)YesRecord creation timestamp.
data[].transaction.currencystringYes
data[].transaction.descriptionstring or nullYes
data[].transaction.effectiveFloFeeUsdnumber or nullYesEffective Flo platform fee in USD after adjustments. Null until the legacy base fee has been finalized.
data[].transaction.financialEffectiveAtstring (date-time) or nullNoAuthoritative provider money-movement timestamp, when available.
data[].transaction.floFeeAdjustmentUsdnumberYesNet append-only adjustment to the finalized Flo platform fee, in USD.
data[].transaction.floFeeUsdnumber or nullYesFlo's platform fee for this transaction, always in USD: distinct from the shopper amount and currency.
data[].transaction.gatewayobjectNoOwning gateway (non-secret fields). Present only when the gateway relation is loaded.
data[].transaction.gateway.codestringYesGateway account identifier (e.g. the Stripe connected account acct_…).
data[].transaction.gateway.currencystringYes3-letter ISO default currency code (e.g. "USD") used by this gateway account.
data[].transaction.gateway.environmentstringYesAllowed values: stage, production.
data[].transaction.gateway.idstringYesGateway UUID.
data[].transaction.gateway.namestringYesHuman-readable name of the gateway account.
data[].transaction.gateway.providerTypestringYesAllowed values: stripe, paypal, worldpay_corporate_gateway.
data[].transaction.gateway.publishableKeystringNoPublic API key used by frontend clients to identify the gateway account. Not a secret.
data[].transaction.gatewayChargeIdstring or nullNoOriginal gateway charge identifier.
data[].transaction.gatewayPaymentIntentIdstring or nullNoOpaque provider payment-object identifier, such as a Stripe PaymentIntent or PayPal Order/subscription id. The legacy field name is preserved for compatibility.
data[].transaction.gatewayTransactionIdstring or nullNoGateway transaction identifier.
data[].transaction.idstringYes
data[].transaction.metadataobject or nullYesArbitrary metadata captured with the transaction.
data[].transaction.occurredAtstring (date-time)Yes
data[].transaction.statusstringYes
data[].transaction.subscriptionobjectNoLinked subscription (non-secret fields incl. metadata). Present only when the subscription relation is loaded and the payment is tied to a subscription.
data[].transaction.subscription.amountnumber or nullYesThe stored single-unit amount.
data[].transaction.subscription.cancelAtstring (date-time) or nullYesWhen the subscription is scheduled to cancel.
data[].transaction.subscription.canceledAtstring (date-time) or nullYesWhen the subscription was canceled.
data[].transaction.subscription.checkoutMetadataobjectNoImmutable non-sensitive client context inherited from the originating checkout.
data[].transaction.subscription.checkoutSessionIdstring or nullYesThe originating checkout session UUID when available.
data[].transaction.subscription.clientIdstring or nullYesThe authenticated client UUID associated with the subscription row.
data[].transaction.subscription.createdAtstring (date-time)YesWhen the row was created.
data[].transaction.subscription.currencystring or nullYesThe ISO 4217 currency code recorded for the subscription.
data[].transaction.subscription.endDatestring (date-time) or nullYesWhen the current subscription term ends.
data[].transaction.subscription.gatewayobject or nullNoOwning gateway (non-secret fields). Present only when the gateway relation is requested.
data[].transaction.subscription.gateway.codestringYesGateway account identifier (e.g. the Stripe connected account acct_…).
data[].transaction.subscription.gateway.currencystringYes3-letter ISO default currency code (e.g. "USD") used by this gateway account.
data[].transaction.subscription.gateway.environmentstringYesAllowed values: stage, production.
data[].transaction.subscription.gateway.idstringYesGateway UUID.
data[].transaction.subscription.gateway.namestringYesHuman-readable name of the gateway account.
data[].transaction.subscription.gateway.providerTypestringYesAllowed values: stripe, paypal, worldpay_corporate_gateway.
data[].transaction.subscription.gateway.publishableKeystringNoPublic API key used by frontend clients to identify the gateway account. Not a secret.
data[].transaction.subscription.gatewayIdstring or nullYesThe gateway configuration UUID used for this subscription when available.
data[].transaction.subscription.gatewaySubscriptionIdstringYesThe subscription identifier stored from the billing gateway. Flo-owned subscriptions hold no gateway-side subscription object, so this is a synthesized flo_<uuid> identifier that exists in the response only: it is not stored, and cannot be looked up at the gateway.
data[].transaction.subscription.gatewayTypestringYesThe payment gateway that processes charges for the subscription. This describes the payment rails only: it does NOT say who owns the billing schedule. A Flo-owned subscription still reports the gateway its charges run through; read ownership to tell the two apart. Allowed values: stripe, paypal, worldpay_corporate_gateway.
data[].transaction.subscription.gatewayUserIdstring or nullYesThe billing gateway customer identifier when one is known.
data[].transaction.subscription.metadataobject or nullYesArbitrary metadata captured with the subscription row.
data[].transaction.subscription.ownershipstringYesWho owns the billing schedule. provider means the gateway holds the subscription object and drives renewals; flo means Flopay holds the schedule and drives renewals itself, charging through the gateway named by gatewayType. Allowed values: flo, provider.
data[].transaction.subscription.pauseStatestring or nullYesDistinguishes a pause that is in effect ('active') from one recorded to start at a future date ('scheduled'). Null when no pause is recorded. Allowed values: scheduled, active.
data[].transaction.subscription.pausedAtstring (date-time) or nullYesWhen the subscription was paused.
data[].transaction.subscription.planDescriptionstring or nullYesThe stored plan description when available.
data[].transaction.subscription.planIdstringYesThe stored plan identifier.
data[].transaction.subscription.planNamestringYesThe stored plan name.
data[].transaction.subscription.quantitynumberYesThe subscribed quantity.
data[].transaction.subscription.rebillCountinteger (int32)YesThe number of successful renewal charges recorded for the subscription. Minimum: 0.
data[].transaction.subscription.resumeAtstring (date-time) or nullYesWhen the subscription will resume.
data[].transaction.subscription.startDatestring (date-time) or nullYesWhen the subscription started.
data[].transaction.subscription.statestringYesThe current subscription state stored in Flopay. Allowed values: active, canceled, expired, failed, future, paused, past_due.
data[].transaction.subscription.totalnumber or nullYesThe stored total amount.
data[].transaction.subscription.trialEndstring (date-time) or nullYesWhen the trial ends.
data[].transaction.subscription.updatedAtstring (date-time)YesWhen the row was last updated.
data[].transaction.subscription.userFirstNamestring or nullNoCustomer first name when the user relation is loaded.
data[].transaction.subscription.userGatewayIdstring or nullYesThe linked internal user gateway row UUID when available.
data[].transaction.subscription.userLastNamestring or nullNoCustomer last name when the user relation is loaded.
data[].transaction.subscription.userUuidstring or nullYesThe Flopay user UUID associated with the subscription.
data[].transaction.subscription.uuidstringYesInternal Flopay subscription UUID.
data[].transaction.subscriptionUuidstring or nullNoLinked Flopay subscription UUID.
data[].transaction.typestringYesFinancial event classification. Allowed values: purchase, refund, chargeback, dispute.
data[].transaction.userEmailstring or nullNoCustomer email when the user relation is loaded.
data[].transaction.userFirstNamestring or nullNoCustomer first name when the user relation is loaded.
data[].transaction.userLastNamestring or nullNoCustomer last name when the user relation is loaded.
data[].transaction.userUuidstring or nullNoLinked Flopay user UUID.
data[].transactionTypestring or nullNoProvider-reported transaction type.
data[].transactionUuidstring or nullNoLinked Flopay transaction UUID.
data[].updatedAtstring (date-time)YesWhen the invoice was last updated.
data[].userFirstNamestring or nullNoCustomer first name when the user relation is loaded.
data[].userLastNamestring or nullNoCustomer last name when the user relation is loaded.
data[].userUuidstring or nullNoLinked Flopay user UUID.
limitnumberYes
pagenumberYes
pagesnumberYes
totalnumberYes

Errors

StatusDescription
400The request path or query parameters 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.
404No user with the supplied id exists for the authenticated client.

PaymentMethods_list

List Payment Methods

Returns paginated saved payment methods for the authenticated client. Only methods whose owning gateway belongs to the client AND whose user is linked to the client are returned. Supports page, limit, sort[asc|desc], and whitelisted filters for uuid, userUuid, type, provider, status, createdAt, and updatedAt. The response exposes display fields only: vault tokens, provider payment method ids, and billing addresses are never returned. Invalid list parameters return 400.

PolicyValue
OperationGET /v1/payment-methods
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, updatedAt. Default: createdAt DESC. Allowed values: createdAt, updatedAt.
relationquerystringNoThis endpoint does not support relation aliases. Supplying relation returns 400.
createdAtquerystring (date-time)NoPayment method creation timestamp. Equality filter. Pass without operator for exact match or pass any of the following operators: [gt] [gte] [lt] [lte].
providerquerystringNoThe gateway provider that vaulted the payment 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: stripe, paypal, worldpay_corporate_gateway.
statusquerystringNoPayment method lifecycle 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, active, deleted.
typequerystringNoStored payment method type (card or PayPal). 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: card, paypal.
updatedAtquerystring (date-time)NoPayment method update timestamp. Equality filter. Pass without operator for exact match or pass any of the following operators: [gt] [gte] [lt] [lte].
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 payment method 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. A paginated list of saved payment methods for the authenticated client.

FieldTypeRequiredDescription
dataarray of objectYes
data[].brandstring or nullNoCard brand as reported by the gateway (free-text, e.g. "visa"). Null for non-card types.
data[].createdAtstring (date-time)YesWhen the payment method row was created.
data[].expiryMonthnumber or nullNoCard expiry month (1-12). Null for non-card types.
data[].expiryYearnumber or nullNoCard expiry year (four digits). Null for non-card types.
data[].gatewayobject or nullNoOwning gateway (non-secret fields). Present when the gateway relation is loaded.
data[].gateway.codestringYesGateway account identifier (e.g. the Stripe connected account acct_…).
data[].gateway.currencystringYes3-letter ISO default currency code (e.g. "USD") used by this gateway account.
data[].gateway.environmentstringYesAllowed values: stage, production.
data[].gateway.idstringYesGateway UUID.
data[].gateway.namestringYesHuman-readable name of the gateway account.
data[].gateway.providerTypestringYesAllowed values: stripe, paypal, worldpay_corporate_gateway.
data[].gateway.publishableKeystringNoPublic API key used by frontend clients to identify the gateway account. Not a secret.
data[].idstringYesFlopay payment method UUID.
data[].lastFourstring or nullNoLast four digits of the card. Null for non-card types.
data[].payerEmailstring or nullNoPayer email for wallet types (PayPal). Null for cards.
data[].statusstringYesPayment method lifecycle status. Allowed values: pending, active, deleted.
data[].typestringYesStored payment method type. Allowed values: card, paypal.
limitnumberYes
pagenumberYes
pagesnumberYes
totalnumberYes

Errors

StatusDescription
400The sort, filter, or pagination query parameters 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.

Timelines_list

List Timelines

Returns a paginated list of customer timelines for the authenticated client. Each row is a full TimelineDto including the user's merged, chronologically-ordered events (checkout sessions, transactions, subscriptions, invoices, and payment methods). Rows are ordered by their most recent event (occurredAt, default DESC), surfacing the most recently active customers first. Supports page, limit, sort[asc|desc], and whitelisted filters for userUuid, kind, and an occurredAt date range, which narrow the events that make up each timeline. Invalid list parameters return 400.

PolicyValue
OperationGET /v1/timelines
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: occurredAt. Default: occurredAt DESC. Allowed values: occurredAt.
relationquerystringNoThis endpoint does not support relation aliases. Supplying relation returns 400.
kindquerystringNoNormalised event source kind. Keeps only events of the supplied kind(s). 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: checkout_session, transaction, subscription, invoice, payment_method, dispute, chargeback_alert, pre_dispute_alert.
occurredAtquerystring (date-time)NoEvent timestamp. Bands the events that make up each timeline. Equality filter. Pass without operator for exact match or pass any of the following operators: [gt] [gte] [lt] [lte].
userUuidquerystringNoFlopay user UUID. Scopes the list to a single user timeline. 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. A paginated list of customer timelines for the authenticated client.

FieldTypeRequiredDescription
dataarray of objectYes
data[].eventCountnumberYesNumber of events in the timeline.
data[].eventsarray of objectYesThe merged events, ordered oldest → newest.
data[].events[].amountnumber or nullYesAmount in major units, or null when the source carries no amount.
data[].events[].clientobject or nullYesThe merchant (client) that owns this event's underlying record. Always the authenticated client on the client-facing endpoint; on the admin endpoint it identifies the owning merchant per event so a timeline spanning clients can be labelled (e.g. by client.slug). Null only if the client is unresolvable.
data[].events[].client.slugstringYesThe merchant (client) slug, for labelling the event in the dashboard.
data[].events[].client.uuidstringYesThe merchant (client) UUID that owns the underlying record.
data[].events[].currencystring or nullYesISO-4217 currency code, or null.
data[].events[].idstringYesStable graph-node id. Existing resource projections use <kind>:<resourceUuid>; append-only payment lifecycle entries add their persisted transition UUID so multiple events can share one resource.
data[].events[].kindstringYesThe normalised source kind for this event. Allowed values: checkout_session, transaction, subscription, invoice, payment_method, dispute, chargeback_alert, pre_dispute_alert.
data[].events[].metadataobject or nullYesOptional non-sensitive passthrough metadata, or null.
data[].events[].occurredAtstring (date-time)YesISO-8601 timestamp the event occurred at. The chronological sort key for the timeline.
data[].events[].parentUuidstring or nullYesFK-derived link to a related event's resourceUuid (a timeline edge), or null when there is no related event in this timeline.
data[].events[].rebillSequenceinteger or nullYesThe chronological 1-based sequence of this completed subscription rebill, or null when this event is not the completed payment or directly linked invoice for a canonical rebill. Minimum: 1.
data[].events[].resourceUuidstringYesThe underlying record id, for deep-linking to its detail page.
data[].events[].statusstring or nullYesUnderlying resource status (drives the dashboard status badge), or null.
data[].events[].titlestringYesShort human label, e.g. a plan name or "Checkout session".
data[].firstEventAtstring (date-time) or nullYesTimestamp of the oldest event, or null when the timeline is empty.
data[].futureEventsarray of objectYesKnown-future events for this customer's Flo-managed subscriptions, ordered soonest → latest. Each is scheduled, not extrapolated; the array is empty when nothing is committed (including for customers whose subscriptions are all provider-managed).
data[].futureEvents[].amountnumber or nullYesThe amount that will be charged, in major units. Populated for subscription.rebill and subscription.recovery_retry; null for events that move no money.
data[].futureEvents[].clientobject or nullYesThe merchant that owns the subscription, or null when it is unresolvable.
data[].futureEvents[].client.slugstringYesThe merchant (client) slug, for labelling the event in the dashboard.
data[].futureEvents[].client.uuidstringYesThe merchant (client) UUID that owns the underlying record.
data[].futureEvents[].codestringYesWhat is scheduled to happen. Drives the dashboard label for the event. Allowed values: subscription.start, subscription.trial_end, subscription.rebill, subscription.recovery_retry, subscription.pause, subscription.resume, subscription.cancel.
data[].futureEvents[].currencystring or nullYesISO-4217 currency code, or null with no amount.
data[].futureEvents[].expectedAtstring (date-time)YesISO-8601 timestamp the event is scheduled for. Chronological sort key, and the basis for the relative countdown the dashboard renders. Always in the future at the moment of the response.
data[].futureEvents[].idstringYesStable graph-node id, future:<code>:<resourceUuid>.
data[].futureEvents[].rebillSequenceinteger or nullYesThe next chronological rebill sequence for subscription.rebill, or null for every other future event. Minimum: 1.
data[].futureEvents[].resourceUuidstringYesThe subscription this event is scheduled against: the same uuid as its subscription event in events, so the dashboard can anchor the projection to the node it belongs to.
data[].futureEvents[].titlestringYesShort human label: the subscription plan name.
data[].lastEventAtstring (date-time) or nullYesTimestamp of the newest event, or null when the timeline is empty.
data[].userEmailstring or nullYesThe user email, or null when the user row is not resolvable.
data[].userFirstNamestring or nullYesThe user first name (empty string when the user is unnamed), or null when the user row is not resolvable.
data[].userLastNamestring or nullYesThe user last name (empty string when the user is unnamed), or null when the user row is not resolvable.
data[].userUuidstringYesThe Flopay user UUID this timeline belongs to.
limitnumberYes
pagenumberYes
pagesnumberYes
totalnumberYes

Errors

StatusDescription
400The list query parameters were invalid, or record was called without a valid userUuid.
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.

Timelines_record

Get User Timeline

Returns a single user's full timeline for the authenticated client: every persisted source event merged into one chronological stream, ordered oldest → newest. The required userUuid query parameter selects the user; a missing, blank, or malformed userUuid returns 400. A user with no events for this client that is not linked to it returns 404.

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

Arguments

ArgumentInTypeRequiredDescription
userUuidquerystring (uuid)YesThe Flopay user UUID whose timeline to return. Required.

Result

Returns 200 with a JSON body. The requested user timeline for the authenticated client.

FieldTypeRequiredDescription
eventCountnumberYesNumber of events in the timeline.
eventsarray of objectYesThe merged events, ordered oldest → newest.
events[].amountnumber or nullYesAmount in major units, or null when the source carries no amount.
events[].clientobject or nullYesThe merchant (client) that owns this event's underlying record. Always the authenticated client on the client-facing endpoint; on the admin endpoint it identifies the owning merchant per event so a timeline spanning clients can be labelled (e.g. by client.slug). Null only if the client is unresolvable.
events[].client.slugstringYesThe merchant (client) slug, for labelling the event in the dashboard.
events[].client.uuidstringYesThe merchant (client) UUID that owns the underlying record.
events[].currencystring or nullYesISO-4217 currency code, or null.
events[].idstringYesStable graph-node id. Existing resource projections use <kind>:<resourceUuid>; append-only payment lifecycle entries add their persisted transition UUID so multiple events can share one resource.
events[].kindstringYesThe normalised source kind for this event. Allowed values: checkout_session, transaction, subscription, invoice, payment_method, dispute, chargeback_alert, pre_dispute_alert.
events[].metadataobject or nullYesOptional non-sensitive passthrough metadata, or null.
events[].occurredAtstring (date-time)YesISO-8601 timestamp the event occurred at. The chronological sort key for the timeline.
events[].parentUuidstring or nullYesFK-derived link to a related event's resourceUuid (a timeline edge), or null when there is no related event in this timeline.
events[].rebillSequenceinteger or nullYesThe chronological 1-based sequence of this completed subscription rebill, or null when this event is not the completed payment or directly linked invoice for a canonical rebill. Minimum: 1.
events[].resourceUuidstringYesThe underlying record id, for deep-linking to its detail page.
events[].statusstring or nullYesUnderlying resource status (drives the dashboard status badge), or null.
events[].titlestringYesShort human label, e.g. a plan name or "Checkout session".
firstEventAtstring (date-time) or nullYesTimestamp of the oldest event, or null when the timeline is empty.
futureEventsarray of objectYesKnown-future events for this customer's Flo-managed subscriptions, ordered soonest → latest. Each is scheduled, not extrapolated; the array is empty when nothing is committed (including for customers whose subscriptions are all provider-managed).
futureEvents[].amountnumber or nullYesThe amount that will be charged, in major units. Populated for subscription.rebill and subscription.recovery_retry; null for events that move no money.
futureEvents[].clientobject or nullYesThe merchant that owns the subscription, or null when it is unresolvable.
futureEvents[].client.slugstringYesThe merchant (client) slug, for labelling the event in the dashboard.
futureEvents[].client.uuidstringYesThe merchant (client) UUID that owns the underlying record.
futureEvents[].codestringYesWhat is scheduled to happen. Drives the dashboard label for the event. Allowed values: subscription.start, subscription.trial_end, subscription.rebill, subscription.recovery_retry, subscription.pause, subscription.resume, subscription.cancel.
futureEvents[].currencystring or nullYesISO-4217 currency code, or null with no amount.
futureEvents[].expectedAtstring (date-time)YesISO-8601 timestamp the event is scheduled for. Chronological sort key, and the basis for the relative countdown the dashboard renders. Always in the future at the moment of the response.
futureEvents[].idstringYesStable graph-node id, future:<code>:<resourceUuid>.
futureEvents[].rebillSequenceinteger or nullYesThe next chronological rebill sequence for subscription.rebill, or null for every other future event. Minimum: 1.
futureEvents[].resourceUuidstringYesThe subscription this event is scheduled against: the same uuid as its subscription event in events, so the dashboard can anchor the projection to the node it belongs to.
futureEvents[].titlestringYesShort human label: the subscription plan name.
lastEventAtstring (date-time) or nullYesTimestamp of the newest event, or null when the timeline is empty.
userEmailstring or nullYesThe user email, or null when the user row is not resolvable.
userFirstNamestring or nullYesThe user first name (empty string when the user is unnamed), or null when the user row is not resolvable.
userLastNamestring or nullYesThe user last name (empty string when the user is unnamed), or null when the user row is not resolvable.
userUuidstringYesThe Flopay user UUID this timeline belongs to.

Errors

StatusDescription
400The list query parameters were invalid, or record was called without a valid userUuid.
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 timeline exists for the supplied user under the authenticated client.

User_exportUsers

Export users

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/users/exports
Classread-only
Riskmedium
Confirmationnot-required
Retrysafe
Rate-limit tieraggregate
Rolesowner, admin
Scopesmcp:read

Arguments

ArgumentInTypeRequiredDescription
idquerystringNoFlopay 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.
emailquerystringNoUser email address. Equality filter. Pass without operator for exact match or pass any of the following operators: [search]. [search] is case-insensitive text contains matching.
clientUserIdquerystringNoClient-managed user identifier (user.client_user_id). Equality filter. Pass without operator for exact match or pass any of the following operators: [in] [search]. [in] accepts comma-separated values; blank entries return 400. [search] is case-insensitive text contains matching.
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, email, updatedAt. Default: createdAt DESC. Allowed values: createdAt, email, updatedAt.
relationquerystringNoThis endpoint does not support relation aliases. Supplying relation returns 400.
createdAtquerystring (date-time)NoUser creation timestamp. Equality filter. Pass without operator for exact match or pass any of the following operators: [gt] [gte] [lt] [lte].
updatedAtquerystring (date-time)NoUser update timestamp. Equality filter. Pass without operator for exact match or pass any of the following operators: [gt] [gte] [lt] [lte].
uuidquerystringNoFlopay 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.
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.
424The downstream billing provider could not be reached or returned an unexpected error.
429Export capacity exhausted. Retry-After is set to 60 seconds.
503Exports disabled or export storage unavailable.

User_getUserById

Get User By ID

Returns the user details for the supplied user id. The user must belong to the authenticated client.

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

Arguments

ArgumentInTypeRequiredDescription
idpathstring (uuid)YesThe Flopay user UUID scoped to the authenticated client.
relationquerystringNoThis endpoint does not support relation aliases. Supplying relation returns 400.

Result

Returns 200 with a JSON body. The user details for the requested user id.

FieldTypeRequiredDescription
addressobject or nullYesThe billing address for the user when available. Default: null.
address.citystring or nullYesThe billing city.
address.countrystring or nullYesThe billing country code or name.
address.geoCodestring or nullYesThe GeoIP or provider geocode when available.
address.phonestring or nullYesThe billing phone number.
address.postalCodestring or nullYesThe billing postal code.
address.regionstring or nullYesThe billing region or state.
address.street1string or nullYesThe first address line.
emailstringYesThe current email address for the user.
firstNamestringYesThe user first name when available from the billing provider.
idstringYesThe API user identifier. Use this value in /v1/users/{id} routes.
lastNamestringYesThe user last name when available from the billing provider.
providerCodestringYesA provider-specific code or internal user reference when available.

Errors

StatusDescription
400The request body, path parameters, or query parameters 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.
403The caller lacks the required read scope, or its live merchant membership is inactive or no longer authorizes the request.
404No user with the supplied id exists for the authenticated client.
424The downstream billing provider could not be reached or returned an unexpected error.

User_getUserPurchases

Get User Purchases

Returns the product codes already purchased by the supplied user. If the optional ids query parameter is provided, the response only includes matches from that list.

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

Arguments

ArgumentInTypeRequiredDescription
idpathstring (uuid)YesThe Flopay user UUID scoped to the authenticated client.
idsquerystringNoOptional comma-separated list of product codes to filter against. When omitted, all purchased product codes are returned.

Result

Returns 200 with a JSON body. A list of purchased product codes for the requested user.

FieldTypeRequiredDescription
dataarray of stringYesProduct codes the user has already purchased.

Errors

StatusDescription
400The request body, path parameters, or query parameters 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.
403The caller lacks the required read scope, or its live merchant membership is inactive or no longer authorizes the request.
404No user with the supplied id exists for the authenticated client.
424The downstream billing provider could not be reached or returned an unexpected error.

User_getUserSubscriptions

Get User Subscriptions

Returns the subscription rows stored in the Flopay subscription table for the supplied user id. The user must belong to the authenticated client.

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

Arguments

ArgumentInTypeRequiredDescription
idpathstring (uuid)YesThe Flopay user UUID scoped to the authenticated client.

Result

Returns 200 with a JSON body. A list of stored subscription records for the requested user.

FieldTypeRequiredDescription
dataarray of objectYesSubscription rows stored for the requested user.
data[].amountnumber or nullYesThe stored single-unit amount.
data[].cancelAtstring (date-time) or nullYesWhen the subscription is scheduled to cancel.
data[].canceledAtstring (date-time) or nullYesWhen the subscription was canceled.
data[].checkoutMetadataobjectNoImmutable non-sensitive client context inherited from the originating checkout.
data[].checkoutSessionIdstring or nullYesThe originating checkout session UUID when available.
data[].clientIdstring or nullYesThe authenticated client UUID associated with the subscription row.
data[].createdAtstring (date-time)YesWhen the row was created.
data[].currencystring or nullYesThe ISO 4217 currency code recorded for the subscription.
data[].endDatestring (date-time) or nullYesWhen the current subscription term ends.
data[].gatewayobject or nullNoOwning gateway (non-secret fields). Present only when the gateway relation is requested.
data[].gateway.codestringYesGateway account identifier (e.g. the Stripe connected account acct_…).
data[].gateway.currencystringYes3-letter ISO default currency code (e.g. "USD") used by this gateway account.
data[].gateway.environmentstringYesAllowed values: stage, production.
data[].gateway.idstringYesGateway UUID.
data[].gateway.namestringYesHuman-readable name of the gateway account.
data[].gateway.providerTypestringYesAllowed values: stripe, paypal, worldpay_corporate_gateway.
data[].gateway.publishableKeystringNoPublic API key used by frontend clients to identify the gateway account. Not a secret.
data[].gatewayIdstring or nullYesThe gateway configuration UUID used for this subscription when available.
data[].gatewaySubscriptionIdstringYesThe subscription identifier stored from the billing gateway. Flo-owned subscriptions hold no gateway-side subscription object, so this is a synthesized flo_<uuid> identifier that exists in the response only: it is not stored, and cannot be looked up at the gateway.
data[].gatewayTypestringYesThe payment gateway that processes charges for the subscription. This describes the payment rails only: it does NOT say who owns the billing schedule. A Flo-owned subscription still reports the gateway its charges run through; read ownership to tell the two apart. Allowed values: stripe, paypal, worldpay_corporate_gateway.
data[].gatewayUserIdstring or nullYesThe billing gateway customer identifier when one is known.
data[].metadataobject or nullYesArbitrary metadata captured with the subscription row.
data[].ownershipstringYesWho owns the billing schedule. provider means the gateway holds the subscription object and drives renewals; flo means Flopay holds the schedule and drives renewals itself, charging through the gateway named by gatewayType. Allowed values: flo, provider.
data[].pauseStatestring or nullYesDistinguishes a pause that is in effect ('active') from one recorded to start at a future date ('scheduled'). Null when no pause is recorded. Allowed values: scheduled, active.
data[].pausedAtstring (date-time) or nullYesWhen the subscription was paused.
data[].planDescriptionstring or nullYesThe stored plan description when available.
data[].planIdstringYesThe stored plan identifier.
data[].planNamestringYesThe stored plan name.
data[].quantitynumberYesThe subscribed quantity.
data[].rebillCountinteger (int32)YesThe number of successful renewal charges recorded for the subscription. Minimum: 0.
data[].resumeAtstring (date-time) or nullYesWhen the subscription will resume.
data[].startDatestring (date-time) or nullYesWhen the subscription started.
data[].statestringYesThe current subscription state stored in Flopay. Allowed values: active, canceled, expired, failed, future, paused, past_due.
data[].totalnumber or nullYesThe stored total amount.
data[].trialEndstring (date-time) or nullYesWhen the trial ends.
data[].updatedAtstring (date-time)YesWhen the row was last updated.
data[].userFirstNamestring or nullNoCustomer first name when the user relation is loaded.
data[].userGatewayIdstring or nullYesThe linked internal user gateway row UUID when available.
data[].userLastNamestring or nullNoCustomer last name when the user relation is loaded.
data[].userUuidstring or nullYesThe Flopay user UUID associated with the subscription.
data[].uuidstringYesInternal Flopay subscription UUID.

Errors

StatusDescription
400The request body, path parameters, or query parameters 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.
403The caller lacks the required read scope, or its live merchant membership is inactive or no longer authorizes the request.
404No user with the supplied id exists for the authenticated client.
424The downstream billing provider could not be reached or returned an unexpected error.

User_listUsers

List Users

Returns a paginated list of locally persisted users for the authenticated client. Supports page, limit, sort[asc|desc], optional email, clientUserId, and id (Flopay user UUID) exact-match convenience filters, and bracket-operator filters on the USER_LIST_QUERY_CONFIG whitelist. Passing email=, clientUserId=, or id= narrows the list to the matching user (an empty data array when nothing matches); the response shape is unchanged. The id filter lets a caller holding either identifier resolve a user through one contract: clientUserId is client-managed and optional, so it may never have been set for a given user.

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

Arguments

ArgumentInTypeRequiredDescription
idquerystringNoFlopay 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.
emailquerystringNoUser email address. Equality filter. Pass without operator for exact match or pass any of the following operators: [search]. [search] is case-insensitive text contains matching.
clientUserIdquerystringNoClient-managed user identifier (user.client_user_id). Equality filter. Pass without operator for exact match or pass any of the following operators: [in] [search]. [in] accepts comma-separated values; blank entries return 400. [search] is case-insensitive text contains matching.
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, email, updatedAt. Default: createdAt DESC. Allowed values: createdAt, email, updatedAt.
relationquerystringNoThis endpoint does not support relation aliases. Supplying relation returns 400.
createdAtquerystring (date-time)NoUser creation timestamp. Equality filter. Pass without operator for exact match or pass any of the following operators: [gt] [gte] [lt] [lte].
updatedAtquerystring (date-time)NoUser update timestamp. Equality filter. Pass without operator for exact match or pass any of the following operators: [gt] [gte] [lt] [lte].
uuidquerystringNoFlopay 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.

Result

Returns 200 with a JSON body.

FieldTypeRequiredDescription
dataarray of objectYes
data[].clientUserIdstring or nullNo
data[].createdAtstring (date-time)Yes
data[].emailstringYes
data[].firstNamestringYes
data[].idstringYes
data[].lastNamestringYes
data[].updatedAtstring (date-time)Yes
limitnumberYes
pagenumberYes
pagesnumberYes
totalnumberYes

Errors

StatusDescription
400The request body, path parameters, or query parameters 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.
403The caller lacks the required read scope, or its live merchant membership is inactive or no longer authorizes the request.
424The downstream billing provider could not be reached or returned an unexpected error.

User_lookup

Resolve or disambiguate a customer

Resolves an exact tenant-linked Flo UUID first, then an exact merchant clientUserId. Otherwise returns every bounded, paginated email-or-name candidate and never silently selects one. Candidate fields are the existing authenticated local-user DTO only; no payment provider is called.

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

Arguments

ArgumentInTypeRequiredDescription
valuequerystringYesFlo UUID, merchant clientUserId, email, or customer name. Exact stable identifiers are resolved before email/name candidates. Maximum length: 300.
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: 50.
sortquerystringNoSort by one allowed field. Use exactly one of sort[asc] or sort[desc]. Allowed fields: createdAt, email, updatedAt. Default: createdAt DESC. Allowed values: createdAt, email, updatedAt.
relationquerystringNoThis endpoint does not support relation aliases. Supplying relation returns 400.

Result

Returns 200 with a JSON body. An exact stable-identifier match, explicit email/name candidates, or an empty result.

FieldTypeRequiredDescription
dataarray of objectYes
data[].clientUserIdstring or nullNo
data[].createdAtstring (date-time)Yes
data[].emailstringYes
data[].firstNamestringYes
data[].idstringYes
data[].lastNamestringYes
data[].updatedAtstring (date-time)Yes
limitnumberYes
pagenumberYes
pagesnumberYes
resolutionobjectYes
resolution.kindstringYesAllowed values: exact, candidates, none.
resolution.matchedBystring or nullYesAllowed values: flo-uuid, client-user-id, email-or-name.
totalnumberYes

Errors

StatusDescription
400The request body, path parameters, or query parameters 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.
403The caller lacks the required read scope, or its live merchant membership is inactive or no longer authorizes the request.
424The downstream billing provider could not be reached or returned an unexpected error.

User_updateUser

Update User Email

Updates the email address for the supplied user id. The path user id must belong to the authenticated client. Only the new email address is required in the request body. Rejected with 403 Forbidden when the user is linked to another client; once a user is shared across clients, email updates must move through a future verified user-owned flow.

PolicyValue
OperationPATCH /v1/users/{id}
Classmutating
Riskmedium
Confirmationrequired
Retrymanual-reconciliation
Rate-limit tiermutation
Rolesowner, admin
Scopesmcp:write

Arguments

ArgumentInTypeRequiredDescription
idpathstring (uuid)YesThe Flopay user UUID scoped to the authenticated client.
emailbodystring (email)YesThe new email address to assign to the user.

Result

Returns 204 with no body. The user email was updated successfully. The response body is empty.

Errors

StatusDescription
400The request body, path parameters, or query parameters 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.
403The caller lacks the required read scope, or its live merchant membership is inactive or no longer authorizes the request.
404No user with the supplied id exists for the authenticated client.
424The downstream billing provider could not be reached or returned an unexpected error.

UserPurchaseRecords_list

List User Purchase Records

Returns authoritative payment records from the local transaction table for one Flopay user within the authenticated merchant. The path user and merchant tenant are mandatory scopes applied before the shared payment filters. No payment provider is queried. A user outside the merchant boundary returns 404; a known user with no matching records returns an empty paginated list.

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

Arguments

ArgumentInTypeRequiredDescription
idquerystringNoPayment identifier. 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.
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: amount, createdAt, floFeeUsd, updatedAt, gateway.id, gateway.code, gateway.name, gateway.providerType, gateway.environment, gateway.currency, subscription.uuid, subscription.gatewayType, subscription.gatewaySubscriptionId, subscription.planId, subscription.planName, subscription.quantity, subscription.rebillCount, subscription.currency, subscription.amount, subscription.total, subscription.state, subscription.startDate, subscription.endDate, subscription.canceledAt, subscription.createdAt, subscription.updatedAt. Default: createdAt DESC. Allowed values: amount, createdAt, floFeeUsd, updatedAt, gateway.id, gateway.code, gateway.name, gateway.providerType, gateway.environment, gateway.currency, subscription.uuid, subscription.gatewayType, subscription.gatewaySubscriptionId, subscription.planId, subscription.planName, subscription.quantity, subscription.rebillCount, subscription.currency, subscription.amount, subscription.total, subscription.state, subscription.startDate, subscription.endDate, subscription.canceledAt, subscription.createdAt, subscription.updatedAt.
relationquerystringNoComma-separated relation aliases to include. Allowed aliases: gateway, subscription. Unknown aliases return 400.
amountquerynumberNoPayment amount. Equality filter. Pass without operator for exact match or pass any of the following operators: [gt] [gte] [lt] [lte].
currencyquerystringNoPayment 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.
descriptionquerystringNoPayment description. Equality filter. Pass without operator for exact match or pass any of the following operators: [search]. [search] is case-insensitive text contains matching.
emailquerystringNoEmail address of the user linked to the payment. Equality filter. Pass without operator for exact match or pass any of the following operators: [search]. [search] is case-insensitive text contains matching.
floFeeUsdquerynumberNoFlo's platform fee for this transaction, always in USD: distinct from the shopper amount and currency. Equality filter. Pass without operator for exact match or pass any of the following operators: [gt] [gte] [lt] [lte].
occurredAtquerystring (date-time)NoPayment occurrence timestamp. Equality filter. Pass without operator for exact match or pass any of the following operators: [gt] [gte] [lt] [lte].
providerquerystringNoPayment provider. 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.
statusquerystringNoCanonical payment lifecycle state. 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, processing, succeeded, failed, refunded, partially_refunded, refund_failed, voided, unknown.
typequerystringNoFinancial event type. 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: purchase, refund, chargeback, dispute.
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.
idpathanyYesStable Flopay user UUID scoped to the authenticated merchant.

Result

Returns 200 with a JSON body. A tenant- and user-scoped page of locally persisted payment records with authoritative Flopay transaction ids.

FieldTypeRequiredDescription
dataarray of objectYes
data[].amountnumberYes
data[].authorizationExpiresAtstring (date-time) or nullNoDeadline for capturing an active authorization.
data[].authorizationVoidReasonstring or nullNoWhy an uncaptured authorization was voided. Allowed values: merchant_requested, expired, provider_canceled.
data[].checkoutMetadataobjectNoImmutable non-sensitive client context inherited from the originating checkout.
data[].checkoutSessionIdstring or nullNoOriginating checkout session UUID.
data[].createdAtstring (date-time)YesRecord creation timestamp.
data[].currencystringYes
data[].descriptionstring or nullYes
data[].effectiveFloFeeUsdnumber or nullYesEffective Flo platform fee in USD after adjustments. Null until the legacy base fee has been finalized.
data[].financialEffectiveAtstring (date-time) or nullNoAuthoritative provider money-movement timestamp, when available.
data[].floFeeAdjustmentUsdnumberYesNet append-only adjustment to the finalized Flo platform fee, in USD.
data[].floFeeUsdnumber or nullYesFlo's platform fee for this transaction, always in USD: distinct from the shopper amount and currency.
data[].gatewayobjectNoOwning gateway (non-secret fields). Present only when the gateway relation is loaded.
data[].gateway.codestringYesGateway account identifier (e.g. the Stripe connected account acct_…).
data[].gateway.currencystringYes3-letter ISO default currency code (e.g. "USD") used by this gateway account.
data[].gateway.environmentstringYesAllowed values: stage, production.
data[].gateway.idstringYesGateway UUID.
data[].gateway.namestringYesHuman-readable name of the gateway account.
data[].gateway.providerTypestringYesAllowed values: stripe, paypal, worldpay_corporate_gateway.
data[].gateway.publishableKeystringNoPublic API key used by frontend clients to identify the gateway account. Not a secret.
data[].gatewayChargeIdstring or nullNoOriginal gateway charge identifier.
data[].gatewayPaymentIntentIdstring or nullNoOpaque provider payment-object identifier, such as a Stripe PaymentIntent or PayPal Order/subscription id. The legacy field name is preserved for compatibility.
data[].gatewayTransactionIdstring or nullNoGateway transaction identifier.
data[].idstringYes
data[].metadataobject or nullYesArbitrary metadata captured with the transaction.
data[].occurredAtstring (date-time)Yes
data[].statusstringYes
data[].subscriptionobjectNoLinked subscription (non-secret fields incl. metadata). Present only when the subscription relation is loaded and the payment is tied to a subscription.
data[].subscription.amountnumber or nullYesThe stored single-unit amount.
data[].subscription.cancelAtstring (date-time) or nullYesWhen the subscription is scheduled to cancel.
data[].subscription.canceledAtstring (date-time) or nullYesWhen the subscription was canceled.
data[].subscription.checkoutMetadataobjectNoImmutable non-sensitive client context inherited from the originating checkout.
data[].subscription.checkoutSessionIdstring or nullYesThe originating checkout session UUID when available.
data[].subscription.clientIdstring or nullYesThe authenticated client UUID associated with the subscription row.
data[].subscription.createdAtstring (date-time)YesWhen the row was created.
data[].subscription.currencystring or nullYesThe ISO 4217 currency code recorded for the subscription.
data[].subscription.endDatestring (date-time) or nullYesWhen the current subscription term ends.
data[].subscription.gatewayobject or nullNoOwning gateway (non-secret fields). Present only when the gateway relation is requested.
data[].subscription.gateway.codestringYesGateway account identifier (e.g. the Stripe connected account acct_…).
data[].subscription.gateway.currencystringYes3-letter ISO default currency code (e.g. "USD") used by this gateway account.
data[].subscription.gateway.environmentstringYesAllowed values: stage, production.
data[].subscription.gateway.idstringYesGateway UUID.
data[].subscription.gateway.namestringYesHuman-readable name of the gateway account.
data[].subscription.gateway.providerTypestringYesAllowed values: stripe, paypal, worldpay_corporate_gateway.
data[].subscription.gateway.publishableKeystringNoPublic API key used by frontend clients to identify the gateway account. Not a secret.
data[].subscription.gatewayIdstring or nullYesThe gateway configuration UUID used for this subscription when available.
data[].subscription.gatewaySubscriptionIdstringYesThe subscription identifier stored from the billing gateway. Flo-owned subscriptions hold no gateway-side subscription object, so this is a synthesized flo_<uuid> identifier that exists in the response only: it is not stored, and cannot be looked up at the gateway.
data[].subscription.gatewayTypestringYesThe payment gateway that processes charges for the subscription. This describes the payment rails only: it does NOT say who owns the billing schedule. A Flo-owned subscription still reports the gateway its charges run through; read ownership to tell the two apart. Allowed values: stripe, paypal, worldpay_corporate_gateway.
data[].subscription.gatewayUserIdstring or nullYesThe billing gateway customer identifier when one is known.
data[].subscription.metadataobject or nullYesArbitrary metadata captured with the subscription row.
data[].subscription.ownershipstringYesWho owns the billing schedule. provider means the gateway holds the subscription object and drives renewals; flo means Flopay holds the schedule and drives renewals itself, charging through the gateway named by gatewayType. Allowed values: flo, provider.
data[].subscription.pauseStatestring or nullYesDistinguishes a pause that is in effect ('active') from one recorded to start at a future date ('scheduled'). Null when no pause is recorded. Allowed values: scheduled, active.
data[].subscription.pausedAtstring (date-time) or nullYesWhen the subscription was paused.
data[].subscription.planDescriptionstring or nullYesThe stored plan description when available.
data[].subscription.planIdstringYesThe stored plan identifier.
data[].subscription.planNamestringYesThe stored plan name.
data[].subscription.quantitynumberYesThe subscribed quantity.
data[].subscription.rebillCountinteger (int32)YesThe number of successful renewal charges recorded for the subscription. Minimum: 0.
data[].subscription.resumeAtstring (date-time) or nullYesWhen the subscription will resume.
data[].subscription.startDatestring (date-time) or nullYesWhen the subscription started.
data[].subscription.statestringYesThe current subscription state stored in Flopay. Allowed values: active, canceled, expired, failed, future, paused, past_due.
data[].subscription.totalnumber or nullYesThe stored total amount.
data[].subscription.trialEndstring (date-time) or nullYesWhen the trial ends.
data[].subscription.updatedAtstring (date-time)YesWhen the row was last updated.
data[].subscription.userFirstNamestring or nullNoCustomer first name when the user relation is loaded.
data[].subscription.userGatewayIdstring or nullYesThe linked internal user gateway row UUID when available.
data[].subscription.userLastNamestring or nullNoCustomer last name when the user relation is loaded.
data[].subscription.userUuidstring or nullYesThe Flopay user UUID associated with the subscription.
data[].subscription.uuidstringYesInternal Flopay subscription UUID.
data[].subscriptionUuidstring or nullNoLinked Flopay subscription UUID.
data[].typestringYesFinancial event classification. Allowed values: purchase, refund, chargeback, dispute.
data[].userEmailstring or nullNoCustomer email when the user relation is loaded.
data[].userFirstNamestring or nullNoCustomer first name when the user relation is loaded.
data[].userLastNamestring or nullNoCustomer last name when the user relation is loaded.
data[].userUuidstring or nullNoLinked Flopay user UUID.
limitnumberYes
pagenumberYes
pagesnumberYes
totalnumberYes

Errors

StatusDescription
400The user id or list query parameters were invalid.
401A valid client API key or OAuth2 bearer token is required.
403The authenticated principal lacks merchant read access.
404No user with the requested id belongs to the authenticated merchant.

On this page