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

# 提交 AML 筛查

> 通过合规服务对个人或企业（由 payload 判定）进行制裁、PEP 与负面媒体名单筛查。仅名单筛查——带证件与活体核验的身份验证见 /v1/kyc 与 /v1/kyb。身份字段均为可选并完整转发；信息越完整结果越精确。若配置合规费用，调用前扣款，失败则退款。结果本地保存供审计（`GET /v1/aml/screenings`）。必须提供 `idempotency_key`——相同键重放返回原记录且 `idempotency_hit` true，不会重复扣费。



## OpenAPI

````yaml /openapi.zh.yaml post /v1/aml/screenings
openapi: 3.1.0
info:
  title: CBPay API
  version: '1.89'
  description: >
    CBPay 是一个多币种支付平台:覆盖拉美的法币付款(payout)与收款(payin)、内部转账、链上充值与提现,以及 KYC
    筛查。每个账户持有四个相互独立的虚拟余额——USDT(运营货币)、USDC、BTC 和 GOLD(纯金克数)——它们绝不混合也不会自动兑换。

    payout 和服务费可从四个余额中的任意一个支付:

    用 `PUT /v1/settlement` 设置默认值,或在单笔 payout 中用

    `settlement_asset` 覆盖。


    所有金额均为十进制字符串,遵循各货币的精度(USDT/USDC/GOLD 为 6 位小数,BTC 为 8 位)。错误始终返回

    `{"error": "<code>", "message": "<detail>"}`。
servers:
  - url: https://api.qbank.cl/platform
    description: Live（生产环境，真实资金）
  - url: https://cryptobank.qbank.cl/platform
    description: Test（沙盒，模拟资金 — pk_test_ 密钥）
security:
  - bearerAuth: []
tags:
  - name: 凭证
    description: >-
      每笔操作的品牌化 PDF 凭证,附带公开的签名 QR 真伪校验、每个响应/webhook 中的
      receipt_url,以及最终状态时的自动邮件发送。
  - name: 身份认证
    description: 注册与登录账户成员。会话有效期 24 小时。
  - name: 账户
    description: 调用账户的档案、成员与 API key。
  - name: 余额
    description: 余额、流水历史与外汇汇率。
  - name: 付款(Payouts)
    description: 从你选择的结算余额扣款的法币派发(默认 USDT)。
  - name: 收款(Payins)
    description: 入账到 USDT 余额的法币充值。
  - name: 转账
  - name: 联系人
  - name: 兑换(Swaps)
    description: CBPay 账户之间的免费内部转账(个人或企业,任意组合)。
  - name: 加密货币
    description: 链上充值与提现(TRON、Ethereum 和 Bitcoin)。
  - name: 隔离钱包
    description: 拥有自身余额的链上钱包(企业不限数量;个人每个网络+资产组合 1 个)——创建、导入、发送、导出私钥与自动转发。余额存在于链上,从不进入账本。
  - name: QR Crypto POS
    description: >-
      面向拥有实体 POS 终端的处理商（企业账户）的定额加密货币二维码收款：已验证商户、每笔收款专属地址 +
      二维码、支付早期检测、按商户对账，以及经加密货币提现通道的退款。
  - name: KYC / KYB
  - name: AML 筛查
    description: 身份验证:个人 KYC、企业 KYB,含 AML 筛查、重新筛查与持续监控。
  - name: 钱包筛查
    description: 区块链地址的 AML 风险评估(制裁、非法资金暴露),按次收费;另附提现与充值的免费自动防护。
  - name: 分析
  - name: Webhooks
    description: 接收签名事件通知的订阅。
  - name: 状态
    description: 服务可用性。
  - name: 银行服务
    description: 真实银行账户:通过国际银行通道接收、持有与发送资金。
  - name: 卡片
    description: 以 Just-In-Time 方式从账户 USDT 余额消费的虚拟卡与实体卡,支持按卡设置消费限额。
  - name: 安全(OTP)
    description: >-
      通过 SMS/WhatsApp/email 发送的一次性验证码,保护敏感操作;并提供自助 2FA 偏好设置。仅适用于用户会话——API key
      豁免。
  - name: 通行密钥
    description: >-
      通过 WebAuthn 使用设备生物识别(Face ID、Touch ID、Windows
      Hello、安全密钥)的无密码登录、带备份码的验证器应用(TOTP),以及会话/设备管理。
  - name: 社交登录
    description: >-
      通过令牌交换以 Google、Apple、Microsoft 和 Facebook 实现无密码注册与登录。前端获取提供方凭证;API 验证后签发
      CBPay 会话。
paths:
  /v1/aml/screenings:
    post:
      tags:
        - AML screening
      summary: 提交 AML 筛查
      description: >-
        通过合规服务对个人或企业（由 payload 判定）进行制裁、PEP 与负面媒体名单筛查。仅名单筛查——带证件与活体核验的身份验证见
        /v1/kyc 与
        /v1/kyb。身份字段均为可选并完整转发；信息越完整结果越精确。若配置合规费用，调用前扣款，失败则退款。结果本地保存供审计（`GET
        /v1/aml/screenings`）。必须提供 `idempotency_key`——相同键重放返回原记录且
        `idempotency_hit` true，不会重复扣费。
      operationId: submitAmlScreening
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - idempotency_key
              properties:
                idempotency_key:
                  type: string
                  description: 必填（筛查收费）。也可使用 Idempotency-Key 请求头。
                customer:
                  type: object
                  description: >
                    Identity data. Provide `person` or `company`; when omitted

                    it is filled from the account profile. Additional fields are
                    accepted

                    and forwarded to the screening engine.
                  properties:
                    person:
                      type: object
                      description: >-
                        Person identity. Every field is optional; more identity
                        data yields a more precise screening.
                      properties:
                        full_name:
                          type: string
                        first_name:
                          type: string
                        middle_name:
                          type: string
                        last_name:
                          type: string
                        date_of_birth:
                          type: object
                          description: >-
                            Date of birth as an object: {year, month, day}
                            (integers). A plain "YYYY-MM-DD" string is rejected
                            by the screening engine.
                          properties:
                            year:
                              type: integer
                            month:
                              type: integer
                            day:
                              type: integer
                        nationality:
                          type: array
                          items:
                            type: string
                          description: >-
                            Nationalities as an ARRAY of ISO-3166 codes (a plain
                            string is rejected by the screening engine).
                        country_of_birth:
                          type: string
                        residential_information:
                          type: array
                          items:
                            type: object
                            properties:
                              country_of_residence:
                                type: string
                        personal_identification:
                          type: array
                          description: >-
                            Strong identity documents (national ID, passport,
                            ...) as {number, issuing_country}. Do not send a
                            `type` field: the screening engine rejects it.
                          items:
                            type: object
                            properties:
                              issuing_country:
                                type: string
                              number:
                                type: string
                        alias:
                          type: array
                          items:
                            type: string
                          description: Other known names.
                    company:
                      type: object
                      description: >-
                        Company identity. Every field is optional; more identity
                        data yields a more precise screening.
                      properties:
                        legal_name:
                          type: string
                        alias:
                          type: array
                          items:
                            type: string
                          description: Trade / brand names.
                        registration_authority_identification:
                          type: string
                          description: 商业登记机关标识（如税号/登记号）。
                        place_of_registration:
                          type: string
                          description: 注册/成立国家（ISO-3166）。
                        incorporation_date:
                          type: object
                          description: 成立日期，对象格式：{year, month, day}（整数）。
                          properties:
                            year:
                              type: integer
                            month:
                              type: integer
                            day:
                              type: integer
                        address:
                          type: array
                          items:
                            type: object
                            properties:
                              country:
                                type: string
                    email:
                      type: string
                    country:
                      type: string
                monitor:
                  type: boolean
                  default: false
                  description: Enable continuous monitoring from the start.
            examples:
              person:
                summary: Person (KYC)
                value:
                  customer:
                    person:
                      full_name: Ana Perez Rojas
                      date_of_birth:
                        year: 1990
                        month: 4
                        day: 12
                      personal_identification:
                        - issuing_country: CL
                          number: 12.345.678-5
                    email: ana@example.com
                    country: CL
                  monitor: false
              personFull:
                summary: Person (KYC) — full identity for the most precise screening
                value:
                  customer:
                    person:
                      full_name: Ana Perez Rojas
                      date_of_birth:
                        year: 1990
                        month: 4
                        day: 12
                      nationality:
                        - CL
                      country_of_birth: CL
                      residential_information:
                        - country_of_residence: CL
                      personal_identification:
                        - issuing_country: CL
                          number: 12.345.678-5
                        - issuing_country: CL
                          number: P0123456
                    email: ana@example.com
                    country: CL
                  monitor: false
              company:
                summary: Company (KYB)
                value:
                  customer:
                    company:
                      legal_name: Comercial Andina SpA
                      registration_authority_identification: 76.543.210-8
                    email: legal@andina.cl
                    country: CL
                  monitor: true
              companyFull:
                summary: Company (KYB) — full identity for the most precise screening
                value:
                  customer:
                    company:
                      legal_name: Comercial Andina SpA
                      alias:
                        - Andina Market
                      registration_authority_identification: 76.543.210-8
                      place_of_registration: CL
                      incorporation_date:
                        year: 2015
                        month: 8
                        day: 1
                      address:
                        - country: CL
                    email: legal@andina.cl
                    country: CL
                  monitor: true
              minimal:
                summary: Minimal — autofilled from the account
                value:
                  customer: {}
                  monitor: false
      responses:
        '201':
          description: 筛查已提交并本地保存。
          content:
            application/json:
              schema:
                type: object
                description: 筛查本地镜像及计费字段，完整结果在 `result` 中。
                properties:
                  screening_id:
                    type: string
                  kind:
                    type: string
                    enum:
                      - screening
                  service:
                    type: string
                    enum:
                      - compliance_person
                      - compliance_company
                  subject_type:
                    type: string
                    enum:
                      - person
                      - company
                  subject_name:
                    type: string
                  risk:
                    type: string
                  monitor:
                    type: boolean
                  screening_fee:
                    type: string
                  fee_asset:
                    type: string
                  idempotency_key:
                    type: string
                  idempotency_hit:
                    type: boolean
                  created_at:
                    type: string
                    format: date-time
                  result:
                    type: object
                    description: 合规服务返回的中立筛查结果。
              example:
                screening_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                kind: screening
                service: compliance_person
                subject_type: person
                subject_name: Ana Perez Rojas
                risk: low
                monitor: false
                screening_fee: '2.000000'
                fee_asset: USDT
                idempotency_key: aml-screen-ana-1
                created_at: '2026-07-12T18:00:00Z'
                result:
                  customer_id: e1d2c3b4-a596-8778-695a-4b3c2d1e0f9a
                  status: completed
                  risk_level: low
                  screening_result: no_hits
                  monitored: false
        '400':
          description: 缺少 idempotency_key（`idempotency_key_required`）。
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: idempotency_key_required
                message: provide idempotency_key (body or Idempotency-Key header)
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/InsufficientFunds'
        '403':
          $ref: '#/components/responses/AccountRequired'
        '502':
          description: Screening temporarily unavailable (`compliance_unavailable`).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: compliance_unavailable
                message: screening temporarily unavailable
components:
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
          description: 机器可读的错误代码(snake_case)。
          example: insufficient_funds
        message:
          type: string
          description: 人类可读的说明。
  responses:
    Unauthorized:
      description: 凭证缺失或无效(`unauthorized`)。
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: unauthorized
            message: invalid or missing credentials
    InsufficientFunds:
      description: 账户余额不足以完成此操作(`insufficient_funds`)。
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: insufficient_funds
            message: account balance is not enough for this operation
    AccountRequired:
      description: 此端点需要账户凭证(`account_required`)。
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: account_required
            message: this endpoint requires an account credential
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: |
        会话 JWT(来自注册/登录)或 API key(`pk_...`)。
        也接受 `X-API-Key: <token>` 作为替代请求头。

````