Risk controls

Risk controls govern how Flint handles each payment attempt. Merchant-managed rules decide whether an attempt is allowed, blocked, challenged with 3DS, or held for review; lists hold the values rules match against; reviews queue held payments for a manual decision; and fraud warnings record issuer-reported fraud after a payment.

Rules use a strict JSON predicate grammar. Retrieve GET /v1/risk-rules/attributes before authoring rules: risk scoring is not enabled in every environment, and the registry reports which attributes your sandbox or live environment can use. Validate a candidate rule through POST /v1/risk-rules/validate; use POST /v1/risk-rules/evaluate for a side-effect-free match explanation.

Approving a review does not capture the payment; it only makes an unexpired manual authorization eligible for a later capture. Declining one may return 202 Accepted while cancellation or refund work completes: poll the review according to Retry-After or subscribe to the review.closed webhook event. Fraud warnings are distinct from the original risk assessment and can later link to a dispute. A null risk score means scoring was unavailable, not that the score was zero.

Reads require the risk.read scope, review actions require risk.reviews.write, and rule and list mutations require risk.controls.write.

For predicate examples, lifecycle guidance, error handling, and webhook behavior, see the Risk Controls guide.

List early fraud warnings#

GET/v1/fraud-warningsRequires scope: risk.controls.write or risk.read or risk.reviews.write

List early fraud warnings for the authenticated merchant environment.

Query parameters
actionableboolean

Filter by whether a proactive fraudulent refund can still prevent a dispute.

payment_intent_idstring

Filter by Flint payment intent ID.

page_sizeinteger

Page size, default 20, max 100.

page_tokenstring

Cursor returned by the previous list response.

Response · 200
dataarray of objectrequired
metaobject
next_page_tokenstring
request_idstring

Error codes

AUTH_REQUIREDINSUFFICIENT_SCOPEINVALID_REQUESTRATE_LIMIT_EXCEEDEDSERVICE_UNAVAILABLE
Bash
curl https://api.withflintpay.com/v1/fraud-warnings \
  -H "Authorization: Bearer YOUR_API_KEY"

Get an early fraud warning#

GET/v1/fraud-warnings/{fraud_warning_id}Requires scope: risk.controls.write or risk.read or risk.reviews.write

Get an early fraud warning for the authenticated merchant environment.

Path parameters
fraud_warning_idstringrequired

Flint fraud warning ID.

Query parameters
expandarray of enum

Supported expansions: dispute, payment_intent. Expansion requires risk.read plus the read scope for each expanded resource. Limits: at most 10 unique expand paths per request; path depth at most 2. Send repeated expand parameters as the canonical form, for example expand=dispute&expand=payment_intent. Comma-separated values, expand[]=dispute, and numeric expand[0]=dispute are accepted for common client compatibility.

disputepayment_intent
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDDANGLING_EXPANSION_REFERENCEEXPANSION_RESOLUTION_FAILEDINSUFFICIENT_SCOPEINTERNAL_ERRORINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUNDSERVICE_UNAVAILABLE
Bash
curl https://api.withflintpay.com/v1/fraud-warnings/{fraud_warning_id} \
  -H "Authorization: Bearer YOUR_API_KEY"

List payment reviews#

GET/v1/reviewsRequires scope: risk.controls.write or risk.read or risk.reviews.write

List payment reviews for the authenticated merchant environment.

Query parameters
statusarray of enum

Filter by review status. Repeat or comma-separate values.

openresolvingclosed
risk_levelarray of enum

Filter by immutable review risk level. Repeat or comma-separate values.

normalelevatedhighestnot_assessed
payment_flowarray of enum

Filter by immutable payment flow. Repeat or comma-separate values.

checkoutpayment_linkinvoicesubscription_initialsubscription_renewalvirtual_terminalapi
payment_intent_idstring

Filter by Flint payment intent ID.

order_idstring

Filter by Flint order ID.

customer_idstring

Filter by Flint customer ID.

created_afterstring

Filter reviews opened after this RFC3339 timestamp.

page_sizeinteger

Page size, default 20, max 100.

page_tokenstring

Cursor returned by the previous list response.

Response · 200
dataarray of objectrequired
metaobject
next_page_tokenstring
request_idstring

Error codes

AUTH_REQUIREDINSUFFICIENT_SCOPEINVALID_REQUESTRATE_LIMIT_EXCEEDEDSERVICE_UNAVAILABLE
Bash
curl https://api.withflintpay.com/v1/reviews \
  -H "Authorization: Bearer YOUR_API_KEY"

Get a payment review#

GET/v1/reviews/{review_id}Requires scope: risk.controls.write or risk.read or risk.reviews.write

Get a payment review for the authenticated merchant environment.

Path parameters
review_idstringrequired

Flint review ID.

Query parameters
expandarray of enum

Supported expansions: customer, order, payment_intent. Expansion requires risk.read plus the read scope for each expanded resource. Limits: at most 10 unique expand paths per request; path depth at most 2. Send repeated expand parameters as the canonical form, for example expand=customer&expand=order. Comma-separated values, expand[]=customer, and numeric expand[0]=customer are accepted for common client compatibility.

customerorderpayment_intent
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDDANGLING_EXPANSION_REFERENCEEXPANSION_RESOLUTION_FAILEDINSUFFICIENT_SCOPEINTERNAL_ERRORINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUNDSERVICE_UNAVAILABLE
Bash
curl https://api.withflintpay.com/v1/reviews/{review_id} \
  -H "Authorization: Bearer YOUR_API_KEY"

Approve a payment review#

POST/v1/reviews/{review_id}/approveIdempotentRequires scope: risk.reviews.write

Approve a payment review for the authenticated merchant environment.

Path parameters
review_idstringrequired

Flint review ID.

Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDINSUFFICIENT_SCOPEINVALID_REQUESTRATE_LIMIT_EXCEEDEDREQUEST_TIMEOUTRESOURCE_NOT_FOUNDSERVICE_UNAVAILABLE
Bash
curl -X POST https://api.withflintpay.com/v1/reviews/{review_id}/approve \
  -H "Authorization: Bearer YOUR_API_KEY"

Decline a payment review#

POST/v1/reviews/{review_id}/declineIdempotentRequires scope: risk.reviews.write

Decline a payment review for the authenticated merchant environment.

Path parameters
review_idstringrequired

Flint review ID.

Request body
add_to_block_listbooleanrequired
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDINSUFFICIENT_SCOPEINVALID_REQUESTRATE_LIMIT_EXCEEDEDREQUEST_TIMEOUTRESOURCE_NOT_FOUNDSERVICE_UNAVAILABLE
Bash
curl -X POST https://api.withflintpay.com/v1/reviews/{review_id}/decline \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "add_to_block_list": false
  }'

List risk lists#

GET/v1/risk-listsRequires scope: risk.controls.write or risk.read or risk.reviews.write

List risk lists for the authenticated merchant environment.

Query parameters
include_archivedboolean

Include archived resources.

page_sizeinteger

Page size, default 20, max 100.

page_tokenstring

Cursor returned by the previous list response.

Response · 200
dataarray of objectrequired
metaobject
next_page_tokenstring
request_idstring

Error codes

AUTH_REQUIREDINSUFFICIENT_SCOPEINVALID_REQUESTRATE_LIMIT_EXCEEDEDSERVICE_UNAVAILABLE
Bash
curl https://api.withflintpay.com/v1/risk-lists \
  -H "Authorization: Bearer YOUR_API_KEY"

Create a risk list#

POST/v1/risk-listsIdempotentRequires scope: risk.controls.write

Create a risk list for the authenticated merchant environment.

Request body
aliasstringrequired
item_typeenumrequired
card_fingerprintcard_binemailemail_domainip_addresscountrycustomer_idstringcase_sensitive_string
namestringrequired
Response · 201
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDINSUFFICIENT_SCOPEINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUNDRISK_LIST_ALIAS_ALREADY_EXISTSSERVICE_UNAVAILABLE
Bash
curl -X POST https://api.withflintpay.com/v1/risk-lists \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "alias": "",
    "item_type": "card_fingerprint",
    "name": ""
  }'

Get a risk list#

GET/v1/risk-lists/{risk_list_id}Requires scope: risk.controls.write or risk.read or risk.reviews.write

Get a risk list for the authenticated merchant environment.

Path parameters
risk_list_idstringrequired

Flint risk list ID.

Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDINSUFFICIENT_SCOPEINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUNDSERVICE_UNAVAILABLE
Bash
curl https://api.withflintpay.com/v1/risk-lists/{risk_list_id} \
  -H "Authorization: Bearer YOUR_API_KEY"

Update a risk list#

PATCH/v1/risk-lists/{risk_list_id}IdempotentRequires scope: risk.controls.write

Update a risk list for the authenticated merchant environment.

Path parameters
risk_list_idstringrequired

Flint risk list ID.

Request body
namestringrequired
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDINSUFFICIENT_SCOPEINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUNDSERVICE_UNAVAILABLE
Bash
curl -X PATCH https://api.withflintpay.com/v1/risk-lists/{risk_list_id} \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "name": ""
  }'

Archive a risk list#

POST/v1/risk-lists/{risk_list_id}/archiveIdempotentRequires scope: risk.controls.write

Archive a risk list for the authenticated merchant environment.

Path parameters
risk_list_idstringrequired

Flint risk list ID.

Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDINSUFFICIENT_SCOPEINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUNDSERVICE_UNAVAILABLE
Bash
curl -X POST https://api.withflintpay.com/v1/risk-lists/{risk_list_id}/archive \
  -H "Authorization: Bearer YOUR_API_KEY"

List risk list items#

GET/v1/risk-lists/{risk_list_id}/itemsRequires scope: risk.controls.write or risk.read or risk.reviews.write

List risk list items for the authenticated merchant environment.

Path parameters
risk_list_idstringrequired

Flint risk list ID.

Query parameters
page_sizeinteger

Page size, default 20, max 100.

page_tokenstring

Cursor returned by the previous list response.

Response · 200
dataarray of objectrequired
metaobject
next_page_tokenstring
request_idstring

Error codes

AUTH_REQUIREDINSUFFICIENT_SCOPEINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUNDSERVICE_UNAVAILABLE
Bash
curl https://api.withflintpay.com/v1/risk-lists/{risk_list_id}/items \
  -H "Authorization: Bearer YOUR_API_KEY"

Add risk list items#

POST/v1/risk-lists/{risk_list_id}/itemsIdempotentRequires scope: risk.controls.write

Add risk list items for the authenticated merchant environment.

Path parameters
risk_list_idstringrequired

Flint risk list ID.

Request body
option 1object
option 2object
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDINSUFFICIENT_SCOPEINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUNDSERVICE_UNAVAILABLE
Bash
curl -X POST https://api.withflintpay.com/v1/risk-lists/{risk_list_id}/items \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "values": [
      ""
    ]
  }'

Get a risk list item#

GET/v1/risk-lists/{risk_list_id}/items/{risk_list_item_id}Requires scope: risk.controls.write or risk.read or risk.reviews.write

Get a risk list item for the authenticated merchant environment.

Path parameters
risk_list_idstringrequired

Flint risk list ID.

risk_list_item_idstringrequired

Flint risk list item ID.

Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDINSUFFICIENT_SCOPEINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUNDSERVICE_UNAVAILABLE
Bash
curl https://api.withflintpay.com/v1/risk-lists/{risk_list_id}/items/{risk_list_item_id} \
  -H "Authorization: Bearer YOUR_API_KEY"

Delete a risk list item#

DELETE/v1/risk-lists/{risk_list_id}/items/{risk_list_item_id}IdempotentRequires scope: risk.controls.write

Delete a risk list item for the authenticated merchant environment.

Path parameters
risk_list_idstringrequired

Flint risk list ID.

risk_list_item_idstringrequired

Flint risk list item ID.

Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDINSUFFICIENT_SCOPEINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUNDSERVICE_UNAVAILABLE
Bash
curl -X DELETE https://api.withflintpay.com/v1/risk-lists/{risk_list_id}/items/{risk_list_item_id} \
  -H "Authorization: Bearer YOUR_API_KEY"

List risk rules#

GET/v1/risk-rulesRequires scope: risk.controls.write or risk.read or risk.reviews.write

List risk rules for the authenticated merchant environment.

Query parameters
include_archivedboolean

Include archived resources.

page_sizeinteger

Page size, default 20, max 100.

page_tokenstring

Cursor returned by the previous list response.

Response · 200
dataarray of objectrequired
metaobject
next_page_tokenstring
request_idstring

Error codes

AUTH_REQUIREDINSUFFICIENT_SCOPEINVALID_REQUESTRATE_LIMIT_EXCEEDEDSERVICE_UNAVAILABLE
Bash
curl https://api.withflintpay.com/v1/risk-rules \
  -H "Authorization: Bearer YOUR_API_KEY"

Create a risk rule#

POST/v1/risk-rulesIdempotentRequires scope: risk.controls.write

Create a risk rule for the authenticated merchant environment.

Request body
actionenumrequired
allowblockreviewrequire_3ds
descriptionstringrequired
enabledbooleanrequired
predicateone ofrequired
Response · 201
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDINSUFFICIENT_SCOPEINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUNDSERVICE_UNAVAILABLE
Bash
curl -X POST https://api.withflintpay.com/v1/risk-rules \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "action": "allow",
    "description": "",
    "enabled": false,
    "predicate": {}
  }'

Get a risk rule#

GET/v1/risk-rules/{risk_rule_id}Requires scope: risk.controls.write or risk.read or risk.reviews.write

Get a risk rule for the authenticated merchant environment.

Path parameters
risk_rule_idstringrequired

Flint risk rule ID.

Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDINSUFFICIENT_SCOPEINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUNDSERVICE_UNAVAILABLE
Bash
curl https://api.withflintpay.com/v1/risk-rules/{risk_rule_id} \
  -H "Authorization: Bearer YOUR_API_KEY"

Update a risk rule#

PATCH/v1/risk-rules/{risk_rule_id}IdempotentRequires scope: risk.controls.write

Update a risk rule for the authenticated merchant environment.

Path parameters
risk_rule_idstringrequired

Flint risk rule ID.

Request body
actionenum
allowblockreviewrequire_3ds
descriptionstring
enabledboolean
predicateone of
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDINSUFFICIENT_SCOPEINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUNDSERVICE_UNAVAILABLE
Bash
curl -X PATCH https://api.withflintpay.com/v1/risk-rules/{risk_rule_id} \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "action": "allow",
    "description": "",
    "enabled": false,
    "predicate": {}
  }'

Archive a risk rule#

POST/v1/risk-rules/{risk_rule_id}/archiveIdempotentRequires scope: risk.controls.write

Archive a risk rule for the authenticated merchant environment.

Path parameters
risk_rule_idstringrequired

Flint risk rule ID.

Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDINSUFFICIENT_SCOPEINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUNDSERVICE_UNAVAILABLE
Bash
curl -X POST https://api.withflintpay.com/v1/risk-rules/{risk_rule_id}/archive \
  -H "Authorization: Bearer YOUR_API_KEY"

List risk rule versions#

GET/v1/risk-rules/{risk_rule_id}/versionsRequires scope: risk.controls.write or risk.read or risk.reviews.write

List risk rule versions for the authenticated merchant environment.

Path parameters
risk_rule_idstringrequired

Flint risk rule ID.

Query parameters
page_sizeinteger

Page size, default 20, max 100.

page_tokenstring

Cursor returned by the previous list response.

Response · 200
dataarray of objectrequired
metaobject
next_page_tokenstring
request_idstring

Error codes

AUTH_REQUIREDINSUFFICIENT_SCOPEINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUNDSERVICE_UNAVAILABLE
Bash
curl https://api.withflintpay.com/v1/risk-rules/{risk_rule_id}/versions \
  -H "Authorization: Bearer YOUR_API_KEY"

Get the risk rule attribute registry#

GET/v1/risk-rules/attributesRequires scope: risk.controls.write or risk.read or risk.reviews.write

Get the risk rule attribute registry for the authenticated merchant environment.

Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDINSUFFICIENT_SCOPEINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUNDSERVICE_UNAVAILABLE
Bash
curl https://api.withflintpay.com/v1/risk-rules/attributes \
  -H "Authorization: Bearer YOUR_API_KEY"

Evaluate a risk rule#

POST/v1/risk-rules/evaluateRequires scope: risk.controls.write

Evaluate a risk rule for the authenticated merchant environment.

Request body
option 1object
option 2object
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDINSUFFICIENT_SCOPEINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUNDSERVICE_UNAVAILABLE
Bash
curl -X POST https://api.withflintpay.com/v1/risk-rules/evaluate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "attributes": {}
  }'

Validate a risk rule#

POST/v1/risk-rules/validateRequires scope: risk.controls.write

Validate a risk rule for the authenticated merchant environment.

Request body
option 1object
option 2object
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDINSUFFICIENT_SCOPEINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUNDSERVICE_UNAVAILABLE
Bash
curl -X POST https://api.withflintpay.com/v1/risk-rules/validate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "action": "allow",
    "predicate": {},
    "risk_rule_id": ""
  }'
Rate this doc