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

# Plan a Fraud Check

> Validate inputs and estimate selected Fraud Check charges before running the request.

Send the same body you intend to use for [Fraud Check](/standalone-apis/fraud-check).
Planning creates no check or session, calls no enrichment supplier, reads no network history, and charges nothing.

Each module separates `available` from `will_run`.
`availability_reason` explains whether the supplied inputs can support it, while `selection_reason` explains why it is or is not selected.
Keep unavailable switches visible and show their input requirements.

`estimated_price` is a decimal string in the returned `currency`.
A null price means unavailable or unpriced, not free.
The top-level estimate totals selected runnable modules; `can_afford` also checks the applicable billing arrangement.
Re-plan after changing identifiers, context, or selections.
Execution rechecks eligibility and pricing, so a plan is not a reservation or a guarantee that an external source will answer.


## OpenAPI

````yaml POST /v3/fraud/checks/plan/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: Identity verification API. Authenticate with x-api-key header.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/fraud/checks/plan/:
    post:
      tags:
        - Fraud Check
      summary: Plan a Fraud Check
      description: >-
        Validate selected checks and estimate their price without executing,
        creating a session or billing.
      operationId: plan_create
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/FraudCheckRequestRequest'
          application/json:
            schema:
              $ref: '#/components/schemas/FraudCheckRequestRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/FraudCheckRequestRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FraudCheckPlan'
          description: ''
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FraudBadRequestErrorMessage'
          description: ''
      security:
        - ApiKeyAuth: []
        - BearerAuth: []
components:
  schemas:
    FraudCheckRequestRequest:
      type: object
      properties:
        client_reference:
          type: string
          minLength: 1
          description: >-
            Your own reference for this check. Doubles as the idempotency key:
            reusing it with the same body returns the original check without
            running or billing the modules again; reusing it with a different
            body returns 409.
          maxLength: 255
        profile:
          type: string
          minLength: 1
          default: standard
          description: Orchestration profile id. Defaults to the Didit `standard` profile.
          maxLength: 64
        profile_version:
          type: string
          minLength: 1
          description: >-
            Pin a frozen profile version. Defaults to the current version of the
            profile.
          maxLength: 32
        subject:
          $ref: '#/components/schemas/FraudCheckSubjectRequest'
        context:
          $ref: '#/components/schemas/FraudCheckContextRequest'
        checks:
          $ref: '#/components/schemas/FraudCheckModuleSelectionRequest'
        vendor_data:
          type: string
          maxLength: 1000
        metadata: {}
      required:
        - subject
    FraudCheckPlan:
      type: object
      properties:
        profile_id:
          type: string
        profile_version:
          type: string
        modules:
          type: array
          items:
            $ref: '#/components/schemas/FraudCheckPlannedModule'
        estimated_price:
          type: string
          nullable: true
        currency:
          type: string
          nullable: true
        is_sandbox:
          type: boolean
        can_afford:
          type: boolean
      required:
        - can_afford
        - currency
        - estimated_price
        - is_sandbox
        - modules
        - profile_id
        - profile_version
    FraudBadRequestErrorMessage:
      type: object
      properties:
        detail:
          type: string
          default: Bad Request - Invalid request data
    FraudCheckSubjectRequest:
      type: object
      properties:
        selfie:
          type: string
          minLength: 1
          description: >-
            Base64 JPEG, PNG or WebP selfie, up to 6 MB. No reference image or
            URL.
          maxLength: 8388672
        identifiers:
          type: array
          items:
            $ref: '#/components/schemas/FraudCheckIdentifierRequest'
          description: One or more typed identifiers. One is enough.
          maxItems: 10
          minItems: 1
        attributes:
          $ref: '#/components/schemas/FraudCheckAttributesRequest'
      required:
        - identifiers
    FraudCheckContextRequest:
      type: object
      properties:
        ip_address:
          type: string
          minLength: 1
        user_agent:
          type: string
          maxLength: 512
        country:
          type: string
          description: >-
            Country the subject claims to be in. Contextual only - never proof
            of identity ownership.
          maxLength: 3
        purpose:
          type: string
          maxLength: 128
        consent_obtained:
          type: boolean
    FraudCheckModuleSelectionRequest:
      type: object
      properties:
        include:
          type: array
          items:
            $ref: '#/components/schemas/FraudExcludeEnum'
        exclude:
          type: array
          items:
            $ref: '#/components/schemas/FraudExcludeEnum'
    FraudCheckPlannedModule:
      type: object
      properties:
        module:
          $ref: '#/components/schemas/FraudExcludeEnum'
        available:
          type: boolean
        availability_reason:
          type: string
          nullable: true
        will_run:
          type: boolean
        selection_reason:
          type: string
          nullable: true
        estimated_price:
          type: string
          nullable: true
      required:
        - availability_reason
        - available
        - estimated_price
        - module
        - selection_reason
        - will_run
    FraudCheckIdentifierRequest:
      type: object
      properties:
        type:
          allOf:
            - $ref: '#/components/schemas/FraudTypeEnum'
          description: |-
            Identifier type. Determines which namespace fields are required.

            * `email` - Email
            * `phone` - Phone
            * `national_id` - National Id
            * `tax_number` - Tax Number
            * `passport_number` - Passport Number
            * `driving_licence_number` - Driving Licence Number
            * `residence_permit_number` - Residence Permit Number
            * `voter_id` - Voter Id
            * `external_id` - External Id
        value:
          type: string
          minLength: 1
          description: The identifier value, in any customary format.
          maxLength: 255
        country:
          type: string
          description: >-
            ISO-3166 alpha-2 or alpha-3 issuing country. Required for government
            identifier types: the same digits mean different people in different
            countries.
          maxLength: 3
        issuer:
          type: string
          description: >-
            Optional issuing authority or sub-national issuer, when the country
            alone is not unique.
          maxLength: 128
      required:
        - type
        - value
    FraudCheckAttributesRequest:
      type: object
      description: Corroborating attributes. All optional; they widen module coverage.
      properties:
        first_name:
          type: string
          maxLength: 128
        last_name:
          type: string
          maxLength: 128
        full_name:
          type: string
          maxLength: 256
        date_of_birth:
          type: string
          format: date
        nationality:
          type: string
          maxLength: 3
        gender:
          type: string
          maxLength: 16
        address:
          type: string
          maxLength: 512
        city:
          type: string
          maxLength: 128
        state:
          type: string
          maxLength: 128
        postal_code:
          type: string
          maxLength: 32
    FraudExcludeEnum:
      enum:
        - normalization
        - email_risk
        - email_social
        - phone_social
        - phone_risk
        - ip_risk
        - database_validation
        - networks_same_org
        - networks_cross_org
        - biometric_identity
      type: string
      description: |-
        * `normalization` - Normalization
        * `email_risk` - Email Risk
        * `email_social` - Email Social
        * `phone_social` - Phone Social
        * `phone_risk` - Phone Risk
        * `ip_risk` - Ip Risk
        * `database_validation` - Database Validation
        * `networks_same_org` - Networks Same Org
        * `networks_cross_org` - Networks Cross Org
        * `biometric_identity` - Biometric Identity
    FraudTypeEnum:
      enum:
        - email
        - phone
        - national_id
        - tax_number
        - passport_number
        - driving_licence_number
        - residence_permit_number
        - voter_id
        - external_id
      type: string
      description: |-
        * `email` - Email
        * `phone` - Phone
        * `national_id` - National Id
        * `tax_number` - Tax Number
        * `passport_number` - Passport Number
        * `driving_licence_number` - Driving Licence Number
        * `residence_permit_number` - Residence Permit Number
        * `voter_id` - Voter Id
        * `external_id` - External Id
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Your application's API key, from Developers -> API keys in the Business
        Console. The primary key has full access. A named key can be scoped:
        none, read or write per resource, limited to some workflows or to
        approved sessions, to a list of IP addresses, and to an expiry date. 401
        means the key is missing, wrong, revoked or expired; 403 means the key
        has no access to this resource or action, or the request came from an
        address outside its IP list; 404 on a session route means the session is
        outside the key's workflows or statuses. A key without media access
        receives image, video and PDF URLs as null, and a key without sessions
        write receives session links and tokens as null. See
        https://docs.didit.me/console/api-keys.
    BearerAuth:
      type: http
      scheme: bearer
      description: The application's client-credentials access token.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.