> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Get AML Monitoring Job

> Poll the status, outcome counters and per-record results of an AML ongoing monitoring job started from the users or businesses endpoint.

export const AgentPromptAccordion = ({prompt, title = "AI Agent Integration Prompt"}) => {
  const [copied, setCopied] = React.useState(false);
  const handleCopy = e => {
    e.stopPropagation();
    if (!prompt) return;
    navigator.clipboard.writeText(prompt.trim()).then(() => {
      setCopied(true);
      setTimeout(() => setCopied(false), 2000);
    });
  };
  const agents = ["Claude Code", "Codex", "Cursor", "Devin", "Windsurf", "GitHub Copilot"];
  return <div className="didit-agent-card">
      {}
      <div className="didit-agent-titlebar">
        <div className="didit-agent-dots" aria-hidden="true">
          <span className="didit-agent-dot didit-agent-dot-red"></span>
          <span className="didit-agent-dot didit-agent-dot-yellow"></span>
          <span className="didit-agent-dot didit-agent-dot-green"></span>
        </div>
        <span className="didit-agent-filename">{title}</span>
        <button type="button" className={`didit-agent-copy ${copied ? "didit-agent-copy-copied" : ""}`} onClick={handleCopy} title="Copy prompt to clipboard" aria-label={copied ? "Copied!" : "Copy prompt to clipboard"}>
          {copied ? <>
              <svg width="13" height="13" viewBox="0 0 16 16" fill="none">
                <path d="M3 8.5l3.5 3.5L13 4" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
              </svg>
              <span>Copied</span>
            </> : <>
              <svg width="13" height="13" viewBox="0 0 16 16" fill="none">
                <rect x="5" y="5" width="9" height="9" rx="1.5" stroke="currentColor" strokeWidth="1.5" />
                <path d="M11 5V3.5A1.5 1.5 0 0 0 9.5 2h-6A1.5 1.5 0 0 0 2 3.5v6A1.5 1.5 0 0 0 3.5 11H5" stroke="currentColor" strokeWidth="1.5" />
              </svg>
              <span>Copy</span>
            </>}
        </button>
      </div>

      {}
      <pre className="didit-agent-body"><code>{prompt.trim()}</code></pre>

      {}
      <div className="didit-agent-footer">
        <span className="didit-agent-footer-label">Paste into</span>
        <div className="didit-agent-chips">
          {agents.map(name => <span key={name} className="didit-agent-chip">{name}</span>)}
        </div>
      </div>
    </div>;
};

<AgentPromptAccordion
  title="Get AML Monitoring Job Prompt"
  prompt={`Goal: Read the status and the per-record results of an AML ongoing monitoring job started with POST /v3/users/aml-monitoring/ or POST /v3/businesses/aml-monitoring/. Needed whenever the toggle call returned 202 (more than 20 profiles); also works for jobs that already completed inline.

Endpoint: GET https://verification.didit.me/v3/aml-monitoring/jobs/{job_id}/
Auth header: x-api-key: <DIDIT_API_KEY>

Path param:
- job_id: the job_id returned by the toggle endpoint.

curl:
curl 'https://verification.didit.me/v3/aml-monitoring/jobs/JOB_ID/' \\
-H 'x-api-key: YOUR_API_KEY'

Response 200:
{
"job_id": "<uuid>",
"status": "PROCESSING",            // PENDING | PROCESSING | COMPLETED | FAILED
"is_enabled": true,
"target_type": "user",             // user | business
"total": 120,
"processed": 40,
"outcomes": {"enabled": 12, "screened_and_enabled": 25, "already_enabled": 3, "disabled": 0, "skipped_no_identity_data": 0, "skipped_blocked": 0, "skipped_sandbox": 0, "failed_provider": 0, "failed_insufficient_balance": 0},
"results": [
{"didit_internal_id": "<uuid>", "vendor_data": "user-123", "outcome": "enabled"},
...one entry per processed profile, in processing order...
],
"error": null,                     // generic message when status is FAILED
"created_at": "<datetime>",
"completed_at": null
}

Polling: request the job every couple of seconds while status is PENDING or PROCESSING. results grows as profiles are processed and is complete once status is COMPLETED. A FAILED job keeps the results recorded before the failure and carries a short generic message in error; re-send the toggle request for the profiles that have no result yet. Per-record results are recorded for jobs started through the API; a job started from the Business Console reports counters only.

Failure modes:
- 401 - missing/invalid x-api-key.
- 404 - no such job for this application (jobs are only visible to the application that created them).

For end-to-end Didit integration, paste in the full prompt at /integration/integration-prompt.`}
/>

## Overview

Returns an AML ongoing monitoring job started from [Toggle AML Monitoring for Users](/management-api/aml-monitoring/toggle-users) or [Toggle AML Monitoring for Businesses](/management-api/aml-monitoring/toggle-businesses): its status, the per-outcome counters and one `results` entry per processed user or business.

Selections of more than 20 profiles run in the background and the toggle call returns `202` with a `PENDING` job. Poll this endpoint every couple of seconds until `status` is `COMPLETED` or `FAILED`. `results` fills in as profiles are processed, in processing order, and is complete once the job is `COMPLETED`. Per-record results are recorded for jobs started through the API; a job started from the Business Console reports counters only.

## Job status

| `status`     | Meaning                                                                                                                                                                                   |
| ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `PENDING`    | Accepted, not started yet.                                                                                                                                                                |
| `PROCESSING` | Running; `processed`, `outcomes` and `results` are updating.                                                                                                                              |
| `COMPLETED`  | Every profile has a result.                                                                                                                                                               |
| `FAILED`     | The job stopped early. `error` carries a short generic message and the results recorded before the failure are kept. Re-send the toggle request for the profiles that have no result yet. |

The per-record `outcome` values are documented on the toggle pages.

## Permissions

Any active API key of the application can call this endpoint. A job is only visible to the application that created it; any other `job_id` returns `404`.

## Related

* [Toggle AML Monitoring for Users](/management-api/aml-monitoring/toggle-users)
* [Toggle AML Monitoring for Businesses](/management-api/aml-monitoring/toggle-businesses)
* [Continuous AML Monitoring](/core-technology/aml-screening/continuous-monitoring-aml-screening)


## OpenAPI

````yaml GET /v3/aml-monitoring/jobs/{job_id}/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: Identity verification API. Authenticate with x-api-key header.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/aml-monitoring/jobs/{job_id}/:
    get:
      tags:
        - AML Ongoing Monitoring
      summary: Get AML ongoing monitoring job
      description: >-
        Status, outcome counters and per-record results of a monitoring toggle
        job started from `POST /v3/users/aml-monitoring/` or `POST
        /v3/businesses/aml-monitoring/`. Poll every couple of seconds while
        `status` is `PENDING` or `PROCESSING`; `results` is complete once it is
        `COMPLETED`.
      operationId: get_aml_monitoring_job
      parameters:
        - name: job_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: The `job_id` returned by the toggle endpoint.
      responses:
        '200':
          description: The job.
          content:
            application/json:
              schema:
                type: object
                properties:
                  job_id:
                    type: string
                    format: uuid
                  status:
                    type: string
                    enum:
                      - PENDING
                      - PROCESSING
                      - COMPLETED
                      - FAILED
                  is_enabled:
                    type: boolean
                    description: >-
                      true when the job enables monitoring, false when it
                      disables it.
                  target_type:
                    type: string
                    enum:
                      - user
                      - business
                    description: Which profile family the job toggles.
                  total:
                    type: integer
                    description: Profiles the job processes.
                  processed:
                    type: integer
                    description: Profiles processed so far.
                  outcomes:
                    type: object
                    description: >-
                      Per-record outcome counters. Every selected profile
                      resolves to exactly one counter; nothing is silently
                      skipped.
                    properties:
                      enabled:
                        type: integer
                        description: Monitoring enabled on an existing AML screening.
                      screened_and_enabled:
                        type: integer
                        description: >-
                          A new AML screening was created (billed) and
                          monitoring enabled on it.
                      already_enabled:
                        type: integer
                        description: >-
                          Monitoring was already active; nothing changed and
                          nothing was billed.
                      disabled:
                        type: integer
                        description: >-
                          Monitoring turned off across every AML screening of
                          the profile.
                      skipped_no_identity_data:
                        type: integer
                        description: >-
                          Skipped: the profile lacks the full name, date of
                          birth and country (users) or a name (businesses)
                          needed to screen.
                      skipped_blocked:
                        type: integer
                        description: 'Skipped: the user is blocked.'
                      skipped_sandbox:
                        type: integer
                        description: 'Skipped: sandbox application, no screening is created.'
                      failed_provider:
                        type: integer
                        description: The screening could not be completed; retry later.
                      failed_insufficient_balance:
                        type: integer
                        description: Balance ran out while the job was running.
                  results:
                    type: array
                    description: >-
                      One entry per processed profile, in processing order.
                      Grows while the job runs; complete once status is
                      COMPLETED. Recorded for jobs started through the API; a
                      job started from the Business Console reports counters
                      only.
                    items:
                      type: object
                      properties:
                        didit_internal_id:
                          type: string
                          format: uuid
                          description: Didit internal id of the profile.
                        vendor_data:
                          type: string
                          nullable: true
                          description: Your own identifier for the profile.
                        outcome:
                          type: string
                          enum:
                            - enabled
                            - screened_and_enabled
                            - already_enabled
                            - disabled
                            - skipped_no_identity_data
                            - skipped_blocked
                            - skipped_sandbox
                            - failed_provider
                            - failed_insufficient_balance
                  error:
                    type: string
                    nullable: true
                    description: >-
                      Generic failure message when status is FAILED; the
                      detailed cause is kept on the platform side.
                  created_at:
                    type: string
                    format: date-time
                  completed_at:
                    type: string
                    format: date-time
                    nullable: true
        '401':
          description: Missing or invalid API key.
        '404':
          description: No such job for this application.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl 'https://verification.didit.me/v3/aml-monitoring/jobs/JOB_ID/'
            \
              -H 'x-api-key: YOUR_API_KEY'
        - lang: python
          label: Python
          source: |-
            import time
            import requests

            url = 'https://verification.didit.me/v3/aml-monitoring/jobs/JOB_ID/'
            while True:
                job = requests.get(url, headers={'x-api-key': 'YOUR_API_KEY'}).json()
                if job['status'] in ('COMPLETED', 'FAILED'):
                    break
                time.sleep(2)
            print(job['outcomes'])
        - lang: javascript
          label: JavaScript
          source: >-
            const url =
            'https://verification.didit.me/v3/aml-monitoring/jobs/JOB_ID/';

            let job;

            do {
              await new Promise((r) => setTimeout(r, 2000));
              job = await (await fetch(url, { headers: { 'x-api-key': process.env.DIDIT_API_KEY } })).json();
            } while (job.status === 'PENDING' || job.status === 'PROCESSING');

            console.log(job.outcomes);
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key

````