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

# Simulate incoming payment review case

> Create one synthetic incoming-payment review case for sandbox, public-test, and Playground use. The created case feeds the existing transaction review flow: inspect it via GET /transactions or GET /transactions/{transactionId}, reject it via POST /transactions/{transactionId}/reject, and, when allowed, approve it via POST /transactions/{transactionId}/approve. This route is create-only, does not expose internal compliance-engine internals, and does not become a second transaction API family. Scenario semantics are frozen to sanctions_hit (sanctioned external sender/counterparty, decisionMode=reject_only), sender_kyc_not_approved (sender compliance status fails receiver acceptance, decisionMode=reject_only), and counterparty_info_incomplete (manual review required because required counterparty fields are missing, decisionMode=manual_review_required). For counterparty_info_incomplete, the created review case later exposes missingRequiredFields = [senderFullLegalName, senderCountryCode, senderDateOfBirthOrRegistrationId, purposeOfPayment] on the existing transaction review reads.



## OpenAPI

````yaml /openapi/blips-public-reference.yaml post /sandbox/incoming-payments/simulate
openapi: 3.1.0
info:
  title: BLIPS Public Reference API
  version: '2026-04-08'
  description: >-
    Public OpenAPI 3.1 subset for the first BLIPS Mintlify API Reference and
    Playground release. This document is bound to the confirmed Public Test
    Backend at https://public-test.blips.network, includes only the approved
    first-release public endpoints, uses only internal `$ref` values, and
    excludes callback-only webhook documentation and operator-only surfaces.
servers:
  - url: https://public-test.blips.network
    description: >-
      Confirmed Public Test Backend ingress target for public BLIPS API
      Reference, Playground, and internet-testable Try It flows.
security:
  - BasicAuth: []
tags:
  - name: Platform Setup
    description: >-
      Bootstrap and platform configuration surfaces for establishing the public
      BLIPS integration context.
  - name: Sandbox API
    description: >-
      Sandbox-only externally displayed helper surfaces. These routes either
      adjust quote inputs or create incoming-payment review cases, but they
      always feed the existing quote or transaction families and never become
      second outward API families.
  - name: Tokens
    description: >-
      Platform-scoped API credential create, list, detail, and revoke
      operations.
  - name: Customers
    description: >-
      Customer onboarding, profile lifecycle, and PPV payment-address issuance
      surfaces.
  - name: Accounts
    description: >-
      Customer-bound internal-account and external-account surfaces kept in the
      first-layer public contract.
  - name: Same-Currency Transfers
    description: >-
      Same-currency receiver lookup plus incoming and outgoing transfer
      primitives.
  - name: Cross-Currency Transfers
    description: >-
      PPV-first receiver lookup, quote creation/readback, and quote execution
      for cross-currency flows.
  - name: Transactions
    description: Transaction readback plus bounded incoming-review decision operations.
  - name: Webhooks
    description: >-
      Webhook connectivity verification surface for the public BLIPS
      integration.
paths:
  /sandbox/incoming-payments/simulate:
    post:
      tags:
        - Sandbox API
      summary: Simulate incoming payment review case
      description: >-
        Create one synthetic incoming-payment review case for sandbox,
        public-test, and Playground use. The created case feeds the existing
        transaction review flow: inspect it via GET /transactions or GET
        /transactions/{transactionId}, reject it via POST
        /transactions/{transactionId}/reject, and, when allowed, approve it via
        POST /transactions/{transactionId}/approve. This route is create-only,
        does not expose internal compliance-engine internals, and does not
        become a second transaction API family. Scenario semantics are frozen to
        sanctions_hit (sanctioned external sender/counterparty,
        decisionMode=reject_only), sender_kyc_not_approved (sender compliance
        status fails receiver acceptance, decisionMode=reject_only), and
        counterparty_info_incomplete (manual review required because required
        counterparty fields are missing, decisionMode=manual_review_required).
        For counterparty_info_incomplete, the created review case later exposes
        missingRequiredFields = [senderFullLegalName, senderCountryCode,
        senderDateOfBirthOrRegistrationId, purposeOfPayment] on the existing
        transaction review reads.
      operationId: simulateSandboxIncomingPaymentReviewCase
      parameters:
        - $ref: '#/components/parameters/XPlatformIdHeader'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SandboxIncomingPaymentSimulationRequest'
            examples:
              sanctionsHit:
                value:
                  receiverCustomerId: cust_123
                  scenario: sanctions_hit
                  amountMinor: 200000
                  currencyCode: USD
              senderKycNotApproved:
                value:
                  receiverCustomerId: cust_123
                  scenario: sender_kyc_not_approved
                  amountMinor: 200000
                  currencyCode: USD
              counterpartyInfoIncomplete:
                value:
                  receiverCustomerId: cust_123
                  scenario: counterparty_info_incomplete
                  amountMinor: 200000
                  currencyCode: USD
      responses:
        '201':
          description: >-
            Synthetic incoming-payment review case created. Use the returned
            transactionId with the existing transaction review APIs.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SandboxIncomingPaymentSimulationResponse'
              examples:
                sanctionsHitCreated:
                  value:
                    transactionId: 6fdd05e9-5293-41ee-9f77-58beea38d8a2
                    receiverCustomerId: cust_123
                    scenario: sanctions_hit
                    type: INCOMING
                    status: PENDING
                    decisionRequired: true
                    receivedAmount:
                      currencyCode: USD
                      amountMinor: '200000'
                    createdAt: '2026-04-12T10:30:00Z'
                senderKycNotApprovedCreated:
                  value:
                    transactionId: 2349921c-cd8d-4619-9090-f18bc807c48d
                    receiverCustomerId: cust_123
                    scenario: sender_kyc_not_approved
                    type: INCOMING
                    status: PENDING
                    decisionRequired: true
                    receivedAmount:
                      currencyCode: USD
                      amountMinor: '200000'
                    createdAt: '2026-04-12T10:31:00Z'
                counterpartyInfoIncompleteCreated:
                  value:
                    transactionId: 3e68ef8b-ac87-4e62-8c79-c4a38fb5450b
                    receiverCustomerId: cust_123
                    scenario: counterparty_info_incomplete
                    type: INCOMING
                    status: PENDING
                    decisionRequired: true
                    receivedAmount:
                      currencyCode: USD
                      amountMinor: '200000'
                    createdAt: '2026-04-12T10:32:00Z'
        '400':
          description: >-
            Invalid request body, invalid X-Platform-Id header, or missing
            X-Platform-Id when sandbox multitenant selection is required.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/SandboxIncomingPaymentSimulationBadRequestResponse
              examples:
                invalidRequestBody:
                  value:
                    error_code: INVALID_REQUEST
                    message: Invalid request body
                invalidPlatformId:
                  value:
                    error_code: INVALID_PLATFORM_ID
                    message: X-Platform-Id must be a UUIDv4 value
                missingPlatformId:
                  value:
                    error_code: MISSING_PLATFORM_ID
                    message: >-
                      X-Platform-Id is required when BLIPS_MULTITENANT is
                      enabled
        '401':
          description: >-
            Missing or invalid authentication for the current sandbox platform
            context.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/SandboxIncomingPaymentSimulationUnauthorizedResponse
              examples:
                unauthorized:
                  value:
                    error_code: UNAUTHORIZED
                    message: Unauthorized
        '404':
          description: >-
            The addressed receiverCustomerId does not resolve to an existing
            receiver customer in the current platform scope.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/SandboxIncomingPaymentSimulationNotFoundResponse
              examples:
                receiverCustomerNotFound:
                  value:
                    error_code: NOT_FOUND
                    message: Receiver customer not found
      security:
        - BasicAuth: []
components:
  parameters:
    XPlatformIdHeader:
      name: X-Platform-Id
      in: header
      required: false
      description: >-
        Optional platform scope selector for sandbox multitenant/internal
        compatibility. Basic-auth integration requests normally omit this header
        because platform context is derived from credentials. If supplied, it
        must be a UUIDv4 value.
      schema:
        type: string
        pattern: >-
          ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$
  schemas:
    SandboxIncomingPaymentSimulationRequest:
      type: object
      description: >-
        Exact request contract for creating one synthetic incoming-payment
        review case. Additional properties are not allowed.
      additionalProperties: false
      required:
        - receiverCustomerId
        - scenario
        - amountMinor
        - currencyCode
      properties:
        receiverCustomerId:
          type: string
          minLength: 1
          description: >-
            Receiver customer identifier for the synthetic incoming payment
            review case.
        scenario:
          type: string
          enum:
            - sanctions_hit
            - sender_kyc_not_approved
            - counterparty_info_incomplete
          description: >-
            Frozen sandbox scenario selector. sanctions_hit means the external
            sender/counterparty is sanctioned. sender_kyc_not_approved means the
            external sending VASP or FI supplied a sender compliance status that
            fails receiver-platform acceptance. counterparty_info_incomplete
            means manual review is required because required counterparty fields
            are missing; the created review case later exposes
            missingRequiredFields = [senderFullLegalName, senderCountryCode,
            senderDateOfBirthOrRegistrationId, purposeOfPayment] through the
            existing transaction review reads.
        amountMinor:
          type: integer
          minimum: 1
          description: Positive incoming amount in minor units.
        currencyCode:
          type: string
          pattern: ^[A-Z]{3}$
          description: Incoming payment currency as an uppercase 3-letter code.
    SandboxIncomingPaymentSimulationResponse:
      type: object
      description: >-
        Bounded create acknowledgement for the synthetic incoming-payment review
        case. This is not a second transaction detail model; continue on the
        existing transaction review APIs using transactionId.
      additionalProperties: false
      required:
        - transactionId
        - receiverCustomerId
        - scenario
        - type
        - status
        - decisionRequired
        - receivedAmount
        - createdAt
      properties:
        transactionId:
          type: string
          minLength: 1
          description: >-
            Canonical follow-up identifier for GET /transactions/{transactionId}
            and POST /transactions/{transactionId}/reject.
        receiverCustomerId:
          type: string
          minLength: 1
          description: Receiver customer targeted by the simulation.
        scenario:
          type: string
          enum:
            - sanctions_hit
            - sender_kyc_not_approved
            - counterparty_info_incomplete
          description: Frozen sandbox scenario applied to the created review case.
        type:
          type: string
          enum:
            - INCOMING
          description: Fixed transaction type for this sandbox simulation route.
        status:
          type: string
          enum:
            - PENDING
          description: Fixed initial review status for the created incoming payment case.
        decisionRequired:
          type: boolean
          enum:
            - true
          description: >-
            Always true because the synthetic case is created in review-required
            state.
        receivedAmount:
          type: object
          additionalProperties: false
          required:
            - currencyCode
            - amountMinor
          properties:
            currencyCode:
              type: string
              pattern: ^[A-Z]{3}$
              description: Created incoming-payment currency.
            amountMinor:
              type: string
              pattern: ^[0-9]+$
              description: >-
                Created incoming amount in minor units, represented as a string
                to match the existing transaction money shape.
        createdAt:
          type: string
          format: date-time
          description: ISO timestamp for when the synthetic review case was created.
    SandboxIncomingPaymentSimulationBadRequestResponse:
      type: object
      description: >-
        Bad-request envelope for sandbox incoming-payment simulation validation
        failures.
      additionalProperties: false
      required:
        - error_code
        - message
      properties:
        error_code:
          type: string
          enum:
            - INVALID_REQUEST
            - INVALID_PLATFORM_ID
            - MISSING_PLATFORM_ID
          description: >-
            Stable sandbox error code for request-body or platform-selection
            validation failure.
        message:
          type: string
          description: Human-readable explanation of the sandbox request failure.
    SandboxIncomingPaymentSimulationUnauthorizedResponse:
      type: object
      description: Unauthorized-response envelope for sandbox incoming-payment simulation.
      additionalProperties: false
      required:
        - error_code
        - message
      properties:
        error_code:
          type: string
          enum:
            - UNAUTHORIZED
          description: Stable sandbox error code for missing or invalid authentication.
        message:
          type: string
          description: Human-readable authorization failure summary.
    SandboxIncomingPaymentSimulationNotFoundResponse:
      type: object
      description: >-
        Not-found-response envelope for sandbox incoming-payment simulation when
        the addressed receiver customer does not exist in scope.
      additionalProperties: false
      required:
        - error_code
        - message
      properties:
        error_code:
          type: string
          enum:
            - NOT_FOUND
          description: >-
            Stable sandbox error code when the addressed receiver customer does
            not exist in the current platform scope.
        message:
          type: string
          description: Human-readable not-found summary.
  securitySchemes:
    BasicAuth:
      type: http
      scheme: basic
      description: >-
        Integration-key Basic Auth (`clientId:clientSecret`) as documented in
        docs/public/AUTHENTICATION.md.

````