API Keys

API keys authenticate your requests to Flint Pay. Each key has scoped permissions controlling which APIs it can access. Keys use the key_ ID prefix.

If you do not have your first API key yet, start with the Developer Setup surface or the API & Agent Onboarding guide.

If you need isolated test environments, use Sandboxes to create or reset sandboxes and issue sandbox-bound test keys.

If you are sizing workers or retry loops, see Rate Limits for the current default limits and 429 handling guidance.

Methods#

Manage keys over the API with the /v1/api-keys endpoints: list (GET /v1/api-keys), create (POST /v1/api-keys), retrieve (GET /v1/api-keys/{api_key_id}), update (PATCH /v1/api-keys/{api_key_id}), and revoke (POST /v1/api-keys/{api_key_id}/revoke). Creating a key returns its secret_key once. See the Authentication guide for request rules and examples.

To create your very first key, before you have one to authenticate with, use one of these flows instead:

  • Create your first key during Developer Setup.
  • Issue sandbox-bound test keys from Sandboxes after setup.
  • Create and manage keys in the Flint dashboard.

secret_key values are only shown once at creation time. Store them securely. Flint cannot return the same secret again later.

Key Format#

Test keys start with flint_test_, live keys with flint_live_. Use test keys for sandbox and other test-mode environments. Live keys should only be used for production traffic.

When you create a key with sandbox_id, Flint binds that test key to a specific sandbox. Requests made with that key execute inside that sandbox automatically; you do not send a separate sandbox selector on each request.

Sandbox-bound keys are only valid for active test sandboxes owned by the authenticated merchant.

Key Statuses#

StatusDescription
activeKey is valid and can authenticate requests
revokedKey has been permanently revoked and cannot be used

Available Scopes#

Each scope grants access to specific API operations. Use the narrowest set of scopes your integration requires. The table is generated from the same catalog used by API-key validation and the dashboard pickers.

Credentials and API keys

ScopePermissionKey modesPartner installs
accounts.api_keys.readRead api keyslive, testNot allowed
accounts.api_keys.writeWrite api keyslive, testNot allowed

Developer tools

ScopePermissionKey modesPartner installs
developer.partner_apps.readRead partner appsliveNot allowed
developer.partner_apps.writeWrite partner appsliveNot allowed
developer.sandboxes.readRead sandboxesliveNot allowed
developer.sandboxes.writeWrite sandboxesliveNot allowed

Merchant account

ScopePermissionKey modesPartner installs
merchants.profile.readRead merchant profilelive, testAllowed
merchants.profile.writeWrite merchant profilelive, testNot allowed
merchants.onboarding.readRead onboardinglive, testNot allowed
merchants.account_sessions.writeWrite merchant account sessionslive, testNot allowed
merchants.onboarding.writeWrite onboardinglive, testNot allowed
merchants.locations.readRead locationslive, testAllowed
merchants.locations.writeWrite locationslive, testAllowed
merchant_billing.readRead merchant billinglive, testNot allowed

Developer and account

ScopePermissionKey modesPartner installs
accounts.organizations.readRead organizationslive, testNot allowed
accounts.organizations.writeWrite organizationslive, testNot allowed
settings.readRead settingslive, testNot allowed
settings.writeWrite settingslive, testNot allowed
accounts.devices.readRead deviceslive, testNot allowed
accounts.devices.writeWrite deviceslive, testNot allowed
analytics.readRead analyticslive, testAllowed
webhooks.readRead webhookslive, testAllowed
webhooks.writeWrite webhookslive, testAllowed
developer.request_logs.self.readRead own request logslive, testNot allowed
developer.request_logs.self.detail.readRead own request log detailslive, testNot allowed
developer.resource_timelines.readRead resource timelineslive, testNot allowed

Customers

ScopePermissionKey modesPartner installs
customers.readRead customerslive, testAllowed
customers.writeWrite customerslive, testAllowed
customers.sessions.writeWrite customer sessionslive, testNot allowed

Commerce

ScopePermissionKey modesPartner installs
commerce.coupons.readRead couponslive, testAllowed
commerce.coupons.writeWrite couponslive, testAllowed
commerce.products.readRead productslive, testAllowed
commerce.products.writeWrite productslive, testAllowed
commerce.orders.readRead orderslive, testAllowed
commerce.orders.writeWrite orderslive, testAllowed
commerce.refunds.readRead refundslive, testAllowed
commerce.refunds.writeWrite refundslive, testAllowed
commerce.subscription_plans.readRead subscription planslive, testAllowed
commerce.subscription_plans.writeWrite subscription planslive, testAllowed
commerce.subscriptions.readRead subscriptionslive, testAllowed
commerce.subscriptions.writeWrite subscriptionslive, testAllowed
commerce.invoices.readRead invoiceslive, testAllowed
commerce.invoices.writeWrite invoiceslive, testAllowed
commerce.bundles.readRead bundleslive, testAllowed
commerce.bundles.writeWrite bundleslive, testAllowed
commerce.catalog.readRead cataloglive, testAllowed
commerce.catalog.writeWrite cataloglive, testAllowed
commerce.refunds.tax_overrides.writeWrite refund tax overrideslive, testNot allowed
commerce.promotions.readRead promotionslive, testAllowed
commerce.promotions.writeWrite promotionslive, testAllowed
commerce.inventory.readRead inventorylive, testAllowed
commerce.inventory.writeWrite inventorylive, testAllowed
commerce.inventory_policies.writeWrite inventory policieslive, testAllowed
commerce.inventory_locations.writeWrite inventory location authoritylive, testAllowed
commerce.inventory_reservations.writeWrite inventory reservationslive, testAllowed
commerce.returns.readRead returnslive, testAllowed
commerce.returns.writeWrite returnslive, testAllowed
commerce.returns.decisions.writeWrite return decisionslive, testAllowed
commerce.returns.operations.writeWrite return operationslive, testAllowed
commerce.returns.resolutions.writeWrite return resolutionslive, testAllowed
commerce.returns.process.writeWrite composite return processinglive, testAllowed
commerce.return_policies.writeWrite return policieslive, testAllowed
commerce.return_reasons.writeWrite return reasonslive, testAllowed
commerce.delivery.readRead deliverylive, testAllowed
commerce.delivery.writeWrite deliverylive, testAllowed

Payments

ScopePermissionKey modesPartner installs
checkouts.checkout_sessions.readRead checkout sessionslive, testAllowed
checkouts.checkout_sessions.writeWrite checkout sessionslive, testAllowed
payments.payment_intents.readRead payment intentslive, testAllowed
payments.payment_intents.writeWrite payment intentslive, testAllowed
payments.payment_methods.readRead payment methodslive, testAllowed
payments.payment_methods.writeWrite payment methodslive, testAllowed
checkouts.payment_links.readRead payment linkslive, testAllowed
checkouts.payment_links.writeWrite payment linkslive, testAllowed
payments.disputes.readRead disputeslive, testNot allowed
capabilities.readRead capabilitieslive, testNot allowed
payments.payment_options.readRead payment optionslive, testAllowed
payments.payment_method_domains.readRead payment method domainslive, testNot allowed
payments.payment_method_domains.writeWrite payment method domainslive, testNot allowed

Risk

ScopePermissionKey modesPartner installs
risk.readRead risk datalive, testAllowed
risk.reviews.writeWrite risk reviewslive, testAllowed
risk.controls.writeWrite risk controlslive, testAllowed

Money movement

ScopePermissionKey modesPartner installs
money_movement.balances.readRead balanceslive, testNot allowed
money_movement.balance_transactions.readRead balance transactionslive, testNot allowed
money_movement.payouts.readRead payoutslive, testNot allowed
money_movement.payouts.writeWrite payoutslive, testNot allowed
money_movement.payout_settings.readRead payout settingslive, testNot allowed
money_movement.payout_settings.writeWrite payout settingslive, testNot allowed
reports.readRead reportslive, testAllowed
reports.writeWrite reportslive, testAllowed

Scope evaluation#

A matching write scope satisfies its read scope. For example, commerce.orders.write satisfies a route requiring commerce.orders.read. A write scope does not satisfy reads for a sibling resource, and unqualified scopes do not imply qualified permissions such as commerce.refunds.tax_overrides.write.

all is reserved for trusted internal keys and cannot be granted to an external API key.

Payment scopes follow ownership, not resource type#

A payment intent that belongs to an order is authorized by the order's scopes, not by payments.payment_intents.write. The route you call decides the scope you need.

RouteRequired scope
POST /v1/payment-intents (standalone)payments.payment_intents.write
PATCH, /confirm, /capture, /cancel under /v1/payment-intents/{id}payments.payment_intents.write
POST /v1/orders/{order_id}/payment-intentscommerce.orders.write
POST /v1/orders/{order_id}/paycommerce.orders.write
POST /v1/orders/{order_id}/payment-intents/{id}/capturecommerce.orders.write
POST /v1/orders/{order_id}/payment-intents/{id}/cancelcommerce.orders.write
POST /v1/orders/{order_id}/payment-attempts/{id}/cancelcommerce.orders.write
GET /v1/orders/{order_id}/payment-attempts and /{id}commerce.orders.read
GET /v1/payment-intents and /{id}payments.payment_intents.read

A key holding only payments.payment_intents.write receives INSUFFICIENT_SCOPE on every order-scoped payment route. The error's scope_requirement and missing_scopes fields name the exact missing authority.

Rate this doc