Approve applicant action

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…

Overview

Use this method to approve an applicant action.

In effect, the action status is updated in the Dashboard to Approved, and the API response reflects the following state changes:

  • reviewStatus: "completed"
  • reviewResult.reviewAnswer: "GREEN"

You can optionally attach a moderation note and/or tags to the decision.

📘

Warning

This endpoint can temporarily reject the status change with a 409 Conflict error, a message asking to retry, and a header indicating the time after which you can retry — for example, Retry-After: 10 (seconds). This can happen when an action is set to pending and then almost immediately moved to a final status via the API (for example, approved right after pending) — the request may arrive while internal processing is still running.

To handle this:

  • Retry 409 responses instead of treating them as permanent failures. If the response includes a Retry-After header, wait for the interval it specifies; otherwise, fall back to a short fixed delay (for example, 10–15 seconds).
  • Avoid calling approve/reject immediately after moving an action to pending — wait for processing to finish, or be ready to retry on conflict.
⚠️

Attention

Notes and tags are optional, but if omitted, you must include an empty request body -d '{}'; otherwise, a 400 error is returned. See the request examples for details.

Request examples

// This example demonstrates how to send a request with all parameters provided.

curl -X POST \
      'https://api.sumsub.com/resources/api/applicantActions/663b388x3f882642c48f43af0/-/approve' \
      -H 'content-type: application/json' \
      -H 'X-App-Token: <your-app-token>' \
      -H 'X-App-Access-Sig: <your-signature>' \
      -H 'X-App-Access-Ts: <unix-timestamp>' \
      -d '{
            "note": "Example note",
            "tags": [
              "first-tag",
              "second-tag"
            ]
          }'
// This example demonstrates how to send a request without body parameters.

curl -X POST \
      'https://api.sumsub.com/resources/api/applicantActions/663b388x3f882642c48f43af0/-/approve' \
      -H 'content-type: application/json' \
      -H 'X-App-Token: <your-app-token>' \
      -H 'X-App-Access-Sig: <your-signature>' \
      -H 'X-App-Access-Ts: <unix-timestamp>' \
      -d '{}'

Response explained

If the request is sent and processed successfully, you will receive a JSON response representing the applicant action with augmented and structured information.

You can see the response structure, possible content with descriptions, and examples of response on the following page.

Response examples

If the request is successfully sent and processed, you will get a response like the following:

{
  "id": "action_id",
  "createdAt": "2026-05-11 16:15:26",
  "clientId": "your_client_id",
  "externalActionId": "external_action_id",
  "applicantId": "applicantid",
  "type": "paymentMethod",
  "review": {
    "reviewId": "ACHhX",
    "attemptId": "RKmOR",
    "attemptCnt": 7,
    "elapsedSincePendingMs": 62659111,
    "elapsedSinceQueuedMs": 62659111,
    "levelName": "level-name",
    "createDate": "2026-05-11 16:16:07+0000",
    "reviewResult": {
      "reviewAnswer": "GREEN"
    },
    "reviewStatus": "completed"
  },
  "checks": [
    {
      "answer": "GREEN",
      "checkType": "FACE_LIVELINESS",
      "createdAt": "2026-05-11 16:16:05",
      "id": "c7ec345c-2b1b-4a102-92c7-2948f6bb036x",
      "livenessInfo": {
        "livenessData": {
          "sessionId": "6a02100aea08c370e306885fb",
          "images": [
            {
              "imageId": 6421667767
            },
            {
              "imageId": 5161501155
            },
            {
              "imageId": 1851233152
            },
            {
              "imageId": 13710045736
            }
          ]
        },
        "livenessResult": {
          "answer": "GREEN"
        }
      },
      "imageIds": [
        3681236159
      ]
    },
    {
      "answer": "GREEN",
      "checkType": "AUTO_CHECK",
      "createdAt": "2026-05-11 16:16:07",
      "id": "daa654de-a264-4dvcb-b3ec-b32f02a896f0",
      "attemptId": "jQzQz"
    }
  ],
  "requiredIdDocs": {
    "docSets": [
      {
        "idDocSetType": "SELFIE",
        "types": [
          "SELFIE"
        ],
        "videoRequired": "passiveLiveness",
        "selfieProcessingSettings": {
          "skipFaceMatchCheck": true
        }
      }
    ]
  },
  "agreement": {
    "items": [
      {
        "id": "b5bx0a281-6a2a-42198-b13d-c5b12f5739c8",
        "acceptedAt": "2026-05-11 16:15:34",
        "source": "WebSDK"
      }
    ],
    "createdAt": "2026-05-11 16:15:34",
    "acceptedAt": "2026-05-11 16:15:34",
    "source": "WebSDK"
  },
  "images": [
    {
      "id": "6a0200c5a0c8cv370e30688616",
      "addedDate": "2026-05-11 16:16:05",
      "imageHash": "57176e6a8bb8077v926d61cd5ef12cv0da0617a4b57",
      "imageFileName": "liveness_selfie.jpg",
      "resizedImageId": 32018776771,
      "mimeType": "jpeg",
      "imageId": 36821736159,
      "actualResolution": {
        "width": 1920,
        "height": 1080
      },
      "answer": "YELLOW",
      "comments": null,
      "idDocDef": {
        "country": "ATA",
        "idDocType": "SELFIE"
      }
    }
  ],
  "applicantType": "individual",
  "tags": [
    "test",
    "high-risk"
  ],
  "reviewResult": {
    "reviewAnswer": "GREEN"
  }
}

If the request fails, you will receive an HTTP response containing an error code along with a message explaining the error. For example:

{
  "code": 400,
  "description": "Human-readable description",
  "correlationId": "0d3457fdac54803edf23c90000000000"
}
Path Params
string
required

Unique applicant action identifier in the Sumsub system.

You can get this identifier in response to action submission or by calling this method.

Body Params
string

Optional note text providing additional context for the applicant action.

tags
array of strings

Custom tags that you may want to assign to the applicant action. Each string represents a standalone tag.

⚠️ Tag names are case sensitive.

tags
json
enum

⚠️ If both note and tags are omitted, you must include an empty request body (-d '{}'); otherwise, a 400 error is returned.

Allowed:
Response
200
Language
Credentials
Header
LoadingLoading…
Response
Click Try It! to start a request and see the response here!