sancticheck.comClient application
Developer documentation · API v1

Client Integration API

Connect your systems to company users, portfolio records, sanctions and PEP lookup.

This reference includes only endpoints available with a client API key. Each key acts as an administrator for its assigned company. The documentation and downloads are generated from the deployed API.

Production: https://api.sancticheck.com
Local development: http://localhost:8000

Integration packages

Postman environments: Production · Local

Import the collection and an environment, select the environment and set api_key privately. Fill resource IDs from list responses. Optional filters are disabled initially. Run individual requests, since write requests change data. Download fresh packages after API upgrades.

Authenticate with a named API key

  1. A client administrator or staff member opens a company and selects API keys → Create API key.
  2. Give the key a descriptive name, such as “ERP integration”. Copy the secret when shown and store it securely. It cannot be retrieved again.
  3. Send Authorization: Bearer <api_key> on every request.

Key requests do not require login cookies, a CSRF token or an Origin header. Keys can manage users and portfolios only within their company. They cannot grant staff access or create other keys. API-key actions in company activity show the key name.

Keep keys on your server, outside browser bundles, URLs and AI prompts. Give your AI assistant the OpenAPI file or Markdown guide and an environment-variable name instead.

Keys stop working when revoked, expired or when the company is inactive. They are independent of the creator’s login session. Manage or revoke keys from the company’s API keys tab.

First request

Set SANCTICHECK_API_KEY privately in your environment. Retrieve your company ID:

curl --fail-with-body https://api.sancticheck.com/api/v1/clients \
  -H "Authorization: Bearer $SANCTICHECK_API_KEY"

Search sanctions names and identifying information:

curl --fail-with-body --get https://api.sancticheck.com/api/v1/sanctions/search \
  -H "Authorization: Bearer $SANCTICHECK_API_KEY" \
  --data-urlencode 'q=abu hud'

The integration guide includes Python and server-side JavaScript examples.

Data conventions and errors

Search results include classifications: SANCTIONS, PEP, CRIME, NARCOTICS or TERRORISM. Filter with classification=PEP. Wikidata supplies PEP information only. Political exposure does not establish wrongdoing or a sanctions designation. Review the public role, dates and source evidence.

Use JSON request bodies and UUID resource IDs. Paginated lists return items, total, page and page_size. Pages start at 1; page size defaults to 20, maximum 100.

Sanctions lookup requires at least 3 letters or numbers and returns at most 10 results. Every whole word must occur, in any order. Punctuation and text edges count as word boundaries; partial names do not match. If has_more is true, narrow the query. This lookup does not perform automated screening or produce a sanctions decision.

Record dates accept DAY, MONTH, YEAR or RANGE precision. Use ISO date strings; ranges require end_value. Read records before editing: record PATCH requests replace collections with defaults when fields are omitted. Set group_id to null to move a record to Unassigned.

StatusMeaning
400 / 422Invalid input or failed validation. Read the detail field.
401Missing, invalid, expired or revoked API key.
403 / 404Access denied, inactive company, or resource unavailable within this company.
409Conflict, duplicate name, protected administrator or required deletion confirmation.
429Invitation rate limit reached. Wait up to 15 minutes before retrying.
5xxTemporary service failure. Retry reads with bounded backoff; verify state before retrying writes.

Domain errors use {"detail":"message"}; validation errors use a list of loc, msg and type objects. Responses normally include X-Request-ID for support. Writes do not support idempotency keys.

Structured report enrichment

Screening record details include revision-linked background facts, locations, roles, relationships and country context. Each completed result includes retrieval dates and source references. Check enrichment.status and enrichment.outdated before using the information. Background facts do not alter provider evidence or classifications. Maps, flags and presentation belong to the report generator.

The integration guide describes the data fields, identity review and refresh rules.

Endpoint reference

32 operations. All require the client API key.

GET /api/v1/clients/{client_id}/screening/settings

Read platform default, nullable company override and effective threshold (1 to 5 stars).

Parameters

NameLocationRequiredSchema
client_idpathYes{"format": "uuid", "title": "Client Id", "type": "string"}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/CompanySettingsOut"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
PATCH /api/v1/clients/{client_id}/screening/settings

Set company threshold to 1 through 5, or null to inherit the platform default. Queues screening; preserves existing reviews until evidence or customer identity changes.

Parameters

NameLocationRequiredSchema
client_idpathYes{"format": "uuid", "title": "Client Id", "type": "string"}

Request body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/CompanyThreshold"
      }
    }
  },
  "required": true
}

Example body

{}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/CompanySettingsOut"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
PATCH /api/v1/clients/{client_id}/groups/{group_id}/screening-threshold

Set screening_threshold to 1 through 5 or null to inherit the company default. Also supported for Unassigned.

Parameters

NameLocationRequiredSchema
client_idpathYes{"format": "uuid", "title": "Client Id", "type": "string"}
group_idpathYes{"format": "uuid", "title": "Group Id", "type": "string"}

Request body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/GroupThreshold"
      }
    }
  },
  "required": true
}

Example body

{}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/GroupOut"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
GET /api/v1/clients/{client_id}/screening/dashboard

Paginated portfolio screening status, counts, latest record check and next scheduled check. Includes failed checks awaiting retry; last_scan_at is latest record activity, not completion of a whole-company cycle.

Parameters

NameLocationRequiredSchema
client_idpathYes{"format": "uuid", "title": "Client Id", "type": "string"}
pagequeryNo{"default": 1, "minimum": 1, "title": "Page", "type": "integer"}
page_sizequeryNo{"default": 20, "maximum": 100, "minimum": 1, "title": "Page Size", "type": "integer"}
qqueryNo{"default": "", "maxLength": 200, "title": "Q", "type": "string"}
statusqueryNo{"anyOf": [{"enum": ["ACTION_REQUIRED", "CONFIRMED", "NO_OUTSTANDING", "PENDING"], "type": "string"}, {"type": "null"}], "title": "Status"}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/DashboardOut"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
GET /api/v1/clients/{client_id}/screening/records/{record_id}

Read current candidates, preserved evidence and recent meaningful history. This view is audited separately and does not create a screening-history entry.

Parameters

NameLocationRequiredSchema
client_idpathYes{"format": "uuid", "title": "Client Id", "type": "string"}
record_idpathYes{"format": "uuid", "title": "Record Id", "type": "string"}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/DetailOut"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
GET /api/v1/clients/{client_id}/screening/records/{record_id}/history

Paginate immutable screening changes and review decisions for reporting. Routine views and unchanged daily checks are excluded; latest scan timestamps remain available on the screening record.

Parameters

NameLocationRequiredSchema
client_idpathYes{"format": "uuid", "title": "Client Id", "type": "string"}
record_idpathYes{"format": "uuid", "title": "Record Id", "type": "string"}
pagequeryNo{"default": 1, "minimum": 1, "title": "Page", "type": "integer"}
page_sizequeryNo{"default": 20, "maximum": 100, "minimum": 1, "title": "Page Size", "type": "integer"}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/Page_EventOut_"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
POST /api/v1/clients/{client_id}/screening/matches/{match_id}/review

Save FALSE_POSITIVE, CONFIRMED or NEEDS_REVIEW with notes. Copy version from the latest match detail response; stale versions return 409 and must be refreshed before deciding.

Parameters

NameLocationRequiredSchema
client_idpathYes{"format": "uuid", "title": "Client Id", "type": "string"}
match_idpathYes{"format": "uuid", "title": "Match Id", "type": "string"}

Request body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/app__domain__screening__schemas__Review"
      }
    }
  },
  "required": true
}

Example body

{
  "decision": "FALSE_POSITIVE",
  "version": "Example name"
}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/Message"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
GET /api/v1/clients/{client_id}/groups/linked-companies

List active companies in this client portfolio for the optional linked_to_id field. Supports q and pagination.

Parameters

NameLocationRequiredSchema
client_idpathYes{"format": "uuid", "title": "Client Id", "type": "string"}
qqueryNo{"default": "", "maxLength": 200, "title": "Q", "type": "string"}
pagequeryNo{"default": 1, "minimum": 1, "title": "Page", "type": "integer"}
page_sizequeryNo{"default": 100, "maximum": 100, "minimum": 1, "title": "Page Size", "type": "integer"}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/Page_RecordOut_"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
GET /api/v1/clients

List the company assigned to this API key. Supports q, page and page_size.

Parameters

NameLocationRequiredSchema
qqueryNo{"default": "", "maxLength": 200, "title": "Q", "type": "string"}
pagequeryNo{"default": 1, "minimum": 1, "title": "Page", "type": "integer"}
page_sizequeryNo{"default": 20, "maximum": 100, "minimum": 1, "title": "Page Size", "type": "integer"}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/Page_ClientOut_"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
GET /api/v1/clients/{client_id}

Read the assigned company.

Parameters

NameLocationRequiredSchema
client_idpathYes{"format": "uuid", "title": "Client Id", "type": "string"}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/ClientOut"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
GET /api/v1/clients/{client_id}/audit

Read company activity. API-key actions include the key name.

Parameters

NameLocationRequiredSchema
client_idpathYes{"format": "uuid", "title": "Client Id", "type": "string"}
pagequeryNo{"default": 1, "minimum": 1, "title": "Page", "type": "integer"}
page_sizequeryNo{"default": 20, "maximum": 100, "minimum": 1, "title": "Page Size", "type": "integer"}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/Page_AuditOut_"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
GET /api/v1/users

List users in the assigned company. Staff users are excluded.

Parameters

NameLocationRequiredSchema
client_idqueryNo{"anyOf": [{"format": "uuid", "type": "string"}, {"type": "null"}], "title": "Client Id"}
qqueryNo{"default": "", "maxLength": 200, "title": "Q", "type": "string"}
pagequeryNo{"default": 1, "minimum": 1, "title": "Page", "type": "integer"}
page_sizequeryNo{"default": 20, "maximum": 100, "minimum": 1, "title": "Page Size", "type": "integer"}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/Page_UserOut_"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
POST /api/v1/users/invite

Invite a user or client administrator to the assigned company. Email is queued; invitations expire after 48 hours. Staff access cannot be granted.

Request body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Invite"
      }
    }
  },
  "required": true
}

Example body

{
  "client_id": "{{client_id}}",
  "email": "{{invite_email}}",
  "is_staff": false,
  "role": "USER"
}

Responses

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/UserOut"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  },
  "429": {
    "description": "Too many attempts. Wait up to 15 minutes before retrying."
  }
}
PATCH /api/v1/users/{user_id}

Update a company user. Omit unchanged fields. Staff access cannot be granted and the last active client administrator is protected.

Parameters

NameLocationRequiredSchema
user_idpathYes{"format": "uuid", "title": "User Id", "type": "string"}

Request body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/UserUpdate"
      }
    }
  },
  "required": true
}

Example body

{
  "name": "Updated name"
}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/UserOut"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
POST /api/v1/users/{user_id}/resend-invitation

Replace an unaccepted invitation and queue a new email. The previous link becomes invalid.

Parameters

NameLocationRequiredSchema
user_idpathYes{"format": "uuid", "title": "User Id", "type": "string"}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/Message"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  },
  "429": {
    "description": "Too many attempts. Wait up to 15 minutes before retrying."
  }
}
GET /api/v1/clients/{client_id}/groups

List company groups with record_count counting all active records, including linked descendants. Unassigned appears first; remaining groups are ordered by name.

Parameters

NameLocationRequiredSchema
client_idpathYes{"format": "uuid", "title": "Client Id", "type": "string"}
qqueryNo{"default": "", "maxLength": 200, "title": "Q", "type": "string"}
pagequeryNo{"default": 1, "minimum": 1, "title": "Page", "type": "integer"}
page_sizequeryNo{"default": 20, "maximum": 100, "minimum": 1, "title": "Page Size", "type": "integer"}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/Page_GroupOut_"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
POST /api/v1/clients/{client_id}/groups

Create a group. Names are trimmed and must be unique within the company, ignoring case.

Parameters

NameLocationRequiredSchema
client_idpathYes{"format": "uuid", "title": "Client Id", "type": "string"}

Request body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/GroupInput"
      }
    }
  },
  "required": true
}

Example body

{
  "name": "Example name"
}

Responses

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/GroupOut"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
GET /api/v1/clients/{client_id}/groups/{group_id}

Read a company group.

Parameters

NameLocationRequiredSchema
client_idpathYes{"format": "uuid", "title": "Client Id", "type": "string"}
group_idpathYes{"format": "uuid", "title": "Group Id", "type": "string"}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/GroupOut"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
PATCH /api/v1/clients/{client_id}/groups/{group_id}

Replace group name and description. The Unassigned group cannot be changed.

Parameters

NameLocationRequiredSchema
client_idpathYes{"format": "uuid", "title": "Client Id", "type": "string"}
group_idpathYes{"format": "uuid", "title": "Group Id", "type": "string"}

Request body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/GroupInput"
      }
    }
  },
  "required": true
}

Example body

{
  "name": "Example name"
}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/GroupOut"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
DELETE /api/v1/clients/{client_id}/groups/{group_id}

Archive a group and move its active records to Unassigned. Nonempty groups require confirm=true. Unassigned cannot be deleted.

Parameters

NameLocationRequiredSchema
client_idpathYes{"format": "uuid", "title": "Client Id", "type": "string"}
group_idpathYes{"format": "uuid", "title": "Group Id", "type": "string"}
confirmqueryNo{"default": false, "title": "Confirm", "type": "boolean"}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/Message"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
GET /api/v1/clients/{client_id}/groups/{group_id}/records

List active portfolio records in a group. Set hierarchy=true to keep linked records beneath their company, paginating whole families. depth and linked_to_name describe the displayed hierarchy.

Parameters

NameLocationRequiredSchema
client_idpathYes{"format": "uuid", "title": "Client Id", "type": "string"}
group_idpathYes{"format": "uuid", "title": "Group Id", "type": "string"}
qqueryNo{"default": "", "maxLength": 200, "title": "Q", "type": "string"}
pagequeryNo{"default": 1, "minimum": 1, "title": "Page", "type": "integer"}
page_sizequeryNo{"default": 20, "maximum": 100, "minimum": 1, "title": "Page Size", "type": "integer"}
hierarchyqueryNo{"default": false, "title": "Hierarchy", "type": "boolean"}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/Page_RecordOut_"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
POST /api/v1/clients/{client_id}/groups/{group_id}/records

Create a portfolio record using a generic name and typed identifying information. Optional linked_to_id must reference an active organisation in the same client; relationship_role describes the link. Cycles are rejected.

Parameters

NameLocationRequiredSchema
client_idpathYes{"format": "uuid", "title": "Client Id", "type": "string"}
group_idpathYes{"format": "uuid", "title": "Group Id", "type": "string"}

Request body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/RecordInput"
      }
    }
  },
  "required": true
}

Example body

{
  "name": "Example name"
}

Responses

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/RecordOut"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
GET /api/v1/clients/{client_id}/groups/{group_id}/records/{record_id}

Read an active portfolio record.

Parameters

NameLocationRequiredSchema
client_idpathYes{"format": "uuid", "title": "Client Id", "type": "string"}
group_idpathYes{"format": "uuid", "title": "Group Id", "type": "string"}
record_idpathYes{"format": "uuid", "title": "Record Id", "type": "string"}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/RecordOut"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
PATCH /api/v1/clients/{client_id}/groups/{group_id}/records/{record_id}

Replace record fields. Supply group_id to move within the same company; null moves to Unassigned, omission keeps the current group. Omitted collection fields reset to their schema defaults.

Parameters

NameLocationRequiredSchema
client_idpathYes{"format": "uuid", "title": "Client Id", "type": "string"}
group_idpathYes{"format": "uuid", "title": "Group Id", "type": "string"}
record_idpathYes{"format": "uuid", "title": "Record Id", "type": "string"}

Request body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/RecordUpdate"
      }
    }
  },
  "required": true
}

Example body

{
  "name": "Example name"
}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/RecordOut"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
DELETE /api/v1/clients/{client_id}/groups/{group_id}/records/{record_id}

Archive a portfolio record while preserving its history.

Parameters

NameLocationRequiredSchema
client_idpathYes{"format": "uuid", "title": "Client Id", "type": "string"}
group_idpathYes{"format": "uuid", "title": "Group Id", "type": "string"}
record_idpathYes{"format": "uuid", "title": "Record Id", "type": "string"}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/Message"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
GET /api/v1/sanctions/search

Search active full names and aliases using PostgreSQL trigram candidates and the same confidence rules as daily screening. At least 3 letters or numbers, or 2 East Asian characters; at most 10 consolidated profiles. Best full-name similarity ranks first, with primary-name agreement breaking ties. Configured company suffixes are ignored for organisations. Initials, surname-only matches and conflicting generation suffixes are capped below 4 stars. Ratings: 5 for scores at least 97 with exact meaningful-token agreement, 4 at least 90, 3 at least 60, 2 at least 40, otherwise 1. matched_name identifies the source name or alias used. Repeated aliases do not boost confidence. sources lists conservatively linked providers; has_more indicates further candidates. classifications optionally filters candidates.

Parameters

NameLocationRequiredSchema
exactqueryNo{"default": false, "title": "Exact", "type": "boolean"}
classificationqueryNo{"anyOf": [{"enum": ["SANCTIONS", "PEP", "CRIME", "NARCOTICS", "TERRORISM", "MONEY_LAUNDERING", "TERRORIST_FINANCING", "PROLIFERATION", "CORRUPTION", "FRAUD", "ORGANISED_CRIME", "HUMAN_TRAFFICKING", "HUMAN_RIGHTS_ABUSES", "CYBERCRIME", "ARMS_TRAFFICKING", "SANCTIONS_EVASION", "REGULATORY_ACTION", "DEBARMENT", "SANCTIONS_LINKED", "SANCTIONS_CONTROL", "COUNTER_SANCTIONS", "RCA", "WANTED", "PERSON_OF_INTEREST", "REGULATORY_WARNING", "EXPORT_CONTROL", "EXPORT_CONTROL_LINKED", "TRADE_RISK", "INVESTMENT_RISK", "INVESTMENT_BAN", "DISQUALIFIED", "FINANCIAL_CRIME", "WAR_CRIMES", "TRAFFICKING", "THEFT", "ENVIRONMENTAL_VIOLATIONS", "FORCED_LABOUR", "FROZEN_ASSET", "MARITIME_DETENTION", "SHADOW_FLEET", "OLIGARCH", "CLONE_ENTITY", "HIGH_RISK_AREA", "SCREENING_INTEREST", "CRIMINAL_LEADERSHIP"], "type": "string"}, {"type": "null"}], "title": "Classification"}
qqueryNo{"default": "", "maxLength": 200, "title": "Q", "type": "string"}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/SearchResults"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
GET /api/v1/sanctions/search/{record_id}

Read a sanctions lookup result, including source, aliases and original provider information. Inactive records and disabled sources return 404.

Parameters

NameLocationRequiredSchema
record_idpathYes{"format": "uuid", "title": "Record Id", "type": "string"}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/SearchDetail"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
GET /api/v1/sanctions/search/{record_id}/profile

Read a consolidated profile from any member record ID. Optional q supplies the search relevance rating. Includes all active, enabled records linked by shared explicit identifiers or exact full name and full birth date, excluding conflicting evidence. Each record retains its source, classifications and enrichment. Does not merge stored provider evidence.

Parameters

NameLocationRequiredSchema
record_idpathYes{"format": "uuid", "title": "Record Id", "type": "string"}
qqueryNo{"default": "", "maxLength": 200, "title": "Q", "type": "string"}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/ScreeningProfile"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
POST /api/v1/reports

Queue a detailed PDF screening report for background generation. kind is profile for a consolidated source profile, or portfolio for an authorised company record and its screening history. Portfolio requires client_id. Optional q records the profile search and confidence. Returns 202 while queued or generating, or 200 when reusing a completed report less than 24 hours old. Poll the report metadata for status and download its authenticated PDF URL when ready. Older reports remain available.

Request body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/ReportRequest"
      }
    }
  },
  "required": true
}

Example body

{
  "kind": "profile",
  "record_id": "{{client_id}}"
}

Responses

{
  "202": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/ReportOut"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
GET /api/v1/reports

List report jobs and saved reports within the API key company, optionally filtered by record_id, kind, status or subject name q. Paginated and newest first.

Parameters

NameLocationRequiredSchema
client_idqueryNo{"anyOf": [{"format": "uuid", "type": "string"}, {"type": "null"}], "title": "Client Id"}
record_idqueryNo{"anyOf": [{"format": "uuid", "type": "string"}, {"type": "null"}], "title": "Record Id"}
kindqueryNo{"anyOf": [{"enum": ["profile", "portfolio"], "type": "string"}, {"type": "null"}], "title": "Kind"}
statusqueryNo{"anyOf": [{"enum": ["queued", "processing", "ready", "failed"], "type": "string"}, {"type": "null"}], "title": "Status"}
for_requestqueryNo{"default": false, "title": "For Request", "type": "boolean"}
qqueryNo{"default": "", "maxLength": 200, "title": "Q", "type": "string"}
pagequeryNo{"default": 1, "minimum": 1, "title": "Page", "type": "integer"}
page_sizequeryNo{"default": 20, "maximum": 100, "minimum": 1, "title": "Page Size", "type": "integer"}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/Page_ReportOut_"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
GET /api/v1/reports/{report_id}

Read saved report metadata within the API key company, including the SHA-256 of its PDF.

Parameters

NameLocationRequiredSchema
report_idpathYes{"format": "uuid", "title": "Report Id", "type": "string"}

Responses

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/ReportOut"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}
GET /api/v1/reports/{report_id}/pdf

Download the original saved PDF within the API key company. Authenticate this request as well. Source updates do not change an already generated report.

Parameters

NameLocationRequiredSchema
report_idpathYes{"format": "uuid", "title": "Report Id", "type": "string"}

Responses

{
  "200": {
    "content": {
      "application/pdf": {
        "schema": {
          "format": "binary",
          "type": "string"
        }
      }
    },
    "description": "Successful Response"
  },
  "400": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Invalid request or business rule"
  },
  "401": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Missing, invalid, expired or revoked API key"
  },
  "403": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Action not permitted or company inactive"
  },
  "404": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Resource not found within this company"
  },
  "409": {
    "content": {
      "application/json": {
        "schema": {
          "properties": {
            "detail": {
              "type": "string"
            }
          },
          "required": [
            "detail"
          ],
          "type": "object"
        }
      }
    },
    "description": "Conflict, duplicate name or protected last administrator"
  },
  "422": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/HTTPValidationError"
        }
      }
    },
    "description": "Validation Error"
  }
}

Data schemas

These definitions are generated from the API validation and response models. A $ref refers to another schema below.

app__domain__screening__schemas__Review
{
  "additionalProperties": false,
  "properties": {
    "decision": {
      "enum": [
        "FALSE_POSITIVE",
        "CONFIRMED",
        "NEEDS_REVIEW"
      ],
      "title": "Decision",
      "type": "string"
    },
    "notes": {
      "default": "",
      "maxLength": 10000,
      "title": "Notes",
      "type": "string"
    },
    "version": {
      "maxLength": 64,
      "minLength": 64,
      "title": "Version",
      "type": "string"
    }
  },
  "required": [
    "version",
    "decision"
  ],
  "title": "Review",
  "type": "object"
}
AuditOut
{
  "properties": {
    "action": {
      "title": "Action",
      "type": "string"
    },
    "actor_email": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Actor Email"
    },
    "actor_id": {
      "anyOf": [
        {
          "format": "uuid",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Actor Id"
    },
    "actor_key_id": {
      "anyOf": [
        {
          "format": "uuid",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Actor Key Id"
    },
    "actor_key_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Actor Key Name"
    },
    "actor_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Actor Name"
    },
    "client_id": {
      "anyOf": [
        {
          "format": "uuid",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Client Id"
    },
    "created_at": {
      "format": "date-time",
      "title": "Created At",
      "type": "string"
    },
    "details": {
      "additionalProperties": true,
      "title": "Details",
      "type": "object"
    },
    "id": {
      "format": "uuid",
      "title": "Id",
      "type": "string"
    },
    "target_id": {
      "anyOf": [
        {
          "format": "uuid",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Target Id"
    }
  },
  "required": [
    "id",
    "actor_id",
    "actor_key_id",
    "actor_key_name",
    "actor_name",
    "actor_email",
    "client_id",
    "action",
    "target_id",
    "details",
    "created_at"
  ],
  "title": "AuditOut",
  "type": "object"
}
ClientOut
{
  "properties": {
    "created_at": {
      "format": "date-time",
      "title": "Created At",
      "type": "string"
    },
    "id": {
      "format": "uuid",
      "title": "Id",
      "type": "string"
    },
    "is_active": {
      "title": "Is Active",
      "type": "boolean"
    },
    "name": {
      "title": "Name",
      "type": "string"
    }
  },
  "required": [
    "id",
    "name",
    "is_active",
    "created_at"
  ],
  "title": "ClientOut",
  "type": "object"
}
CompanySettingsOut
{
  "properties": {
    "effective_threshold": {
      "title": "Effective Threshold",
      "type": "integer"
    },
    "platform_threshold": {
      "title": "Platform Threshold",
      "type": "integer"
    },
    "threshold": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Threshold"
    }
  },
  "required": [
    "threshold",
    "platform_threshold",
    "effective_threshold"
  ],
  "title": "CompanySettingsOut",
  "type": "object"
}
CompanyThreshold
{
  "additionalProperties": false,
  "properties": {
    "threshold": {
      "anyOf": [
        {
          "maximum": 5.0,
          "minimum": 1.0,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Threshold"
    }
  },
  "title": "CompanyThreshold",
  "type": "object"
}
CountsOut
{
  "properties": {
    "action_required": {
      "title": "Action Required",
      "type": "integer"
    },
    "confirmed": {
      "title": "Confirmed",
      "type": "integer"
    },
    "no_outstanding": {
      "title": "No Outstanding",
      "type": "integer"
    },
    "pending": {
      "title": "Pending",
      "type": "integer"
    }
  },
  "required": [
    "action_required",
    "confirmed",
    "no_outstanding",
    "pending"
  ],
  "title": "CountsOut",
  "type": "object"
}
DashboardOut
{
  "properties": {
    "counts": {
      "$ref": "#/components/schemas/CountsOut"
    },
    "items": {
      "items": {
        "$ref": "#/components/schemas/DashboardRecordOut"
      },
      "title": "Items",
      "type": "array"
    },
    "last_scan_at": {
      "anyOf": [
        {
          "format": "date-time",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Last Scan At"
    },
    "next_scan_at": {
      "anyOf": [
        {
          "format": "date-time",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Next Scan At"
    },
    "page": {
      "title": "Page",
      "type": "integer"
    },
    "page_size": {
      "title": "Page Size",
      "type": "integer"
    },
    "scan_error_count": {
      "title": "Scan Error Count",
      "type": "integer"
    },
    "total": {
      "title": "Total",
      "type": "integer"
    }
  },
  "required": [
    "counts",
    "last_scan_at",
    "next_scan_at",
    "scan_error_count",
    "items",
    "total",
    "page",
    "page_size"
  ],
  "title": "DashboardOut",
  "type": "object"
}
DashboardRecordOut
{
  "properties": {
    "group_id": {
      "format": "uuid",
      "title": "Group Id",
      "type": "string"
    },
    "group_name": {
      "title": "Group Name",
      "type": "string"
    },
    "highest_rating": {
      "title": "Highest Rating",
      "type": "integer"
    },
    "id": {
      "format": "uuid",
      "title": "Id",
      "type": "string"
    },
    "last_scanned_at": {
      "anyOf": [
        {
          "format": "date-time",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Last Scanned At"
    },
    "linked_to_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Linked To Name"
    },
    "match_count": {
      "title": "Match Count",
      "type": "integer"
    },
    "name": {
      "title": "Name",
      "type": "string"
    },
    "status": {
      "title": "Status",
      "type": "string"
    },
    "threshold": {
      "title": "Threshold",
      "type": "integer"
    }
  },
  "required": [
    "id",
    "name",
    "group_id",
    "group_name",
    "linked_to_name",
    "status",
    "last_scanned_at",
    "threshold",
    "match_count",
    "highest_rating"
  ],
  "title": "DashboardRecordOut",
  "type": "object"
}
DetailOut
{
  "properties": {
    "history": {
      "items": {
        "$ref": "#/components/schemas/EventOut"
      },
      "title": "History",
      "type": "array"
    },
    "history_has_more": {
      "title": "History Has More",
      "type": "boolean"
    },
    "last_error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Last Error"
    },
    "last_scanned_at": {
      "anyOf": [
        {
          "format": "date-time",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Last Scanned At"
    },
    "matches": {
      "items": {
        "$ref": "#/components/schemas/MatchOut"
      },
      "title": "Matches",
      "type": "array"
    },
    "next_scan_at": {
      "anyOf": [
        {
          "format": "date-time",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Next Scan At"
    },
    "record": {
      "$ref": "#/components/schemas/RecordOut"
    },
    "status": {
      "title": "Status",
      "type": "string"
    },
    "threshold": {
      "title": "Threshold",
      "type": "integer"
    }
  },
  "required": [
    "record",
    "status",
    "last_scanned_at",
    "next_scan_at",
    "threshold",
    "last_error",
    "matches",
    "history",
    "history_has_more"
  ],
  "title": "DetailOut",
  "type": "object"
}
EventOut
{
  "properties": {
    "created_at": {
      "format": "date-time",
      "title": "Created At",
      "type": "string"
    },
    "details": {
      "additionalProperties": true,
      "title": "Details",
      "type": "object"
    },
    "event_type": {
      "title": "Event Type",
      "type": "string"
    },
    "id": {
      "format": "uuid",
      "title": "Id",
      "type": "string"
    }
  },
  "required": [
    "id",
    "event_type",
    "created_at",
    "details"
  ],
  "title": "EventOut",
  "type": "object"
}
GroupInput
{
  "additionalProperties": false,
  "properties": {
    "description": {
      "default": "",
      "maxLength": 2000,
      "title": "Description",
      "type": "string"
    },
    "name": {
      "maxLength": 200,
      "minLength": 1,
      "title": "Name",
      "type": "string"
    }
  },
  "required": [
    "name"
  ],
  "title": "GroupInput",
  "type": "object"
}
GroupOut
{
  "properties": {
    "client_id": {
      "format": "uuid",
      "title": "Client Id",
      "type": "string"
    },
    "created_at": {
      "format": "date-time",
      "title": "Created At",
      "type": "string"
    },
    "description": {
      "title": "Description",
      "type": "string"
    },
    "effective_screening_threshold": {
      "default": 4,
      "title": "Effective Screening Threshold",
      "type": "integer"
    },
    "id": {
      "format": "uuid",
      "title": "Id",
      "type": "string"
    },
    "is_default": {
      "title": "Is Default",
      "type": "boolean"
    },
    "name": {
      "title": "Name",
      "type": "string"
    },
    "record_count": {
      "title": "Record Count",
      "type": "integer"
    },
    "screening_threshold": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Screening Threshold"
    }
  },
  "required": [
    "id",
    "client_id",
    "name",
    "description",
    "is_default",
    "created_at",
    "record_count"
  ],
  "title": "GroupOut",
  "type": "object"
}
GroupThreshold
{
  "additionalProperties": false,
  "properties": {
    "screening_threshold": {
      "anyOf": [
        {
          "maximum": 5.0,
          "minimum": 1.0,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Screening Threshold"
    }
  },
  "title": "GroupThreshold",
  "type": "object"
}
HTTPValidationError
{
  "properties": {
    "detail": {
      "items": {
        "$ref": "#/components/schemas/ValidationError"
      },
      "title": "Detail",
      "type": "array"
    }
  },
  "title": "HTTPValidationError",
  "type": "object"
}
Invite
{
  "additionalProperties": false,
  "properties": {
    "client_id": {
      "anyOf": [
        {
          "format": "uuid",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Client Id"
    },
    "email": {
      "format": "email",
      "title": "Email",
      "type": "string"
    },
    "is_staff": {
      "const": false,
      "default": false,
      "title": "Is Staff",
      "type": "boolean"
    },
    "name": {
      "default": "",
      "maxLength": 200,
      "title": "Name",
      "type": "string"
    },
    "role": {
      "default": "USER",
      "enum": [
        "CLIENT_ADMIN",
        "USER"
      ],
      "title": "Role",
      "type": "string"
    }
  },
  "required": [
    "email"
  ],
  "title": "Invite",
  "type": "object"
}
MatchOut
{
  "properties": {
    "active": {
      "title": "Active",
      "type": "boolean"
    },
    "classifications": {
      "items": {
        "type": "string"
      },
      "title": "Classifications",
      "type": "array"
    },
    "decision": {
      "title": "Decision",
      "type": "string"
    },
    "evidence": {
      "additionalProperties": true,
      "title": "Evidence",
      "type": "object"
    },
    "first_matched_at": {
      "format": "date-time",
      "title": "First Matched At",
      "type": "string"
    },
    "id": {
      "format": "uuid",
      "title": "Id",
      "type": "string"
    },
    "last_seen_at": {
      "format": "date-time",
      "title": "Last Seen At",
      "type": "string"
    },
    "name": {
      "title": "Name",
      "type": "string"
    },
    "rating": {
      "title": "Rating",
      "type": "integer"
    },
    "review_notes": {
      "title": "Review Notes",
      "type": "string"
    },
    "reviewed_at": {
      "anyOf": [
        {
          "format": "date-time",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Reviewed At"
    },
    "sanction_record_id": {
      "format": "uuid",
      "title": "Sanction Record Id",
      "type": "string"
    },
    "source_name": {
      "title": "Source Name",
      "type": "string"
    },
    "version": {
      "title": "Version",
      "type": "string"
    }
  },
  "required": [
    "id",
    "sanction_record_id",
    "name",
    "source_name",
    "classifications",
    "rating",
    "active",
    "decision",
    "evidence",
    "first_matched_at",
    "last_seen_at",
    "reviewed_at",
    "review_notes",
    "version"
  ],
  "title": "MatchOut",
  "type": "object"
}
Message
{
  "properties": {
    "message": {
      "title": "Message",
      "type": "string"
    }
  },
  "required": [
    "message"
  ],
  "title": "Message",
  "type": "object"
}
Page_AuditOut_
{
  "properties": {
    "items": {
      "items": {
        "$ref": "#/components/schemas/AuditOut"
      },
      "title": "Items",
      "type": "array"
    },
    "page": {
      "title": "Page",
      "type": "integer"
    },
    "page_size": {
      "title": "Page Size",
      "type": "integer"
    },
    "total": {
      "title": "Total",
      "type": "integer"
    }
  },
  "required": [
    "items",
    "total",
    "page",
    "page_size"
  ],
  "title": "Page[AuditOut]",
  "type": "object"
}
Page_ClientOut_
{
  "properties": {
    "items": {
      "items": {
        "$ref": "#/components/schemas/ClientOut"
      },
      "title": "Items",
      "type": "array"
    },
    "page": {
      "title": "Page",
      "type": "integer"
    },
    "page_size": {
      "title": "Page Size",
      "type": "integer"
    },
    "total": {
      "title": "Total",
      "type": "integer"
    }
  },
  "required": [
    "items",
    "total",
    "page",
    "page_size"
  ],
  "title": "Page[ClientOut]",
  "type": "object"
}
Page_EventOut_
{
  "properties": {
    "items": {
      "items": {
        "$ref": "#/components/schemas/EventOut"
      },
      "title": "Items",
      "type": "array"
    },
    "page": {
      "title": "Page",
      "type": "integer"
    },
    "page_size": {
      "title": "Page Size",
      "type": "integer"
    },
    "total": {
      "title": "Total",
      "type": "integer"
    }
  },
  "required": [
    "items",
    "total",
    "page",
    "page_size"
  ],
  "title": "Page[EventOut]",
  "type": "object"
}
Page_GroupOut_
{
  "properties": {
    "items": {
      "items": {
        "$ref": "#/components/schemas/GroupOut"
      },
      "title": "Items",
      "type": "array"
    },
    "page": {
      "title": "Page",
      "type": "integer"
    },
    "page_size": {
      "title": "Page Size",
      "type": "integer"
    },
    "total": {
      "title": "Total",
      "type": "integer"
    }
  },
  "required": [
    "items",
    "total",
    "page",
    "page_size"
  ],
  "title": "Page[GroupOut]",
  "type": "object"
}
Page_RecordOut_
{
  "properties": {
    "items": {
      "items": {
        "$ref": "#/components/schemas/RecordOut"
      },
      "title": "Items",
      "type": "array"
    },
    "page": {
      "title": "Page",
      "type": "integer"
    },
    "page_size": {
      "title": "Page Size",
      "type": "integer"
    },
    "total": {
      "title": "Total",
      "type": "integer"
    }
  },
  "required": [
    "items",
    "total",
    "page",
    "page_size"
  ],
  "title": "Page[RecordOut]",
  "type": "object"
}
Page_ReportOut_
{
  "properties": {
    "items": {
      "items": {
        "$ref": "#/components/schemas/ReportOut"
      },
      "title": "Items",
      "type": "array"
    },
    "page": {
      "title": "Page",
      "type": "integer"
    },
    "page_size": {
      "title": "Page Size",
      "type": "integer"
    },
    "total": {
      "title": "Total",
      "type": "integer"
    }
  },
  "required": [
    "items",
    "total",
    "page",
    "page_size"
  ],
  "title": "Page[ReportOut]",
  "type": "object"
}
Page_UserOut_
{
  "properties": {
    "items": {
      "items": {
        "$ref": "#/components/schemas/UserOut"
      },
      "title": "Items",
      "type": "array"
    },
    "page": {
      "title": "Page",
      "type": "integer"
    },
    "page_size": {
      "title": "Page Size",
      "type": "integer"
    },
    "total": {
      "title": "Total",
      "type": "integer"
    }
  },
  "required": [
    "items",
    "total",
    "page",
    "page_size"
  ],
  "title": "Page[UserOut]",
  "type": "object"
}
RecordDate
{
  "additionalProperties": false,
  "properties": {
    "end_value": {
      "anyOf": [
        {
          "maxLength": 10,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "End Value"
    },
    "precision": {
      "enum": [
        "DAY",
        "MONTH",
        "YEAR",
        "RANGE"
      ],
      "title": "Precision",
      "type": "string"
    },
    "type": {
      "maxLength": 80,
      "minLength": 1,
      "title": "Type",
      "type": "string"
    },
    "value": {
      "maxLength": 10,
      "title": "Value",
      "type": "string"
    }
  },
  "required": [
    "type",
    "precision",
    "value"
  ],
  "title": "RecordDate",
  "type": "object"
}
RecordInput
{
  "additionalProperties": false,
  "properties": {
    "addresses": {
      "items": {
        "type": "string"
      },
      "maxItems": 100,
      "title": "Addresses",
      "type": "array"
    },
    "aliases": {
      "items": {
        "type": "string"
      },
      "maxItems": 100,
      "title": "Aliases",
      "type": "array"
    },
    "countries": {
      "items": {
        "$ref": "#/components/schemas/TypedValue"
      },
      "maxItems": 100,
      "title": "Countries",
      "type": "array"
    },
    "dates": {
      "items": {
        "$ref": "#/components/schemas/RecordDate"
      },
      "maxItems": 100,
      "title": "Dates",
      "type": "array"
    },
    "entity_type": {
      "default": "PERSON",
      "enum": [
        "PERSON",
        "ORGANISATION",
        "VESSEL",
        "UNKNOWN"
      ],
      "title": "Entity Type",
      "type": "string"
    },
    "identifiers": {
      "items": {
        "$ref": "#/components/schemas/TypedValue"
      },
      "maxItems": 100,
      "title": "Identifiers",
      "type": "array"
    },
    "linked_to_id": {
      "anyOf": [
        {
          "format": "uuid",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Linked To Id"
    },
    "name": {
      "maxLength": 500,
      "minLength": 1,
      "title": "Name",
      "type": "string"
    },
    "notes": {
      "default": "",
      "maxLength": 10000,
      "title": "Notes",
      "type": "string"
    },
    "relationship_role": {
      "default": "",
      "maxLength": 200,
      "title": "Relationship Role",
      "type": "string"
    }
  },
  "required": [
    "name"
  ],
  "title": "RecordInput",
  "type": "object"
}
RecordOut
{
  "additionalProperties": false,
  "properties": {
    "addresses": {
      "items": {
        "type": "string"
      },
      "maxItems": 100,
      "title": "Addresses",
      "type": "array"
    },
    "aliases": {
      "items": {
        "type": "string"
      },
      "maxItems": 100,
      "title": "Aliases",
      "type": "array"
    },
    "client_id": {
      "format": "uuid",
      "title": "Client Id",
      "type": "string"
    },
    "countries": {
      "items": {
        "$ref": "#/components/schemas/TypedValue"
      },
      "maxItems": 100,
      "title": "Countries",
      "type": "array"
    },
    "created_at": {
      "format": "date-time",
      "title": "Created At",
      "type": "string"
    },
    "dates": {
      "items": {
        "$ref": "#/components/schemas/RecordDate"
      },
      "maxItems": 100,
      "title": "Dates",
      "type": "array"
    },
    "depth": {
      "default": 0,
      "title": "Depth",
      "type": "integer"
    },
    "entity_type": {
      "default": "PERSON",
      "enum": [
        "PERSON",
        "ORGANISATION",
        "VESSEL",
        "UNKNOWN"
      ],
      "title": "Entity Type",
      "type": "string"
    },
    "group_id": {
      "format": "uuid",
      "title": "Group Id",
      "type": "string"
    },
    "id": {
      "format": "uuid",
      "title": "Id",
      "type": "string"
    },
    "identifiers": {
      "items": {
        "$ref": "#/components/schemas/TypedValue"
      },
      "maxItems": 100,
      "title": "Identifiers",
      "type": "array"
    },
    "linked_to_id": {
      "anyOf": [
        {
          "format": "uuid",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Linked To Id"
    },
    "linked_to_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Linked To Name"
    },
    "name": {
      "maxLength": 500,
      "minLength": 1,
      "title": "Name",
      "type": "string"
    },
    "normalized_name": {
      "title": "Normalized Name",
      "type": "string"
    },
    "notes": {
      "default": "",
      "maxLength": 10000,
      "title": "Notes",
      "type": "string"
    },
    "relationship_role": {
      "default": "",
      "maxLength": 200,
      "title": "Relationship Role",
      "type": "string"
    },
    "updated_at": {
      "format": "date-time",
      "title": "Updated At",
      "type": "string"
    }
  },
  "required": [
    "linked_to_id",
    "relationship_role",
    "name",
    "entity_type",
    "aliases",
    "dates",
    "identifiers",
    "countries",
    "addresses",
    "notes",
    "id",
    "client_id",
    "group_id",
    "normalized_name",
    "linked_to_name",
    "depth",
    "created_at",
    "updated_at"
  ],
  "title": "RecordOut",
  "type": "object"
}
RecordUpdate
{
  "additionalProperties": false,
  "properties": {
    "addresses": {
      "items": {
        "type": "string"
      },
      "maxItems": 100,
      "title": "Addresses",
      "type": "array"
    },
    "aliases": {
      "items": {
        "type": "string"
      },
      "maxItems": 100,
      "title": "Aliases",
      "type": "array"
    },
    "countries": {
      "items": {
        "$ref": "#/components/schemas/TypedValue"
      },
      "maxItems": 100,
      "title": "Countries",
      "type": "array"
    },
    "dates": {
      "items": {
        "$ref": "#/components/schemas/RecordDate"
      },
      "maxItems": 100,
      "title": "Dates",
      "type": "array"
    },
    "entity_type": {
      "default": "PERSON",
      "enum": [
        "PERSON",
        "ORGANISATION",
        "VESSEL",
        "UNKNOWN"
      ],
      "title": "Entity Type",
      "type": "string"
    },
    "group_id": {
      "anyOf": [
        {
          "format": "uuid",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Group Id"
    },
    "identifiers": {
      "items": {
        "$ref": "#/components/schemas/TypedValue"
      },
      "maxItems": 100,
      "title": "Identifiers",
      "type": "array"
    },
    "linked_to_id": {
      "anyOf": [
        {
          "format": "uuid",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Linked To Id"
    },
    "name": {
      "maxLength": 500,
      "minLength": 1,
      "title": "Name",
      "type": "string"
    },
    "notes": {
      "default": "",
      "maxLength": 10000,
      "title": "Notes",
      "type": "string"
    },
    "relationship_role": {
      "default": "",
      "maxLength": 200,
      "title": "Relationship Role",
      "type": "string"
    }
  },
  "required": [
    "name"
  ],
  "title": "RecordUpdate",
  "type": "object"
}
ReportEnrichment
{
  "properties": {
    "outdated": {
      "title": "Outdated",
      "type": "boolean"
    },
    "providers": {
      "additionalProperties": {
        "additionalProperties": true,
        "type": "object"
      },
      "title": "Providers",
      "type": "object"
    },
    "result": {
      "anyOf": [
        {
          "$ref": "#/components/schemas/ReportResult"
        },
        {
          "type": "null"
        }
      ]
    },
    "status": {
      "title": "Status",
      "type": "string"
    }
  },
  "required": [
    "status",
    "outdated",
    "result"
  ],
  "title": "ReportEnrichment",
  "type": "object"
}
ReportOut
{
  "properties": {
    "can_regenerate": {
      "title": "Can Regenerate",
      "type": "boolean"
    },
    "client_id": {
      "anyOf": [
        {
          "format": "uuid",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Client Id"
    },
    "company_name": {
      "title": "Company Name",
      "type": "string"
    },
    "created_at": {
      "format": "date-time",
      "title": "Created At",
      "type": "string"
    },
    "created_by": {
      "anyOf": [
        {
          "format": "uuid",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Created By"
    },
    "created_by_name": {
      "title": "Created By Name",
      "type": "string"
    },
    "error": {
      "title": "Error",
      "type": "string"
    },
    "generated_at": {
      "anyOf": [
        {
          "format": "date-time",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Generated At"
    },
    "id": {
      "format": "uuid",
      "title": "Id",
      "type": "string"
    },
    "kind": {
      "enum": [
        "profile",
        "portfolio"
      ],
      "title": "Kind",
      "type": "string"
    },
    "pdf_url": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Pdf Url"
    },
    "record_id": {
      "format": "uuid",
      "title": "Record Id",
      "type": "string"
    },
    "reference": {
      "title": "Reference",
      "type": "string"
    },
    "reusable_until": {
      "anyOf": [
        {
          "format": "date-time",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Reusable Until"
    },
    "reused": {
      "default": false,
      "title": "Reused",
      "type": "boolean"
    },
    "sha256": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Sha256"
    },
    "status": {
      "enum": [
        "queued",
        "processing",
        "ready",
        "failed"
      ],
      "title": "Status",
      "type": "string"
    },
    "subject_name": {
      "title": "Subject Name",
      "type": "string"
    }
  },
  "required": [
    "id",
    "reference",
    "subject_name",
    "created_at",
    "pdf_url",
    "sha256",
    "kind",
    "record_id",
    "client_id",
    "company_name",
    "created_by",
    "created_by_name",
    "generated_at",
    "status",
    "error",
    "reusable_until",
    "can_regenerate"
  ],
  "title": "ReportOut",
  "type": "object"
}
ReportRequest
{
  "additionalProperties": false,
  "properties": {
    "client_id": {
      "anyOf": [
        {
          "format": "uuid",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Client Id"
    },
    "kind": {
      "enum": [
        "profile",
        "portfolio"
      ],
      "title": "Kind",
      "type": "string"
    },
    "q": {
      "default": "",
      "maxLength": 200,
      "title": "Q",
      "type": "string"
    },
    "record_id": {
      "format": "uuid",
      "title": "Record Id",
      "type": "string"
    }
  },
  "required": [
    "kind",
    "record_id"
  ],
  "title": "ReportRequest",
  "type": "object"
}
ReportResult
{
  "properties": {
    "data": {
      "additionalProperties": true,
      "title": "Data",
      "type": "object"
    },
    "entity_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Entity Id"
    },
    "id": {
      "format": "uuid",
      "title": "Id",
      "type": "string"
    },
    "provider": {
      "default": "wikidata",
      "title": "Provider",
      "type": "string"
    },
    "refresh_after": {
      "format": "date-time",
      "title": "Refresh After",
      "type": "string"
    },
    "retrieved_at": {
      "format": "date-time",
      "title": "Retrieved At",
      "type": "string"
    },
    "revision_id": {
      "format": "uuid",
      "title": "Revision Id",
      "type": "string"
    }
  },
  "required": [
    "id",
    "revision_id",
    "entity_id",
    "retrieved_at",
    "refresh_after",
    "data"
  ],
  "title": "ReportResult",
  "type": "object"
}
ScreeningProfile
{
  "properties": {
    "classifications": {
      "items": {
        "enum": [
          "SANCTIONS",
          "PEP",
          "CRIME",
          "NARCOTICS",
          "TERRORISM",
          "MONEY_LAUNDERING",
          "TERRORIST_FINANCING",
          "PROLIFERATION",
          "CORRUPTION",
          "FRAUD",
          "ORGANISED_CRIME",
          "HUMAN_TRAFFICKING",
          "HUMAN_RIGHTS_ABUSES",
          "CYBERCRIME",
          "ARMS_TRAFFICKING",
          "SANCTIONS_EVASION",
          "REGULATORY_ACTION",
          "DEBARMENT",
          "SANCTIONS_LINKED",
          "SANCTIONS_CONTROL",
          "COUNTER_SANCTIONS",
          "RCA",
          "WANTED",
          "PERSON_OF_INTEREST",
          "REGULATORY_WARNING",
          "EXPORT_CONTROL",
          "EXPORT_CONTROL_LINKED",
          "TRADE_RISK",
          "INVESTMENT_RISK",
          "INVESTMENT_BAN",
          "DISQUALIFIED",
          "FINANCIAL_CRIME",
          "WAR_CRIMES",
          "TRAFFICKING",
          "THEFT",
          "ENVIRONMENTAL_VIOLATIONS",
          "FORCED_LABOUR",
          "FROZEN_ASSET",
          "MARITIME_DETENTION",
          "SHADOW_FLEET",
          "OLIGARCH",
          "CLONE_ENTITY",
          "HIGH_RISK_AREA",
          "SCREENING_INTEREST",
          "CRIMINAL_LEADERSHIP"
        ],
        "type": "string"
      },
      "title": "Classifications",
      "type": "array"
    },
    "id": {
      "format": "uuid",
      "title": "Id",
      "type": "string"
    },
    "match_rating": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Match Rating"
    },
    "name": {
      "title": "Name",
      "type": "string"
    },
    "records": {
      "items": {
        "$ref": "#/components/schemas/SearchDetail"
      },
      "title": "Records",
      "type": "array"
    }
  },
  "required": [
    "id",
    "name",
    "classifications",
    "records"
  ],
  "title": "ScreeningProfile",
  "type": "object"
}
SearchDetail
{
  "properties": {
    "active": {
      "title": "Active",
      "type": "boolean"
    },
    "attributes": {
      "additionalProperties": true,
      "title": "Attributes",
      "type": "object"
    },
    "classifications": {
      "items": {
        "enum": [
          "SANCTIONS",
          "PEP",
          "CRIME",
          "NARCOTICS",
          "TERRORISM",
          "MONEY_LAUNDERING",
          "TERRORIST_FINANCING",
          "PROLIFERATION",
          "CORRUPTION",
          "FRAUD",
          "ORGANISED_CRIME",
          "HUMAN_TRAFFICKING",
          "HUMAN_RIGHTS_ABUSES",
          "CYBERCRIME",
          "ARMS_TRAFFICKING",
          "SANCTIONS_EVASION",
          "REGULATORY_ACTION",
          "DEBARMENT",
          "SANCTIONS_LINKED",
          "SANCTIONS_CONTROL",
          "COUNTER_SANCTIONS",
          "RCA",
          "WANTED",
          "PERSON_OF_INTEREST",
          "REGULATORY_WARNING",
          "EXPORT_CONTROL",
          "EXPORT_CONTROL_LINKED",
          "TRADE_RISK",
          "INVESTMENT_RISK",
          "INVESTMENT_BAN",
          "DISQUALIFIED",
          "FINANCIAL_CRIME",
          "WAR_CRIMES",
          "TRAFFICKING",
          "THEFT",
          "ENVIRONMENTAL_VIOLATIONS",
          "FORCED_LABOUR",
          "FROZEN_ASSET",
          "MARITIME_DETENTION",
          "SHADOW_FLEET",
          "OLIGARCH",
          "CLONE_ENTITY",
          "HIGH_RISK_AREA",
          "SCREENING_INTEREST",
          "CRIMINAL_LEADERSHIP"
        ],
        "type": "string"
      },
      "title": "Classifications",
      "type": "array"
    },
    "dates": {
      "items": {},
      "title": "Dates",
      "type": "array"
    },
    "enrichment": {
      "$ref": "#/components/schemas/ReportEnrichment"
    },
    "entity_type": {
      "title": "Entity Type",
      "type": "string"
    },
    "external_id": {
      "title": "External Id",
      "type": "string"
    },
    "first_seen_at": {
      "format": "date-time",
      "title": "First Seen At",
      "type": "string"
    },
    "id": {
      "format": "uuid",
      "title": "Id",
      "type": "string"
    },
    "identifiers": {
      "items": {},
      "title": "Identifiers",
      "type": "array"
    },
    "last_changed_at": {
      "format": "date-time",
      "title": "Last Changed At",
      "type": "string"
    },
    "last_seen_at": {
      "format": "date-time",
      "title": "Last Seen At",
      "type": "string"
    },
    "locations": {
      "items": {},
      "title": "Locations",
      "type": "array"
    },
    "match_rating": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Match Rating"
    },
    "name": {
      "title": "Name",
      "type": "string"
    },
    "names": {
      "items": {},
      "title": "Names",
      "type": "array"
    },
    "programs": {
      "items": {},
      "title": "Programs",
      "type": "array"
    },
    "provider_details": {
      "additionalProperties": true,
      "title": "Provider Details",
      "type": "object"
    },
    "reference_numbers": {
      "items": {},
      "title": "Reference Numbers",
      "type": "array"
    },
    "snapshot_id": {
      "format": "uuid",
      "title": "Snapshot Id",
      "type": "string"
    },
    "source_id": {
      "format": "uuid",
      "title": "Source Id",
      "type": "string"
    },
    "source_last_success_at": {
      "anyOf": [
        {
          "format": "date-time",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Source Last Success At"
    },
    "source_name": {
      "title": "Source Name",
      "type": "string"
    },
    "source_website": {
      "title": "Source Website",
      "type": "string"
    }
  },
  "required": [
    "classifications",
    "id",
    "source_id",
    "external_id",
    "name",
    "entity_type",
    "active",
    "reference_numbers",
    "names",
    "dates",
    "identifiers",
    "locations",
    "programs",
    "attributes",
    "snapshot_id",
    "first_seen_at",
    "last_seen_at",
    "last_changed_at",
    "enrichment",
    "provider_details",
    "source_name",
    "source_website",
    "source_last_success_at"
  ],
  "title": "SearchDetail",
  "type": "object"
}
SearchResult
{
  "properties": {
    "classifications": {
      "items": {
        "enum": [
          "SANCTIONS",
          "PEP",
          "CRIME",
          "NARCOTICS",
          "TERRORISM",
          "MONEY_LAUNDERING",
          "TERRORIST_FINANCING",
          "PROLIFERATION",
          "CORRUPTION",
          "FRAUD",
          "ORGANISED_CRIME",
          "HUMAN_TRAFFICKING",
          "HUMAN_RIGHTS_ABUSES",
          "CYBERCRIME",
          "ARMS_TRAFFICKING",
          "SANCTIONS_EVASION",
          "REGULATORY_ACTION",
          "DEBARMENT",
          "SANCTIONS_LINKED",
          "SANCTIONS_CONTROL",
          "COUNTER_SANCTIONS",
          "RCA",
          "WANTED",
          "PERSON_OF_INTEREST",
          "REGULATORY_WARNING",
          "EXPORT_CONTROL",
          "EXPORT_CONTROL_LINKED",
          "TRADE_RISK",
          "INVESTMENT_RISK",
          "INVESTMENT_BAN",
          "DISQUALIFIED",
          "FINANCIAL_CRIME",
          "WAR_CRIMES",
          "TRAFFICKING",
          "THEFT",
          "ENVIRONMENTAL_VIOLATIONS",
          "FORCED_LABOUR",
          "FROZEN_ASSET",
          "MARITIME_DETENTION",
          "SHADOW_FLEET",
          "OLIGARCH",
          "CLONE_ENTITY",
          "HIGH_RISK_AREA",
          "SCREENING_INTEREST",
          "CRIMINAL_LEADERSHIP"
        ],
        "type": "string"
      },
      "title": "Classifications",
      "type": "array"
    },
    "entity_type": {
      "title": "Entity Type",
      "type": "string"
    },
    "id": {
      "format": "uuid",
      "title": "Id",
      "type": "string"
    },
    "match_rating": {
      "maximum": 5.0,
      "minimum": 1.0,
      "title": "Match Rating",
      "type": "integer"
    },
    "matched_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Matched Name"
    },
    "matched_words": {
      "title": "Matched Words",
      "type": "integer"
    },
    "name": {
      "title": "Name",
      "type": "string"
    },
    "record_count": {
      "title": "Record Count",
      "type": "integer"
    },
    "reference_numbers": {
      "items": {
        "type": "string"
      },
      "title": "Reference Numbers",
      "type": "array"
    },
    "source_last_success_at": {
      "anyOf": [
        {
          "format": "date-time",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Source Last Success At"
    },
    "source_name": {
      "title": "Source Name",
      "type": "string"
    },
    "source_website": {
      "title": "Source Website",
      "type": "string"
    },
    "sources": {
      "items": {
        "$ref": "#/components/schemas/SearchSource"
      },
      "title": "Sources",
      "type": "array"
    }
  },
  "required": [
    "match_rating",
    "matched_words",
    "sources",
    "record_count",
    "classifications",
    "id",
    "name",
    "entity_type",
    "reference_numbers",
    "source_name",
    "source_website",
    "source_last_success_at"
  ],
  "title": "SearchResult",
  "type": "object"
}
SearchResults
{
  "properties": {
    "complete": {
      "default": true,
      "title": "Complete",
      "type": "boolean"
    },
    "has_more": {
      "title": "Has More",
      "type": "boolean"
    },
    "items": {
      "items": {
        "$ref": "#/components/schemas/SearchResult"
      },
      "title": "Items",
      "type": "array"
    },
    "minimum_characters": {
      "default": 3,
      "title": "Minimum Characters",
      "type": "integer"
    }
  },
  "required": [
    "items",
    "has_more"
  ],
  "title": "SearchResults",
  "type": "object"
}
SearchSource
{
  "properties": {
    "id": {
      "format": "uuid",
      "title": "Id",
      "type": "string"
    },
    "last_success_at": {
      "anyOf": [
        {
          "format": "date-time",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Last Success At"
    },
    "name": {
      "title": "Name",
      "type": "string"
    }
  },
  "required": [
    "id",
    "name",
    "last_success_at"
  ],
  "title": "SearchSource",
  "type": "object"
}
TypedValue
{
  "additionalProperties": false,
  "properties": {
    "type": {
      "maxLength": 80,
      "minLength": 1,
      "title": "Type",
      "type": "string"
    },
    "value": {
      "maxLength": 500,
      "minLength": 1,
      "title": "Value",
      "type": "string"
    }
  },
  "required": [
    "type",
    "value"
  ],
  "title": "TypedValue",
  "type": "object"
}
UserOut
{
  "properties": {
    "client_id": {
      "anyOf": [
        {
          "format": "uuid",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Client Id"
    },
    "client_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Client Name"
    },
    "created_at": {
      "format": "date-time",
      "title": "Created At",
      "type": "string"
    },
    "email": {
      "title": "Email",
      "type": "string"
    },
    "id": {
      "format": "uuid",
      "title": "Id",
      "type": "string"
    },
    "invited": {
      "title": "Invited",
      "type": "boolean"
    },
    "is_active": {
      "title": "Is Active",
      "type": "boolean"
    },
    "is_staff": {
      "title": "Is Staff",
      "type": "boolean"
    },
    "name": {
      "title": "Name",
      "type": "string"
    },
    "role": {
      "title": "Role",
      "type": "string"
    }
  },
  "required": [
    "id",
    "email",
    "name",
    "role",
    "is_staff",
    "is_active",
    "client_id",
    "created_at",
    "invited"
  ],
  "title": "UserOut",
  "type": "object"
}
UserUpdate
{
  "additionalProperties": false,
  "properties": {
    "is_active": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "title": "Is Active"
    },
    "name": {
      "anyOf": [
        {
          "maxLength": 200,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Name"
    },
    "role": {
      "anyOf": [
        {
          "enum": [
            "CLIENT_ADMIN",
            "USER"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Role"
    }
  },
  "title": "UserUpdate",
  "type": "object"
}
ValidationError
{
  "properties": {
    "ctx": {
      "title": "Context",
      "type": "object"
    },
    "input": {
      "title": "Input"
    },
    "loc": {
      "items": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "integer"
          }
        ]
      },
      "title": "Location",
      "type": "array"
    },
    "msg": {
      "title": "Message",
      "type": "string"
    },
    "type": {
      "title": "Error Type",
      "type": "string"
    }
  },
  "required": [
    "loc",
    "msg",
    "type"
  ],
  "title": "ValidationError",
  "type": "object"
}