{
  "openapi": "3.1.0",
  "info": {
    "title": "CirclesCheck API",
    "version": "2026-10-01",
    "description": "Public endpoint index with detailed contracts for screening, review, reporting, monitoring and webhooks. A match is a candidate for review, not an automatic determination."
  },
  "servers": [
    {
      "url": "https://api.circlescheck.com"
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "paths": {
    "/api/v1/adverse-media/{id}": {
      "get": {
        "tags": [
          "Adverse Media"
        ],
        "summary": "Get adverse-media/{id}",
        "operationId": "get_adverse_media_id",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "patch": {
        "tags": [
          "Adverse Media"
        ],
        "summary": "Patch adverse-media/{id}",
        "operationId": "patch_adverse_media_id",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/adverse-media": {
      "get": {
        "tags": [
          "Adverse Media"
        ],
        "summary": "Get adverse-media",
        "operationId": "get_adverse_media",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      },
      "post": {
        "tags": [
          "Adverse Media"
        ],
        "summary": "Post adverse-media",
        "operationId": "post_adverse_media",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/alerts/{id}": {
      "patch": {
        "tags": [
          "Alerts"
        ],
        "summary": "Patch alerts/{id}",
        "operationId": "patch_alerts_id",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/alerts": {
      "get": {
        "tags": [
          "Alerts"
        ],
        "summary": "Get alerts",
        "operationId": "get_alerts",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/analytics/audit-readiness": {
      "get": {
        "tags": [
          "Analytics"
        ],
        "summary": "Get analytics/audit-readiness",
        "operationId": "get_analytics_audit_readiness",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/analytics/compliance-health": {
      "get": {
        "tags": [
          "Analytics"
        ],
        "summary": "Get analytics/compliance-health",
        "operationId": "get_analytics_compliance_health",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/analytics/risk-heatmap": {
      "get": {
        "tags": [
          "Analytics"
        ],
        "summary": "Get analytics/risk-heatmap",
        "operationId": "get_analytics_risk_heatmap",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/analytics/risk-portfolio": {
      "get": {
        "tags": [
          "Analytics"
        ],
        "summary": "Get analytics/risk-portfolio",
        "operationId": "get_analytics_risk_portfolio",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/analytics/team": {
      "get": {
        "tags": [
          "Analytics"
        ],
        "summary": "Get analytics/team",
        "operationId": "get_analytics_team",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/audit-export": {
      "post": {
        "tags": [
          "Audit Export"
        ],
        "summary": "Post audit-export",
        "operationId": "post_audit_export",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/calendar": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "summary": "Get calendar",
        "operationId": "get_calendar",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      },
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "Post calendar",
        "operationId": "post_calendar",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      },
      "patch": {
        "tags": [
          "Calendar"
        ],
        "summary": "Patch calendar",
        "operationId": "patch_calendar",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/case-templates": {
      "get": {
        "tags": [
          "Case Templates"
        ],
        "summary": "Get case-templates",
        "operationId": "get_case_templates",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/cases/{id}/evidence/{evidenceId}/file": {
      "get": {
        "tags": [
          "Cases"
        ],
        "summary": "Get cases/{id}/evidence/{evidenceId}/file",
        "operationId": "get_cases_id_evidence_evidenceId_file",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "evidenceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/cases/{id}/evidence": {
      "post": {
        "tags": [
          "Cases"
        ],
        "summary": "Post cases/{id}/evidence",
        "operationId": "post_cases_id_evidence",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/cases/{id}/notes": {
      "post": {
        "tags": [
          "Cases"
        ],
        "summary": "Post cases/{id}/notes",
        "operationId": "post_cases_id_notes",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/cases/{id}": {
      "get": {
        "tags": [
          "Cases"
        ],
        "summary": "Get cases/{id}",
        "operationId": "get_cases_id",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "patch": {
        "tags": [
          "Cases"
        ],
        "summary": "Patch cases/{id}",
        "operationId": "patch_cases_id",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/cases/{id}/sar": {
      "get": {
        "tags": [
          "Cases"
        ],
        "summary": "Get cases/{id}/sar",
        "operationId": "get_cases_id_sar",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "post": {
        "tags": [
          "Cases"
        ],
        "summary": "Post cases/{id}/sar",
        "operationId": "post_cases_id_sar",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/cases/batch": {
      "post": {
        "tags": [
          "Cases"
        ],
        "summary": "Post cases/batch",
        "operationId": "post_cases_batch",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/cases": {
      "get": {
        "tags": [
          "Cases"
        ],
        "summary": "Get cases",
        "operationId": "get_cases",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      },
      "post": {
        "tags": [
          "Cases"
        ],
        "summary": "Post cases",
        "operationId": "post_cases",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/ctr/{id}": {
      "get": {
        "tags": [
          "Ctr"
        ],
        "summary": "Get ctr/{id}",
        "operationId": "get_ctr_id",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "patch": {
        "tags": [
          "Ctr"
        ],
        "summary": "Patch ctr/{id}",
        "operationId": "patch_ctr_id",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/ctr": {
      "get": {
        "tags": [
          "Ctr"
        ],
        "summary": "Get ctr",
        "operationId": "get_ctr",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      },
      "post": {
        "tags": [
          "Ctr"
        ],
        "summary": "Post ctr",
        "operationId": "post_ctr",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/customers/{id}/edd": {
      "get": {
        "tags": [
          "Customers"
        ],
        "summary": "Get customers/{id}/edd",
        "operationId": "get_customers_id_edd",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "post": {
        "tags": [
          "Customers"
        ],
        "summary": "Post customers/{id}/edd",
        "operationId": "post_customers_id_edd",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "patch": {
        "tags": [
          "Customers"
        ],
        "summary": "Patch customers/{id}/edd",
        "operationId": "patch_customers_id_edd",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/customers/{id}/kyb": {
      "get": {
        "tags": [
          "Customers"
        ],
        "summary": "Get customers/{id}/kyb",
        "operationId": "get_customers_id_kyb",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "patch": {
        "tags": [
          "Customers"
        ],
        "summary": "Patch customers/{id}/kyb",
        "operationId": "patch_customers_id_kyb",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/customers/{id}/network": {
      "get": {
        "tags": [
          "Customers"
        ],
        "summary": "Get customers/{id}/network",
        "operationId": "get_customers_id_network",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/customers/{id}/risk-factors": {
      "get": {
        "tags": [
          "Customers"
        ],
        "summary": "Get customers/{id}/risk-factors",
        "operationId": "get_customers_id_risk_factors",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/customers/{id}": {
      "get": {
        "tags": [
          "Customers"
        ],
        "summary": "Get customers/{id}",
        "operationId": "get_customers_id",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "patch": {
        "tags": [
          "Customers"
        ],
        "summary": "Patch customers/{id}",
        "operationId": "patch_customers_id",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/customers/{id}/timeline": {
      "get": {
        "tags": [
          "Customers"
        ],
        "summary": "Get customers/{id}/timeline",
        "operationId": "get_customers_id_timeline",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/customers/{id}/ubo/{ownerId}": {
      "get": {
        "tags": [
          "Customers"
        ],
        "summary": "Get customers/{id}/ubo/{ownerId}",
        "operationId": "get_customers_id_ubo_ownerId",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ownerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "patch": {
        "tags": [
          "Customers"
        ],
        "summary": "Patch customers/{id}/ubo/{ownerId}",
        "operationId": "patch_customers_id_ubo_ownerId",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ownerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "delete": {
        "tags": [
          "Customers"
        ],
        "summary": "Delete customers/{id}/ubo/{ownerId}",
        "operationId": "delete_customers_id_ubo_ownerId",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ownerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/customers/{id}/ubo": {
      "get": {
        "tags": [
          "Customers"
        ],
        "summary": "Get customers/{id}/ubo",
        "operationId": "get_customers_id_ubo",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "post": {
        "tags": [
          "Customers"
        ],
        "summary": "Post customers/{id}/ubo",
        "operationId": "post_customers_id_ubo",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/customers": {
      "get": {
        "tags": [
          "Customers"
        ],
        "summary": "Get customers",
        "operationId": "get_customers",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      },
      "post": {
        "tags": [
          "Customers"
        ],
        "summary": "Post customers",
        "operationId": "post_customers",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/import/{jobId}": {
      "get": {
        "tags": [
          "Import"
        ],
        "summary": "Get import/{jobId}",
        "operationId": "get_import_jobId",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/import": {
      "get": {
        "tags": [
          "Import"
        ],
        "summary": "Get import",
        "operationId": "get_import",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      },
      "post": {
        "tags": [
          "Import"
        ],
        "summary": "Post import",
        "operationId": "post_import",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/import/templates": {
      "get": {
        "tags": [
          "Import"
        ],
        "summary": "Get import/templates",
        "operationId": "get_import_templates",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/kyc/{id}/documents/{docId}/file": {
      "get": {
        "tags": [
          "Kyc"
        ],
        "summary": "Get kyc/{id}/documents/{docId}/file",
        "operationId": "get_kyc_id_documents_docId_file",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "docId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/kyc/{id}/documents": {
      "post": {
        "tags": [
          "Kyc"
        ],
        "summary": "Post kyc/{id}/documents",
        "operationId": "post_kyc_id_documents",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "get": {
        "tags": [
          "Kyc"
        ],
        "summary": "Get kyc/{id}/documents",
        "operationId": "get_kyc_id_documents",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/kyc/{id}": {
      "get": {
        "tags": [
          "Kyc"
        ],
        "summary": "Get kyc/{id}",
        "operationId": "get_kyc_id",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "patch": {
        "tags": [
          "Kyc"
        ],
        "summary": "Patch kyc/{id}",
        "operationId": "patch_kyc_id",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/kyc/{id}/selfie": {
      "post": {
        "tags": [
          "Kyc"
        ],
        "summary": "Post kyc/{id}/selfie",
        "operationId": "post_kyc_id_selfie",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/kyc": {
      "post": {
        "tags": [
          "Kyc"
        ],
        "summary": "Post kyc",
        "operationId": "post_kyc",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      },
      "get": {
        "tags": [
          "Kyc"
        ],
        "summary": "Get kyc",
        "operationId": "get_kyc",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/monitoring/{id}": {
      "get": {
        "tags": [
          "Monitoring"
        ],
        "summary": "Get monitoring/{id}",
        "operationId": "get_monitoring_id",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "patch": {
        "tags": [
          "Monitoring"
        ],
        "summary": "Patch monitoring/{id}",
        "operationId": "patch_monitoring_id",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/monitoring/hits": {
      "get": {
        "tags": [
          "Monitoring"
        ],
        "summary": "Get monitoring/hits",
        "operationId": "get_monitoring_hits",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      },
      "patch": {
        "tags": [
          "Monitoring"
        ],
        "summary": "Patch monitoring/hits",
        "operationId": "patch_monitoring_hits",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/monitoring": {
      "get": {
        "tags": [
          "Monitoring"
        ],
        "summary": "Get monitoring",
        "operationId": "get_monitoring",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      },
      "post": {
        "tags": [
          "Monitoring"
        ],
        "summary": "Post monitoring",
        "operationId": "post_monitoring",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "fullName"
                ],
                "properties": {
                  "fullName": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 500
                  },
                  "dateOfBirth": {
                    "type": "string",
                    "format": "date"
                  },
                  "country": {
                    "type": "string",
                    "maxLength": 100
                  },
                  "entityType": {
                    "type": "string",
                    "enum": [
                      "individual",
                      "business"
                    ],
                    "default": "individual"
                  },
                  "frequency": {
                    "type": "string",
                    "enum": [
                      "daily",
                      "weekly"
                    ]
                  },
                  "customerId": {
                    "type": "string",
                    "format": "uuid"
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Monitoring"
        ],
        "summary": "Delete monitoring",
        "operationId": "delete_monitoring",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/notification-preferences": {
      "get": {
        "tags": [
          "Notification Preferences"
        ],
        "summary": "Get notification-preferences",
        "operationId": "get_notification_preferences",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      },
      "patch": {
        "tags": [
          "Notification Preferences"
        ],
        "summary": "Patch notification-preferences",
        "operationId": "patch_notification_preferences",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/notifications": {
      "get": {
        "tags": [
          "Notifications"
        ],
        "summary": "Get notifications",
        "operationId": "get_notifications",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      },
      "patch": {
        "tags": [
          "Notifications"
        ],
        "summary": "Patch notifications",
        "operationId": "patch_notifications",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/questionnaires/{id}": {
      "get": {
        "tags": [
          "Questionnaires"
        ],
        "summary": "Get questionnaires/{id}",
        "operationId": "get_questionnaires_id",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "patch": {
        "tags": [
          "Questionnaires"
        ],
        "summary": "Patch questionnaires/{id}",
        "operationId": "patch_questionnaires_id",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/questionnaires": {
      "get": {
        "tags": [
          "Questionnaires"
        ],
        "summary": "Get questionnaires",
        "operationId": "get_questionnaires",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      },
      "post": {
        "tags": [
          "Questionnaires"
        ],
        "summary": "Post questionnaires",
        "operationId": "post_questionnaires",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/questionnaires/templates": {
      "get": {
        "tags": [
          "Questionnaires"
        ],
        "summary": "Get questionnaires/templates",
        "operationId": "get_questionnaires_templates",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/reports": {
      "post": {
        "tags": [
          "Reports"
        ],
        "summary": "Post reports",
        "operationId": "post_reports",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/scheduled-reports": {
      "get": {
        "tags": [
          "Scheduled Reports"
        ],
        "summary": "Get scheduled-reports",
        "operationId": "get_scheduled_reports",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      },
      "post": {
        "tags": [
          "Scheduled Reports"
        ],
        "summary": "Post scheduled-reports",
        "operationId": "post_scheduled_reports",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      },
      "delete": {
        "tags": [
          "Scheduled Reports"
        ],
        "summary": "Delete scheduled-reports",
        "operationId": "delete_scheduled_reports",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/screenings/{id}/matches/{matchId}": {
      "patch": {
        "tags": [
          "Screenings"
        ],
        "summary": "Patch screenings/{id}/matches/{matchId}",
        "operationId": "patch_screenings_id_matches_matchId",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "matchId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "disposition",
                  "reviewNotes"
                ],
                "properties": {
                  "disposition": {
                    "type": "string",
                    "enum": [
                      "true_positive",
                      "false_positive",
                      "under_review",
                      "dismissed"
                    ]
                  },
                  "reviewNotes": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 5000
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/screenings/{id}/report": {
      "get": {
        "tags": [
          "Screenings"
        ],
        "summary": "Get screenings/{id}/report",
        "operationId": "get_screenings_id_report",
        "responses": {
          "200": {
            "description": "Screening evidence and recorded review decisions",
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          },
          "409": {
            "description": "The screening is not completed and cannot be exported as evidence."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/screenings/{id}": {
      "get": {
        "tags": [
          "Screenings"
        ],
        "summary": "Get screenings/{id}",
        "operationId": "get_screenings_id",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/screenings/batch": {
      "post": {
        "tags": [
          "Screenings"
        ],
        "summary": "Post screenings/batch",
        "operationId": "post_screenings_batch",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "file"
                ],
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "CSV with name, type (or entity_type), date_of_birth, country, and optional customer_ref. Reuse a stable customer_ref across imports. Maximum 1,000 rows; successful checks consume shared allowance. Saving customers and paid monitoring enrollment are separate explicit operations."
                  }
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Screenings"
        ],
        "summary": "Get screenings/batch",
        "operationId": "get_screenings_batch",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/screenings/export": {
      "get": {
        "tags": [
          "Screenings"
        ],
        "summary": "Get screenings/export",
        "operationId": "get_screenings_export",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/screenings": {
      "post": {
        "tags": [
          "Screenings"
        ],
        "summary": "Post screenings",
        "operationId": "post_screenings",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScreeningInput"
              },
              "example": {
                "fullName": "Alex Example",
                "type": "individual",
                "dateOfBirth": "1980-05-15",
                "country": "US",
                "screeningType": "combined"
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Screenings"
        ],
        "summary": "Get screenings",
        "operationId": "get_screenings",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/transactions/{id}": {
      "get": {
        "tags": [
          "Transactions"
        ],
        "summary": "Get transactions/{id}",
        "operationId": "get_transactions_id",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/transactions": {
      "get": {
        "tags": [
          "Transactions"
        ],
        "summary": "Get transactions",
        "operationId": "get_transactions",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      },
      "post": {
        "tags": [
          "Transactions"
        ],
        "summary": "Post transactions",
        "operationId": "post_transactions",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/webhooks/{id}/deliveries": {
      "get": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Get webhooks/{id}/deliveries",
        "operationId": "get_webhooks_id_deliveries",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/webhooks/{id}": {
      "patch": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Patch webhooks/{id}",
        "operationId": "patch_webhooks_id",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "delete": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Delete webhooks/{id}",
        "operationId": "delete_webhooks_id",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/webhooks/{id}/test": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Post webhooks/{id}/test",
        "operationId": "post_webhooks_id_test",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/webhooks/deliveries": {
      "get": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Get webhooks/deliveries",
        "operationId": "get_webhooks_deliveries",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/webhooks": {
      "get": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Get webhooks",
        "operationId": "get_webhooks",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      },
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Post webhooks",
        "operationId": "post_webhooks",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "url",
                  "events"
                ],
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "events": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "minItems": 1
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/workflow-rules/{id}": {
      "get": {
        "tags": [
          "Workflow Rules"
        ],
        "summary": "Get workflow-rules/{id}",
        "operationId": "get_workflow_rules_id",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "patch": {
        "tags": [
          "Workflow Rules"
        ],
        "summary": "Patch workflow-rules/{id}",
        "operationId": "patch_workflow_rules_id",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "delete": {
        "tags": [
          "Workflow Rules"
        ],
        "summary": "Delete workflow-rules/{id}",
        "operationId": "delete_workflow_rules_id",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/workflow-rules": {
      "get": {
        "tags": [
          "Workflow Rules"
        ],
        "summary": "Get workflow-rules",
        "operationId": "get_workflow_rules",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      },
      "post": {
        "tags": [
          "Workflow Rules"
        ],
        "summary": "Post workflow-rules",
        "operationId": "post_workflow_rules",
        "responses": {
          "200": {
            "description": "Successful operation. Response fields depend on the endpoint."
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid API key or session"
          },
          "403": {
            "description": "Access or plan does not permit this operation"
          },
          "429": {
            "description": "Rate or usage limit reached"
          },
          "503": {
            "description": "Required service unavailable; do not interpret this as a successful check"
          },
          "402": {
            "description": "Monthly allowance exhausted; use upgradeUrl or wait for reset."
          }
        }
      }
    },
    "/api/v1/screenings/batch/{id}/portfolio": {
      "parameters": [
        {
          "name": "id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "tags": [
          "Screenings"
        ],
        "summary": "Save completed live batch rows to stable customer records",
        "description": "Successful checks only; references resolve within your organization. Repeated saves do not duplicate customer records or consume screening allowance.",
        "operationId": "post_batch_portfolio",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "saveToPortfolio"
                ],
                "properties": {
                  "saveToPortfolio": {
                    "type": "boolean",
                    "enum": [
                      true
                    ]
                  },
                  "screeningIds": {
                    "type": "array",
                    "minItems": 1,
                    "uniqueItems": true,
                    "items": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "customerRefs": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 160
                    },
                    "description": "Assign missing references by screening UUID. Existing CSV references cannot be replaced."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Completed request; inspect row status and counts for partial portfolio results."
          },
          "400": {
            "description": "Invalid selection, customer reference, identity, or missing explicit confirmation."
          },
          "401": {
            "description": "Authentication required."
          },
          "403": {
            "description": "Viewer or sandbox access does not permit this operation."
          },
          "404": {
            "description": "Record not found in your organization."
          },
          "409": {
            "description": "Customer or watchlist identity conflict; no monitoring enrollment committed."
          },
          "503": {
            "description": "Storage unavailable; retry the saved operation."
          }
        }
      }
    },
    "/api/v1/screenings/batch/{id}/monitoring": {
      "parameters": [
        {
          "name": "id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "tags": [
          "Screenings"
        ],
        "summary": "Enable paid recurring monitoring from saved batch checks",
        "description": "Requires explicit enrollment and a current paid subscription. A saved check seeds each new watchlist baseline without another initial scan. Existing entries retain cadence, paused status, and history. Future scans share your screening allowance.",
        "operationId": "post_batch_monitoring",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "confirmRecurring",
                  "frequency"
                ],
                "properties": {
                  "confirmRecurring": {
                    "type": "boolean",
                    "enum": [
                      true
                    ]
                  },
                  "frequency": {
                    "type": "string",
                    "enum": [
                      "daily",
                      "weekly"
                    ]
                  },
                  "customerIds": {
                    "type": "array",
                    "minItems": 1,
                    "uniqueItems": true,
                    "items": {
                      "type": "string",
                      "format": "uuid"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Completed request; inspect row status and counts for partial portfolio results."
          },
          "400": {
            "description": "Invalid selection, customer reference, identity, or missing explicit confirmation."
          },
          "401": {
            "description": "Authentication required."
          },
          "403": {
            "description": "Viewer or sandbox access does not permit this operation."
          },
          "404": {
            "description": "Record not found in your organization."
          },
          "409": {
            "description": "Customer or watchlist identity conflict; no monitoring enrollment committed."
          },
          "503": {
            "description": "Storage unavailable; retry the saved operation."
          },
          "402": {
            "description": "Current paid subscription required. The customer portfolio remains saved; review upgradeUrl."
          }
        }
      }
    },
    "/api/v1/customers/{id}/screenings": {
      "parameters": [
        {
          "name": "id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "tags": [
          "Customers"
        ],
        "summary": "Retrieve linked customer screenings and recorded reviews",
        "operationId": "get_customer_screening_history",
        "description": "Completed live checks linked by stable customer ID. Name matches do not establish identity. Includes saved review details, review counts, monitoring status, and report links. Previous decisions are not applied to new matches.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Customer history with screenings, pagination, and monitoring arrays."
          },
          "401": {
            "description": "Authentication required."
          },
          "404": {
            "description": "Customer not found in your organization."
          },
          "503": {
            "description": "History unavailable."
          }
        }
      }
    },
    "/api/v1/transaction-rules/settings": {
      "get": {
        "tags": [
          "Transaction Rules"
        ],
        "summary": "Read transaction monitoring rule settings",
        "operationId": "get_transaction_rule_settings",
        "description": "Returns current tenant settings. Optional currency previews defaults and FX in another currency without saving. FX can be null; converted default thresholds can be null when a rate is unavailable. API keys can read; canEdit is true only for admin sessions.",
        "security": [
          {
            "bearerAuth": []
          },
          {
            "apiKey": []
          },
          {
            "tenantSession": []
          }
        ],
        "parameters": [
          {
            "name": "currency",
            "in": "query",
            "required": false,
            "description": "Supported three-letter ISO 4217 code such as XAF or USD; normalized to uppercase. Previews defaults only.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Resolved tenant settings with stored/default status, FX metadata, optional currency preview and jurisdiction-list metadata.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionRuleSettingsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unsupported currency preview code.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Transaction Rules"
        ],
        "summary": "Update transaction monitoring rule settings (tenant-admin session)",
        "operationId": "put_transaction_rule_settings",
        "description": "Requires a tenant-admin cc_session on the session origin. API keys do not supply an admin role and currently receive 403. Partial fields are merged with current settings. Amounts are major units of reportingCurrency. A currency change must explicitly supply rules.largeTransaction.amount, rules.structuring.threshold, rules.newAccount.amount, rules.passThrough.minAmount, rules.roundAmount.minAmount and rules.cashIntensity.minCashAmount. No amount threshold may remain unset after saving.",
        "security": [
          {
            "tenantSession": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransactionRuleSettingsPatch"
              },
              "example": {
                "flagThreshold": 75,
                "rules": {
                  "velocity": {
                    "maxTransactions": 12,
                    "windowHours": 24
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Resolved tenant settings with stored/default status, FX metadata, optional currency preview and jurisdiction-list metadata.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionRuleSettingsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid JSON/settings, unset amount thresholds, or missing amount thresholds when changing reporting currency.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Only tenant-admin sessions can save. API keys currently receive 403 because they do not supply the admin role.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "Use cc_test_ keys for simulated sandbox checks or cc_live_ keys for real data."
      },
      "apiKey": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-Key"
      },
      "tenantSession": {
        "type": "apiKey",
        "in": "cookie",
        "name": "cc_session",
        "description": "Authenticated tenant session. Saving transaction rule settings requires the admin role; API keys currently do not supply that role."
      }
    },
    "schemas": {
      "ScreeningInput": {
        "type": "object",
        "required": [
          "fullName"
        ],
        "properties": {
          "fullName": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500
          },
          "type": {
            "type": "string",
            "enum": [
              "individual",
              "business"
            ],
            "default": "individual"
          },
          "dateOfBirth": {
            "type": "string",
            "format": "date"
          },
          "country": {
            "type": "string",
            "maxLength": 100
          },
          "nationality": {
            "type": "string",
            "maxLength": 100
          },
          "screeningType": {
            "type": "string",
            "enum": [
              "aml",
              "pep",
              "sanctions",
              "combined"
            ],
            "default": "combined"
          },
          "customerId": {
            "type": "string",
            "format": "uuid",
            "description": "Optional customer in your organization. Identity fields must match its current profile. Update that profile before screening corrected details."
          }
        }
      },
      "TransactionRules": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "largeTransaction",
          "structuring",
          "velocity",
          "newAccount",
          "unusualAmount",
          "highRiskJurisdiction",
          "passThrough",
          "fanInOut",
          "dormantAccount",
          "roundAmount",
          "cashIntensity"
        ],
        "properties": {
          "largeTransaction": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "enabled",
              "amount"
            ],
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "amount": {
                "type": [
                  "number",
                  "null"
                ],
                "exclusiveMinimum": 0,
                "maximum": 10000000000000,
                "description": "Positive amount in major units of reportingCurrency."
              }
            }
          },
          "structuring": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "enabled",
              "threshold",
              "windowHours",
              "minTransactions",
              "nearThresholdPercent",
              "minComponentPercent"
            ],
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "threshold": {
                "type": [
                  "number",
                  "null"
                ],
                "exclusiveMinimum": 0,
                "maximum": 10000000000000,
                "description": "Positive amount in major units of reportingCurrency."
              },
              "windowHours": {
                "type": "integer",
                "minimum": 1,
                "maximum": 2160
              },
              "minTransactions": {
                "type": "integer",
                "minimum": 2,
                "maximum": 1000
              },
              "nearThresholdPercent": {
                "type": "integer",
                "minimum": 50,
                "maximum": 99
              },
              "minComponentPercent": {
                "type": "integer",
                "minimum": 0,
                "maximum": 90
              }
            }
          },
          "velocity": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "enabled",
              "maxTransactions",
              "windowHours"
            ],
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "maxTransactions": {
                "type": "integer",
                "minimum": 1,
                "maximum": 100000
              },
              "windowHours": {
                "type": "integer",
                "minimum": 1,
                "maximum": 2160
              }
            }
          },
          "newAccount": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "enabled",
              "accountAgeDays",
              "amount"
            ],
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "accountAgeDays": {
                "type": "integer",
                "minimum": 1,
                "maximum": 3650
              },
              "amount": {
                "type": [
                  "number",
                  "null"
                ],
                "exclusiveMinimum": 0,
                "maximum": 10000000000000,
                "description": "Positive amount in major units of reportingCurrency."
              }
            }
          },
          "unusualAmount": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "enabled",
              "multiplier",
              "lookbackDays",
              "minHistory"
            ],
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "multiplier": {
                "type": "number",
                "minimum": 1.5,
                "maximum": 100
              },
              "lookbackDays": {
                "type": "integer",
                "minimum": 7,
                "maximum": 365
              },
              "minHistory": {
                "type": "integer",
                "minimum": 2,
                "maximum": 1000
              }
            }
          },
          "highRiskJurisdiction": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "enabled",
              "includeIncreasedMonitoring"
            ],
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "includeIncreasedMonitoring": {
                "type": "boolean"
              }
            }
          },
          "passThrough": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "enabled",
              "windowHours",
              "tolerancePercent",
              "minAmount"
            ],
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "windowHours": {
                "type": "integer",
                "minimum": 1,
                "maximum": 2160
              },
              "tolerancePercent": {
                "type": "number",
                "minimum": 1,
                "maximum": 50
              },
              "minAmount": {
                "type": [
                  "number",
                  "null"
                ],
                "exclusiveMinimum": 0,
                "maximum": 10000000000000,
                "description": "Positive amount in major units of reportingCurrency."
              }
            }
          },
          "fanInOut": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "enabled",
              "minCounterparties",
              "windowHours"
            ],
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "minCounterparties": {
                "type": "integer",
                "minimum": 2,
                "maximum": 10000
              },
              "windowHours": {
                "type": "integer",
                "minimum": 1,
                "maximum": 2160
              }
            }
          },
          "dormantAccount": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "enabled",
              "inactiveDays"
            ],
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "inactiveDays": {
                "type": "integer",
                "minimum": 30,
                "maximum": 3650
              }
            }
          },
          "roundAmount": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "enabled",
              "minAmount"
            ],
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "minAmount": {
                "type": [
                  "number",
                  "null"
                ],
                "exclusiveMinimum": 0,
                "maximum": 10000000000000,
                "description": "Positive amount in major units of reportingCurrency."
              }
            }
          },
          "cashIntensity": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "enabled",
              "windowDays",
              "minCashSharePercent",
              "minCashAmount"
            ],
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "windowDays": {
                "type": "integer",
                "minimum": 1,
                "maximum": 365
              },
              "minCashSharePercent": {
                "type": "number",
                "minimum": 1,
                "maximum": 100
              },
              "minCashAmount": {
                "type": [
                  "number",
                  "null"
                ],
                "exclusiveMinimum": 0,
                "maximum": 10000000000000,
                "description": "Positive amount in major units of reportingCurrency."
              }
            }
          }
        }
      },
      "TransactionRulesPatch": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "largeTransaction": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "amount": {
                "type": "number",
                "exclusiveMinimum": 0,
                "maximum": 10000000000000,
                "description": "Positive amount in major units of reportingCurrency."
              }
            }
          },
          "structuring": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "threshold": {
                "type": "number",
                "exclusiveMinimum": 0,
                "maximum": 10000000000000,
                "description": "Positive amount in major units of reportingCurrency."
              },
              "windowHours": {
                "type": "integer",
                "minimum": 1,
                "maximum": 2160
              },
              "minTransactions": {
                "type": "integer",
                "minimum": 2,
                "maximum": 1000
              },
              "nearThresholdPercent": {
                "type": "integer",
                "minimum": 50,
                "maximum": 99
              },
              "minComponentPercent": {
                "type": "integer",
                "minimum": 0,
                "maximum": 90
              }
            }
          },
          "velocity": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "maxTransactions": {
                "type": "integer",
                "minimum": 1,
                "maximum": 100000
              },
              "windowHours": {
                "type": "integer",
                "minimum": 1,
                "maximum": 2160
              }
            }
          },
          "newAccount": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "accountAgeDays": {
                "type": "integer",
                "minimum": 1,
                "maximum": 3650
              },
              "amount": {
                "type": "number",
                "exclusiveMinimum": 0,
                "maximum": 10000000000000,
                "description": "Positive amount in major units of reportingCurrency."
              }
            }
          },
          "unusualAmount": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "multiplier": {
                "type": "number",
                "minimum": 1.5,
                "maximum": 100
              },
              "lookbackDays": {
                "type": "integer",
                "minimum": 7,
                "maximum": 365
              },
              "minHistory": {
                "type": "integer",
                "minimum": 2,
                "maximum": 1000
              }
            }
          },
          "highRiskJurisdiction": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "includeIncreasedMonitoring": {
                "type": "boolean"
              }
            }
          },
          "passThrough": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "windowHours": {
                "type": "integer",
                "minimum": 1,
                "maximum": 2160
              },
              "tolerancePercent": {
                "type": "number",
                "minimum": 1,
                "maximum": 50
              },
              "minAmount": {
                "type": "number",
                "exclusiveMinimum": 0,
                "maximum": 10000000000000,
                "description": "Positive amount in major units of reportingCurrency."
              }
            }
          },
          "fanInOut": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "minCounterparties": {
                "type": "integer",
                "minimum": 2,
                "maximum": 10000
              },
              "windowHours": {
                "type": "integer",
                "minimum": 1,
                "maximum": 2160
              }
            }
          },
          "dormantAccount": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "inactiveDays": {
                "type": "integer",
                "minimum": 30,
                "maximum": 3650
              }
            }
          },
          "roundAmount": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "minAmount": {
                "type": "number",
                "exclusiveMinimum": 0,
                "maximum": 10000000000000,
                "description": "Positive amount in major units of reportingCurrency."
              }
            }
          },
          "cashIntensity": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "windowDays": {
                "type": "integer",
                "minimum": 1,
                "maximum": 365
              },
              "minCashSharePercent": {
                "type": "number",
                "minimum": 1,
                "maximum": 100
              },
              "minCashAmount": {
                "type": "number",
                "exclusiveMinimum": 0,
                "maximum": 10000000000000,
                "description": "Positive amount in major units of reportingCurrency."
              }
            }
          }
        }
      },
      "TransactionRuleSettings": {
        "type": "object",
        "required": [
          "reportingCurrency",
          "flagThreshold",
          "homeCountry",
          "ctrEnabled",
          "counterpartyScreening",
          "rules"
        ],
        "properties": {
          "reportingCurrency": {
            "type": "string",
            "description": "Supported three-letter ISO 4217 currency code; input is trimmed and normalized to uppercase."
          },
          "flagThreshold": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "Total score at or above which a transaction is flagged."
          },
          "homeCountry": {
            "type": [
              "string",
              "null"
            ],
            "description": "Two-letter ISO 3166-1 country code; null or an empty input string clears it. Domestic activity here is not scored against the increased-monitoring list."
          },
          "ctrEnabled": {
            "type": "boolean"
          },
          "counterpartyScreening": {
            "type": "boolean",
            "description": "Whether counterparty names are screened against sanctions lists."
          },
          "rules": {
            "$ref": "#/components/schemas/TransactionRules"
          }
        }
      },
      "TransactionRuleSettingsPatch": {
        "type": "object",
        "description": "Partial update merged with current tenant settings. All six amount thresholds must be configured after merging. Changing reportingCurrency requires all six amount thresholds in this payload in the new currency. Unknown rule or rule field names are rejected.",
        "properties": {
          "reportingCurrency": {
            "type": "string",
            "description": "Supported three-letter ISO 4217 currency code; input is trimmed and normalized to uppercase."
          },
          "flagThreshold": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "Total score at or above which a transaction is flagged."
          },
          "homeCountry": {
            "type": [
              "string",
              "null"
            ],
            "description": "Two-letter ISO 3166-1 country code; null or an empty input string clears it. Domestic activity here is not scored against the increased-monitoring list."
          },
          "ctrEnabled": {
            "type": "boolean"
          },
          "counterpartyScreening": {
            "type": "boolean",
            "description": "Whether counterparty names are screened against sanctions lists."
          },
          "rules": {
            "$ref": "#/components/schemas/TransactionRulesPatch"
          }
        }
      },
      "TransactionFxRate": {
        "type": "object",
        "required": [
          "currency",
          "usdPerUnit",
          "unitsPerUsd",
          "rateDate",
          "source",
          "sourceLabel"
        ],
        "properties": {
          "currency": {
            "type": "string"
          },
          "usdPerUnit": {
            "type": "number"
          },
          "unitsPerUsd": {
            "type": "number"
          },
          "rateDate": {
            "type": [
              "string",
              "null"
            ]
          },
          "source": {
            "type": "string"
          },
          "sourceLabel": {
            "type": "string"
          }
        }
      },
      "TransactionRuleSettingsResponse": {
        "type": "object",
        "required": [
          "settings",
          "saved",
          "updatedAt",
          "canEdit",
          "fx",
          "preview",
          "jurisdictions"
        ],
        "properties": {
          "settings": {
            "$ref": "#/components/schemas/TransactionRuleSettings"
          },
          "saved": {
            "type": "boolean"
          },
          "updatedAt": {
            "type": [
              "string",
              "null"
            ]
          },
          "canEdit": {
            "type": "boolean",
            "description": "True for a tenant-admin session. API-key authentication does not provide the admin role."
          },
          "fx": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TransactionFxRate"
              },
              {
                "type": "null"
              }
            ]
          },
          "preview": {
            "anyOf": [
              {
                "type": "null"
              },
              {
                "type": "object",
                "required": [
                  "currency",
                  "fx",
                  "defaults"
                ],
                "properties": {
                  "currency": {
                    "type": "string"
                  },
                  "fx": {
                    "anyOf": [
                      {
                        "$ref": "#/components/schemas/TransactionFxRate"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "defaults": {
                    "$ref": "#/components/schemas/TransactionRuleSettings"
                  }
                }
              }
            ]
          },
          "jurisdictions": {
            "type": "object",
            "required": [
              "loaded",
              "lists"
            ],
            "properties": {
              "loaded": {
                "type": "boolean"
              },
              "lists": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "listCode",
                    "label",
                    "publishedOn",
                    "sourceUrl",
                    "countries"
                  ],
                  "properties": {
                    "listCode": {
                      "type": "string",
                      "enum": [
                        "fatf_call_for_action",
                        "fatf_increased_monitoring"
                      ]
                    },
                    "label": {
                      "type": "string"
                    },
                    "publishedOn": {
                      "type": "string"
                    },
                    "sourceUrl": {
                      "type": "string"
                    },
                    "countries": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
