Skip to content

List risk reviews

The risk.reviews.list operation: GET /api/v1/risk/reviews in the REST API and the risk_reviews_list tool in the MCP server.

GET/api/v1/risk/reviews

The brand's risk review queue in the mode of the request, newest first: payments the risk rules held. A held payment went through and is invoiced; the customer's wallet that took its credits is frozen until someone approves it (risk.reviews.approve) or refunds it and blocks the customer (risk.reviews.reject). Each review is the payment's risk evaluation: the decision, the score and every reason.

status is pending by default; approved and rejected list the decided ones. Paginate with limit (1–100, default 10) and starting_after.

At a glance

  • REST: GET /api/v1/risk/reviews
  • MCP tool: risk_reviews_list
  • Operation ID: risk.reviews.list
  • Scope: Brand
  • Permission: customers:read
  • Risk tier: read
  • Dry run: Not supported
  • Idempotency: Not needed (read only)
  • Modes: Test and live
  • Pagination: limit (at most 100) and starting_after
  • Authentication: API key with the customers:read scope
  • Since: M9

Request

Query parameters

FieldTypeRequiredDescription
statusone of pending, approved, rejectedNoDefault pending: the queue.
customerIdcus_… IDNoReviews of one customer (cus_…).
limitinteger (1 to 100)No
starting_afterrsk_… IDNoThe next_cursor of the previous page.

Response

200 OK with a JSON object, a page of the list (newest first):

FieldTypeDescription
object"list"
dataarray of object
data[].idrsk_… ID
data[].object"risk_evaluation"
data[].livemodeboolean
data[].brandIdbrd_… ID
data[].subjectobject
data[].subject.typeone of checkout_session, auto_reload
data[].subject.checkoutSessionIdcs_… ID or null
data[].subject.walletIdwal_… ID or null
data[].customerIdcus_… ID or null
data[].paymentIdpay_… ID or null
data[].stageone of intent, payment_method, confirm, off_session
data[].decisionone of allow, require_3ds, review, block
data[].scoreinteger
data[].reasonsarray of object
data[].reasons[].codeone of 21 values, e.g. customer_blocked, customer_elevated, blocklist_email (all in the OpenAPI document)
data[].reasons[].actionone of block, review, require_3ds, score
data[].reasons[].pointsinteger or null
data[].reasons[].detailstring
data[].signalsobject
data[].signals.emailDomainstring or null
data[].signals.ipNetworkstring or null
data[].signals.ipCountrystring or null
data[].signals.billingCountrystring or null
data[].signals.cardCountrystring or null
data[].signals.cardFingerprintstring or null
data[].signals.amountmoney or null
data[].signals.topupboolean
data[].signals.newCustomerboolean
data[].signals.firstPaymentboolean
data[].signals.disposableEmailboolean
data[].historyarray of object
data[].history[].atdate-time
data[].history[].stageone of intent, payment_method, confirm, off_session
data[].history[].decisionone of allow, require_3ds, review, block
data[].history[].scoreinteger
data[].reviewobject or null
data[].createdAtdate-time
data[].updatedAtdate-time
has_moreboolean
next_cursorrsk_… ID or null

Examples

The queue

HTTP
GET /api/v1/risk/reviews
Authorization: Bearer or_test_…

Response (200):

JSON
{
  "object": "list",
  "data": [
    {
      "id": "rsk_01m4ttwd3veh9apbewxheq5xr1",
      "object": "risk_evaluation",
      "livemode": true,
      "brandId": "brd_01m4ttwd3veh9apbewxheq5xh5",
      "subject": {
        "type": "checkout_session",
        "checkoutSessionId": "cs_01m4ttwd3veh9apbewxheq5xr4",
        "walletId": null
      },
      "customerId": "cus_01m4ttwd3veh9apbewxheq5xr5",
      "paymentId": "pay_01m4ttwd3veh9apbewxheq5xr6",
      "stage": "confirm",
      "decision": "review",
      "score": 70,
      "reasons": [
        {
          "code": "first_payment",
          "action": "require_3ds",
          "points": null,
          "detail": "The customer's first payment."
        },
        {
          "code": "new_customer",
          "action": "score",
          "points": 10,
          "detail": "A new customer."
        },
        {
          "code": "country_mismatch_ip_billing",
          "action": "score",
          "points": 20,
          "detail": "IP country DE isn't the billing country HR."
        },
        {
          "code": "country_mismatch_card_billing",
          "action": "score",
          "points": 25,
          "detail": "Card country US isn't the billing country HR."
        },
        {
          "code": "country_mismatch_ip_card",
          "action": "score",
          "points": 15,
          "detail": "IP country DE isn't the card country US."
        },
        {
          "code": "score_review",
          "action": "review",
          "points": null,
          "detail": "Score 70 ≥ 70."
        }
      ],
      "signals": {
        "emailDomain": "corp.example",
        "ipNetwork": "203.0.113.0",
        "ipCountry": "DE",
        "billingCountry": "HR",
        "cardCountry": "US",
        "cardFingerprint": "Xo1abC9dEf2GhI3j",
        "amount": {
          "amount": "90000000",
          "currency": "EUR"
        },
        "topup": true,
        "newCustomer": true,
        "firstPayment": true,
        "disposableEmail": false
      },
      "history": [
        {
          "at": "2026-10-20T09:00:00.000Z",
          "stage": "intent",
          "decision": "require_3ds",
          "score": 30
        },
        {
          "at": "2026-10-20T09:01:00.000Z",
          "stage": "payment_method",
          "decision": "review",
          "score": 70
        },
        {
          "at": "2026-10-20T09:01:30.000Z",
          "stage": "confirm",
          "decision": "review",
          "score": 70
        }
      ],
      "review": {
        "status": "pending",
        "openedAt": "2026-10-20T09:02:00.000Z",
        "decidedAt": null,
        "decidedBy": null,
        "note": null,
        "refundId": null,
        "blocklistEntryIds": [],
        "frozenWalletIds": ["wal_01m4ttwd3veh9apbewxheq5xr7"]
      },
      "createdAt": "2026-10-20T09:00:00.000Z",
      "updatedAt": "2026-10-20T09:02:00.000Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Errors

CodeHTTP statusWhenWhat to do
validation_failed400A filter or pagination value is invalid.Fix the fields listed in details.issues and send the request again.
permission_denied403You can't see this brand's customers.Ask an organization owner or admin for a role or scope that allows this action.

It can also return these common errors: api_version_unsupported, authentication_required, api_key_invalid, scope_required, resource_not_found, dry_run_not_supported, rate_limited, internal_error.