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

# Pre-Transaction Compliance Checklist

> Returns the compliance checklist a customer must satisfy before a transaction can be booked.

Call this before `create-transaction` to find out exactly what compliance actions are required for the given transaction parameters. The platform evaluates all applicable KYC rules and business transaction rules and returns a checklist of outstanding items.

If `transactionQuote` is provided, AML checks are also included in the evaluation.

All authenticated user types can call this endpoint.

## Request Headers

<ParamField header="X-Auth-Token" type="string" required>
  JWT Access Token of the authenticated user.
</ParamField>

<ParamField header="X-CUSTOMER-ID" type="string">
  The customer's `userId` (UUID). Pass this when an agent or manager is checking on behalf of a customer.
</ParamField>

<ParamField header="platform" type="string" required default="fincode">
  Platform identifier. Use `fincode`.
</ParamField>

<ParamField header="uuid" type="string" required default="200">
  Unique request identifier.
</ParamField>

## Request Body

<ParamField body="transactionQuote" type="object" required>
  The transaction parameters to evaluate compliance against.

  <Expandable title="transactionQuote fields">
    <ParamField body="direction" type="string" required>
      Which side of the transaction to evaluate. Use `PAYIN` when the customer is sending money.

      * `PAYIN` — evaluate rules on transaction creation
      * `PAYOUT` — evaluate rules on payout
      * `ACCOUNT_CREDITING` — evaluate rules on account credit
    </ParamField>

    <ParamField body="amountSend" type="number" required>
      The amount the sender intends to send.
    </ParamField>

    <ParamField body="sendingCurrencyCode" type="string" required>
      ISO 4217 currency code of the sending currency (e.g. `GBP`).
    </ParamField>

    <ParamField body="receivingCountryIso3Code" type="string" required>
      ISO 3166-1 alpha-3 destination country code (e.g. `NGA`).
    </ParamField>

    <ParamField body="devliveryMethod" type="string" required>
      Transaction type / delivery method (e.g. `ACCOUNTPAYMENT`, `MOBILE_MONEY`, `CASH_PICKUP`).
    </ParamField>
  </Expandable>
</ParamField>

## Response

<ResponseField name="status" type="string">
  `SUCCESS` or `FAILED`.
</ResponseField>

<ResponseField name="data" type="object">
  <Expandable title="data fields">
    <ResponseField name="customerComplianceCheckList" type="array">
      List of compliance actions required before the transaction can proceed. An empty array means the customer is fully compliant and the transaction can be booked immediately.

      <Expandable title="customerComplianceCheckList item">
        <ResponseField name="actionType" type="string">
          The type of action required. Possible values: `VERIFY_ACCOUNT_VIA_EMAIL`, `VERIFY_ACCOUNT_VIA_PHONE_NUMBER`, `VERIFY_ACCOUNT_VIA_EKYC`, `VERIFY_ACCOUNT_VIA_EKYC_FACE_PHOTO`, `VERIFY_ACCOUNT_VIA_EKYC_FACE_VIDEO`, `VERIFY_ACCOUNT_VIA_IDENTIFICATION_DOCUMENT`, `CUSTOMER_RISK_ASSESSMENT`, `THRESHOLD_IDENTIFICATION`, `THRESHOLD_LIMIT`, `THRESHOLD_LIMIT_RECEIVING_AMOUNT`, `THRESHOLD_COUNT_TRANSACTION`, `LINKED_TRANSACTION`, `OTHER`.
        </ResponseField>

        <ResponseField name="associatedRuleId" type="string">
          The compliance rule ID. Pass this as `associatedRuleId` when submitting documents via `attach-documents`.
        </ResponseField>

        <ResponseField name="customerKycRecordId" type="string">
          The KYC record ID. Used as the path parameter when calling `initiate-compliance-action`.
        </ResponseField>

        <ResponseField name="businessRuleNumber" type="string">
          The business rule that triggered this requirement.
        </ResponseField>

        <ResponseField name="restrictionLevel" type="string">
          How strictly this blocks the transaction. Values: `BLOCK` (hard block until resolved), `WARN` (allow but flag to compliance), `ALLOW` (allow if within range).
        </ResponseField>

        <ResponseField name="customerInstruction" type="string">
          Human-readable instruction to display to the customer.
        </ResponseField>

        <ResponseField name="requestedDocumentUpload" type="boolean">
          `true` if the action requires a document to be uploaded.
        </ResponseField>

        <ResponseField name="acceptableDocTypes" type="array">
          List of acceptable document types for this requirement.
        </ResponseField>

        <ResponseField name="minimumNumberOfAcceptableDocTypes" type="integer">
          Minimum number of documents from `acceptableDocTypes` that must be submitted.
        </ResponseField>

        <ResponseField name="complianceScreeningType" type="string">
          The screening type. Values: `AML`, `CRA`, `KYC`, `EDD`, `NONE_APPLICABLE`.
        </ResponseField>

        <ResponseField name="ekycProviderId" type="string">
          The eKYC provider integration ID. Present when `actionType` is `VERIFY_ACCOUNT_VIA_EKYC`.
        </ResponseField>

        <ResponseField name="apiProvider" type="string">
          The eKYC provider code — e.g. `SHUFTI_PRO`, `SEON_IDV`, `SUMSUB`.
        </ResponseField>

        <ResponseField name="craDynamicFormId" type="string">
          Dynamic form ID for CRA (Customer Risk Assessment) actions.
        </ResponseField>

        <ResponseField name="dataCollectionFormType" type="string">
          The type of data collection form required.
        </ResponseField>

        <ResponseField name="amountFrom" type="number">
          Lower bound of the transaction amount range that triggered this rule.
        </ResponseField>

        <ResponseField name="amountTo" type="number">
          Upper bound of the transaction amount range that triggered this rule.
        </ResponseField>

        <ResponseField name="sendingAmount" type="number">
          The sending amount at the time this rule was evaluated.
        </ResponseField>

        <ResponseField name="customerType" type="string">
          The customer classification this rule applies to. Values: `INDIVIDUAL`, `COMPANY`.
        </ResponseField>

        <ResponseField name="complianceOn" type="string">
          Who this compliance action applies to. Values: `CUSTOMER`, `RECEIVER`.
        </ResponseField>

        <ResponseField name="result" type="string">
          The compliance result. Values: `PASS`, `WARNING`, `FAIL`.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

## Code Example

```bash cURL theme={null}
curl -X PUT 'https://{your-domain}.fincode.software/api/v6/services/compliance/customer-compliance-checklist' \
--header 'X-Auth-Token: YOUR_JWT_ACCESS_TOKEN' \
--header 'X-CUSTOMER-ID: 00000000-0000-0000-0000-000000000001' \
--header 'Content-Type: application/json' \
--header 'platform: fincode' \
--header 'uuid: 200' \
--data '{
  "transactionQuote": {
    "direction": "PAYIN",
    "amountSend": 100.00,
    "sendingCurrencyCode": "GBP",
    "receivingCountryIso3Code": "NGA",
    "devliveryMethod": "ACCOUNTPAYMENT"
  }
}'
```

```javascript Node.js theme={null}
const axios = require('axios');

async function getComplianceChecklist(accessToken, userId, quote) {
  const response = await axios.put(
    'https://{your-domain}.fincode.software/api/v6/services/compliance/customer-compliance-checklist',
    { transactionQuote: quote },
    {
      headers: {
        'X-Auth-Token': accessToken,
        'X-CUSTOMER-ID': userId,
        'platform': 'fincode',
        'uuid': '200',
        'Content-Type': 'application/json',
      },
    }
  );

  const checklist = response.data.data.customerComplianceCheckList;
  if (checklist.length === 0) {
    console.log('Customer is compliant — transaction can proceed.');
  } else {
    console.log(`${checklist.length} compliance action(s) required:`, checklist);
  }
  return checklist;
}

// Usage
getComplianceChecklist('YOUR_TOKEN', '00000000-0000-0000-0000-000000000001', {
  direction: 'PAYIN',
  amountSend: 100.00,
  sendingCurrencyCode: 'GBP',
  receivingCountryIso3Code: 'NGA',
  devliveryMethod: 'ACCOUNTPAYMENT',
});
```


## OpenAPI

````yaml PUT /compliance/customer-compliance-checklist
openapi: 3.0.0
info:
  title: FinCode API
  version: v6
servers:
  - url: https://{your-domain}.fincode.software/api/v6/services
    description: API v6
    variables:
      your-domain:
        default: remitjunction
        description: Enter your subdomain
  - url: https://{your-domain}.fincode.software/api/v1/services
    description: API v1
    variables:
      your-domain:
        default: finlend
        description: Enter your subdomain
  - url: https://api.stag.songhaiexchange.io
    description: Songhai Exchange API
security: []
paths:
  /compliance/customer-compliance-checklist:
    put:
      tags:
        - Compliance
      summary: Pre-Transaction Compliance Checklist
      description: >-
        Returns the compliance checklist a customer must satisfy before a
        transaction can be booked.
      operationId: customerComplianceChecklist
      parameters:
        - $ref: '#/components/parameters/platformHeader'
        - $ref: '#/components/parameters/uuidHeader'
        - in: header
          name: X-Auth-Token
          schema:
            type: string
          required: true
        - in: header
          name: X-CUSTOMER-ID
          schema:
            type: string
            format: uuid
          required: false
          description: >-
            The customer's userId UUID. Pass when an agent or manager is
            checking on behalf of a customer.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                transactionQuote:
                  type: object
                  properties:
                    direction:
                      type: string
                      enum:
                        - PAYIN
                        - PAYOUT
                        - ACCOUNT_CREDITING
                      example: PAYIN
                    amountSend:
                      type: number
                      example: 100
                    sendingCurrencyCode:
                      type: string
                      example: GBP
                    receivingCountryIso3Code:
                      type: string
                      example: NGA
                    devliveryMethod:
                      type: string
                      example: ACCOUNTPAYMENT
                  required:
                    - direction
                    - amountSend
                    - sendingCurrencyCode
                    - receivingCountryIso3Code
                    - devliveryMethod
      responses:
        '200':
          description: Compliance checklist retrieved successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: SUCCESS
                  data:
                    type: object
                    properties:
                      customerComplianceCheckList:
                        type: array
                        items:
                          type: object
                          properties:
                            actionType:
                              type: string
                              enum:
                                - VERIFY_ACCOUNT_VIA_EMAIL
                                - VERIFY_ACCOUNT_VIA_PHONE_NUMBER
                                - VERIFY_ACCOUNT_VIA_EKYC
                                - VERIFY_ACCOUNT_VIA_EKYC_FACE_PHOTO
                                - VERIFY_ACCOUNT_VIA_EKYC_FACE_VIDEO
                                - VERIFY_ACCOUNT_VIA_IDENTIFICATION_DOCUMENT
                                - CUSTOMER_RISK_ASSESSMENT
                                - THRESHOLD_IDENTIFICATION
                                - THRESHOLD_LIMIT
                                - THRESHOLD_LIMIT_RECEIVING_AMOUNT
                                - THRESHOLD_COUNT_TRANSACTION
                                - LINKED_TRANSACTION
                                - OTHER
                              example: THRESHOLD_IDENTIFICATION
                            businessRuleNumber:
                              type: string
                              example: '90'
                            restrictionLevel:
                              type: string
                              enum:
                                - BLOCK
                                - WARN
                                - ALLOW
                              example: BLOCK
                            customerInstruction:
                              type: string
                              example: ''
                            associatedRuleId:
                              type: string
                              example: 00000000-0000-0000-0000-000000000001
                            dataCollectionFormType:
                              type: string
                              enum:
                                - NONE_APPLICABLE
                                - BASIC_FILE_UPLOAD
                                - LOAD_CAMERA_AND_SEND_PHOTO
                                - LOAD_CAMERA_AND_SEND_VIDEO
                                - CUSTOMER_RISK_ASSESSMENT
                              example: BASIC_FILE_UPLOAD
                            ekycProviderId:
                              type: string
                              nullable: true
                              example: null
                            apiProvider:
                              type: string
                              nullable: true
                              example: SHUFTI_PRO
                            customerKycRecordId:
                              type: string
                              example: 00000000-0000-0000-0000-000000000002
                            craDynamicFormId:
                              type: string
                              nullable: true
                              example: null
                            complianceScreeningType:
                              type: string
                              enum:
                                - AML
                                - CRA
                                - KYC
                                - EDD
                                - NONE_APPLICABLE
                              example: KYC
                            amountFrom:
                              type: number
                              example: 0
                            amountTo:
                              type: number
                              example: 0
                            sendingAmount:
                              type: number
                              example: 0
                            requestedDocumentUpload:
                              type: boolean
                              example: false
                            acceptableDocTypes:
                              type: array
                              items:
                                type: object
                                properties:
                                  docIdType:
                                    type: string
                                    example: ADDRESS_PROOF
                                  docTypeCommonName:
                                    type: string
                                    example: Proof of address
                            minimumNumberOfAcceptableDocTypes:
                              type: integer
                              example: 1
                            customerType:
                              type: string
                              enum:
                                - INDIVIDUAL
                                - COMPANY
                              example: INDIVIDUAL
                            complianceOn:
                              type: string
                              nullable: true
                              enum:
                                - CUSTOMER
                                - RECEIVER
                              example: CUSTOMER
                            result:
                              type: string
                              enum:
                                - PASS
                                - WARNING
                                - FAIL
                              example: FAIL
components:
  parameters:
    platformHeader:
      in: header
      name: platform
      schema:
        type: string
        default: fincode
      required: true
    uuidHeader:
      in: header
      name: uuid
      schema:
        type: string
        default: '200'
      required: true

````