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

# Inquiry Status

> Checks the current status of a single QRIS money-in transaction, identified by its numeric `id` (returned by the generate and list endpoints). Use `status_computed` and `is_expired` to determine whether the QRIS has been paid, is still payable, or has expired. Returns the same payload as `GET /api/v1.0/qris-dynamic/{account_id}/show/{id}`.



## OpenAPI

````yaml https://payment-b2b.singapay.id/api/docs/merchant-api.json get /api/v1.0/qris-dynamic/{account_id}/inquiry-status/{id}
openapi: 3.1.0
info:
  title: Singa Merchant API
  description: >-
    OpenAPI specification for the merchant/partner HTTP API. All routes below
    are additionally protected by `ip.whitelisted.merchant` — the caller IP must
    be registered for the credential or merchant. Obtain a JWT using `POST
    /api/v1.0/access-token/b2b` (Basic auth) or `POST
    /api/v1.1/access-token/b2b` (X-Signature) before calling secured endpoints.
  version: 1.0.0
servers:
  - url: https://sandbox-payment-b2b.singapay.id
    description: >-
      API host. Paths include `/api` prefix (see `RouteServiceProvider`).
      Replace scheme/host with your environment.
security: []
tags:
  - name: Security
    description: >-
      Merchant authentication (`OauthMerchantTokenController`). **v1.1** B2B
      token uses `X-CLIENT-ID`, `X-PARTNER-ID`, and `X-Signature` (no Basic
      auth). Secured routes also require the issued Bearer JWT plus
      `X-PARTNER-ID`.
  - name: Accounts
    description: >-
      Account management (`routes/merchantApiRoute.php`, `v1.0`). Path parameter
      `{id}` is always the account ULID.
  - name: Balance Inquiry
    description: >-
      Merchant and per-account balance inquiry (`BalanceController`, `v1.0`).
      Path `account_id` is the account ULID.
  - name: Statements
    description: >-
      Per-account statement list and detail
      (`AccountController::accountStatements`, `accountStatementDetail`, prefix
      `v1.0/statements`). Flugger responses; detail path param `{statement_id}`
      maps to `statements.transaction_id`.
  - name: Payment Link
    description: >-
      Payment link CRUD and payment-method catalog (`PaymentLinkApiController`,
      prefix `v1.0/payment-link-manage`). `account_id` is ULID;
      `payment_link_id` is numeric `payment_links.id`.
  - name: Payment Link History
    description: >-
      Payment link transaction/history listing and detail
      (`PaymentLinkApiController`, prefix `v1.0/payment-link-histories`).
      `history_id` is numeric `payment_link_histories.id`.
  - name: Virtual Account
    description: >-
      Native VA CRUD (`VirtualAccountController`, prefix
      `v1.0/virtual-accounts`). `account_id` and `virtual_account_id` are ULIDs.
  - name: VA Transaction
    description: >-
      VA money-in transaction listing and detail (`VirtualAccountController`,
      prefix `v1.0/va-transactions`).
  - name: QRIS (Money In)
    description: >-
      MPM dynamic QRIS list, show, and generate (`QrisMpmDynamicApiController`,
      prefix `v1.0/qris-dynamic`).
  - name: QRIS (Money Out)
    description: >-
      Issuer MPM decode/inquiry, payment credit (money out), and transaction
      status (`QrisIssuerMpmController`, `QrisApiV2Controller::checkStatus`,
      prefix `v2.0/qris`). Related list/detail: `GET
      /api/v2.0/qris/transaction/...`.
  - name: E-Wallet (Money In)
    description: >-
      E-Wallet Native checkout and transactions (`EwalletNativeApiController`,
      `EwalletNativeTransactionApiController`, `EwalletNativeV2ApiController`).
      Paths include `v1.0/ewallet-native`, `v1.0/ewallet-native-transactions`,
      and `v2.0/ewallet-native`.
  - name: E-Wallet (Money Out)
    description: >-
      E-wallet disbursement / top-up to beneficiary wallets
      (`EWalletTopUpController`, prefix `v2.0/ewallet`). Responses use the
      custom **`MerchantV2ApiEnvelope`** with **`MerchantV2ResponseCode`**
      (SP000–SP020).
  - name: Card (Money In)
    description: >-
      One-time card payment, cancel, and inquiry
      (`CardPaymentMerchantApiController`, prefix `v2.0/card`).
  - name: Subscription (Recurring)
    description: >-
      Credit-card recurring subscription plans (`SubscriptionPlanApiController`,
      prefix `v2.0/recurring`). Plan `{id}` is UUID (`sub_plans.id`).
  - name: Direct Debit
    description: >-
      Direct Debit — bind a customer bank account once via hosted webview, then
      charge it host-to-host (`DirectDebitMerchantController`, prefix
      `v2.0/direct-debit`). Binding `{binding_id}` and transaction
      `{transaction_id}` are UUIDs. Responses use the
      **`MerchantV2ApiEnvelope`** with standard Singapay SP000–SP020 dictionary
      codes and messages. Field-level validation detail is returned in
      `data.errors` for **SP018**. The `/charge` endpoint is additionally
      protected by **`X-Signature`** + **`X-Timestamp`**
      (`verify.signature-internal`); see operation parameters for the signing
      scheme. Asynchronous outcomes (bind / unbind / charge) are HTTP POST
      callbacks to `callback_urls.direct_debit_notif_url` — see the Direct Debit
      **webhooks** (`directDebitBindingNotification`,
      `directDebitUnbindingNotification`, `directDebitTransactionNotification`).
      All three share that single URL; discriminate on `event`.
  - name: Account Transfer
    description: >-
      Move funds between sub-accounts within the same merchant
      (`AnotherAccountApiController`, prefix `v1.0/account-transfer`). The
      transfer endpoint requires request signature headers
      (`verify.signature-internal`). Both accounts must belong to the
      authenticated merchant and be accessible to the credential.
  - name: Disbursement (Money Out)
    description: >-
      Bank disbursement (`DisbursementController` **v1.0**,
      `DisbursementV2Controller` **v2.0**). **v1.0**
      list/show/fee/beneficiary/transfer use Flugg envelopes; v1 inquiry-status
      uses the **custom v2 envelope** (`MerchantV2ApiEnvelope`, codes
      **SP000–SP020**). **v2.0** check-beneficiary, transfer, and inquiry-status
      use the same custom envelope — see component schema
      **`MerchantV2ResponseCode`** for the full response code table.
  - name: Cardless Withdrawal
    description: >-
      Cardless withdrawal API for initiating ATM cash withdrawals without a
      physical card. Supports creating withdrawals with OTP generation, listing
      transaction history, viewing transaction details, canceling pending
      withdrawals, and deleting canceled records. All endpoints use the
      `v1.0/cardless-withdrawals` route prefix and the standard success/error
      response envelope. Path parameter `{id}` refers to the `transaction_id`
      (platform-assigned business identifier).
  - name: Retail Store
    description: >-
      Native Retail Store money-in — generate an Alfamart / Indomaret payment
      code the customer pays at the cashier, then read its status
      (`RetailTransactionController`, prefix `v1.0/retail-transactions`). Only
      two endpoints: create and show. `account_id` is the account ULID;
      `transaction_id` is the platform-assigned
      `retail_transactions.transaction_id` string returned by create. Payment
      confirmation arrives as a POST callback to
      `callback_urls.transaction_notif_url` with `event = retail-transaction`.
  - name: Settlement Transaction
    description: >-
      Read-only listing of the transactions inside a settlement
      (`SettlementMerchantApiController`, `GET
      v1.0/settlement-transactions/{identifier}`). A sub-menu of the merchant
      Transaction Record APIs. Merchant-scoped — only settlements with status
      `completed` are exposed. `{identifier}` is the numeric `settlements.id` or
      the `settlements.reference_no`. Each item mirrors the money-in transaction
      shape (`account`, `fees`, `amount`, `post_timestamp`,
      `processed_timestamp`, `has_settle`, `settle_at`). Merchants cannot
      create, approve, or refund settlements; those actions are BOSS-only.
paths:
  /api/v1.0/qris-dynamic/{account_id}/inquiry-status/{id}:
    get:
      tags:
        - QRIS (Money In)
      summary: Inquiry Status
      description: >-
        Checks the current status of a single QRIS money-in transaction,
        identified by its numeric `id` (returned by the generate and list
        endpoints). Use `status_computed` and `is_expired` to determine whether
        the QRIS has been paid, is still payable, or has expired. Returns the
        same payload as `GET /api/v1.0/qris-dynamic/{account_id}/show/{id}`.
      operationId: qrisDynamicInquiryStatus
      parameters:
        - name: account_id
          in: path
          description: >-
            ULID of the account that owns the QRIS transaction. Must belong to
            the authenticated merchant.
          required: true
          schema:
            description: Account ULID
            type: string
            example: 01H9X8ZK3M7QF4N2VTB6RYJWPC
        - name: id
          in: path
          description: >-
            QRIS transaction identifier (`id` field of the QRIS transaction
            resource).
          required: true
          schema:
            type: integer
            example: 103
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponderSuccessQrisTransaction'
        '401':
          description: Unauthorized (invalid or revoked token, invalid credentials)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponderErrorEnvelope401'
        '403':
          description: Access denied to this account, or merchant account is frozen
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponderErrorEnvelope403'
        '404':
          description: Account not found, or QRIS not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponderErrorEnvelope404'
        '405':
          description: Method not allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponderErrorEnvelope405'
        '422':
          description: Missing `X-PARTNER-ID` header
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponderErrorEnvelope422'
        '503':
          description: Service temporarily unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponderErrorEnvelope503'
      security:
        - BearerAuth: []
          PartnerId: []
components:
  schemas:
    ResponderSuccessQrisTransaction:
      required:
        - status
        - success
        - data
      properties:
        status:
          description: HTTP status code.
          type: integer
          example: 200
        success:
          description: Indicates whether the request was successful.
          type: boolean
          example: true
        data:
          $ref: '#/components/schemas/QrisTransactionResource'
          description: QRIS transaction resource payload.
      type: object
    ResponderErrorEnvelope401:
      required:
        - status
        - success
        - error
      properties:
        status:
          type: integer
          example: 401
        success:
          type: boolean
          example: false
        error:
          $ref: '#/components/schemas/ResponderErrorBody401'
      type: object
    ResponderErrorEnvelope403:
      required:
        - status
        - success
        - error
      properties:
        status:
          type: integer
          example: 403
        success:
          type: boolean
          example: false
        error:
          $ref: '#/components/schemas/ResponderErrorBody403'
      type: object
    ResponderErrorEnvelope404:
      required:
        - status
        - success
        - error
      properties:
        status:
          type: integer
          example: 404
        success:
          type: boolean
          example: false
        error:
          $ref: '#/components/schemas/ResponderErrorBody404'
      type: object
    ResponderErrorEnvelope405:
      required:
        - status
        - success
        - error
      properties:
        status:
          type: integer
          example: 405
        success:
          type: boolean
          example: false
        error:
          $ref: '#/components/schemas/ResponderErrorBody405'
      type: object
    ResponderErrorEnvelope422:
      required:
        - status
        - success
        - error
      properties:
        status:
          type: integer
          example: 422
        success:
          type: boolean
          example: false
        error:
          $ref: '#/components/schemas/ResponderErrorBody422'
        data:
          type: object
          example:
            errors:
              field:
                - error message
          additionalProperties: true
      type: object
    ResponderErrorEnvelope503:
      required:
        - status
        - success
        - error
      properties:
        status:
          type: integer
          example: 503
        success:
          type: boolean
          example: false
        error:
          $ref: '#/components/schemas/ResponderErrorBody503'
      type: object
    QrisTransactionResource:
      description: >-
        QRIS transaction resource returned by the API for MPM static and dynamic
        payments.
      properties:
        id:
          description: >-
            QRIS transaction identifier. Use this value as `{id}` in path
            parameters.
          type: integer
          example: 103
        reff_no:
          description: >-
            System-generated reference number for the QRIS transaction. Unique
            per transaction.
          type: string
          example: 6601K5X8Z3M7QF4N2VTB6RYJWPCD
        merchant_reff_no:
          description: >-
            Merchant reference number sent in the generate request. Free-form
            and not guaranteed unique; the same value may appear on multiple
            transactions.
          type:
            - string
            - 'null'
          example: INV20240513001
        status:
          description: >-
            Stored transaction status. `open` = waiting for payment, `success` =
            paid. A QRIS past its `expired_at` may still be stored as `open`;
            use `status_computed` for the effective status.
          type: string
          enum:
            - open
            - pending
            - success
            - partially-success
            - expired
            - canceled
            - failed
            - pending-refund
            - refunded
            - partially-refunded
            - failed-refund
            - reversed
          example: open
        status_computed:
          description: >-
            Effective status. Same as `status`, except an `open` QRIS whose
            `expired_at` has passed is returned as `expired`. Recommended field
            for determining payment state.
          type: string
          enum:
            - open
            - pending
            - success
            - partially-success
            - expired
            - canceled
            - failed
            - pending-refund
            - refunded
            - partially-refunded
            - failed-refund
            - reversed
          example: open
        is_expired:
          description: >-
            Whether `expired_at` has passed. Can be `true` for an already-paid
            transaction; combine with `status_computed` to determine payability.
          type: boolean
          example: false
        qr_data:
          description: QR code payload string for customer scanning.
          type:
            - string
            - 'null'
          example: 00020101021226620015ID.SINGAPAY.WWW...
        kind:
          description: >-
            Whether the payment was made from the same network (`on-us`) or
            another issuer (`off-us`). May be `null` until known.
          type:
            - string
            - 'null'
          enum:
            - on-us
            - off-us
            - null
          example: on-us
        type:
          description: QRIS type. QRIS generated via this API is always `mpm-dynamic`.
          type: string
          enum:
            - mpm-static
            - mpm-dynamic
          example: mpm-dynamic
        amount:
          description: Base payment amount (IDR).
          type: number
          example: 10000
        tip_indicator:
          description: >-
            Tip indicator. Tips are not supported for QRIS transactions; always
            an empty string.
          type: string
          example: ''
        tip_value:
          description: Tip value. Tips are not supported for QRIS transactions; always `0`.
          type: number
          example: 0
        tip_amount:
          description: >-
            Tip amount. Tips are not supported for QRIS transactions; always
            `0`.
          type: number
          example: 0
        total_amount:
          description: >-
            Total amount paid (IDR). Equal to `amount` since tips are not
            supported.
          type: number
          example: 10000
        mdr_percentage:
          description: Merchant discount rate percentage applied to the transaction.
          type:
            - number
            - 'null'
          example: 1.5
        mdr_cost:
          description: Merchant discount rate cost amount.
          type:
            - number
            - 'null'
          example: 150
        our_margin:
          description: Platform margin amount for the transaction.
          type:
            - number
            - 'null'
          example: 50
        vendor_fee:
          description: Payment vendor fee amount.
          type:
            - number
            - 'null'
          example: 150
        settled_to_merchant_amount:
          description: Net amount settled to the merchant.
          type:
            - number
            - 'null'
          example: 9750
        acquirer_name:
          description: Name of the acquiring institution.
          type:
            - string
            - 'null'
          example: SingaPay
        acquirer_nns:
          description: Acquirer NNS identifier.
          type:
            - string
            - 'null'
          example: '1234567890'
        issuer_name:
          description: Name of the issuing institution.
          type:
            - string
            - 'null'
          example: SingaPay
        issuer_nns:
          description: Issuer NNS identifier.
          type:
            - string
            - 'null'
          example: '1234567890'
        customer_pan:
          description: Customer primary account number when available.
          type:
            - string
            - 'null'
          example: '1234567890'
        customer_name:
          description: Customer name from the payment source.
          type:
            - string
            - 'null'
          example: John Doe
        customer_account_type:
          description: Customer account type from the payment source.
          type:
            - string
            - 'null'
          example: UNSPECIFIED
        customer_data:
          description: Additional customer data returned from the payment network.
          type:
            - object
            - 'null'
          example:
            pan: '1234567890'
            name: John Doe
            account_type: UNSPECIFIED
          additionalProperties: true
        has_reconcile:
          description: Whether the transaction has been reconciled.
          type: boolean
          example: false
        reconcile_at:
          description: Reconciliation datetime in ISO 8601 format.
          type:
            - string
            - 'null'
          example: '2024-05-13T00:00:00Z'
        reconcile_by:
          description: Actor or system that performed reconciliation.
          type:
            - string
            - 'null'
          example: SYSTEM
        had_settled_to_merchant:
          description: Whether settlement to merchant has occurred.
          type: boolean
          example: false
        settled_to_merchant_at:
          description: Settlement-to-merchant datetime in ISO 8601 format.
          type:
            - string
            - 'null'
          example: '2024-05-13T00:00:00Z'
        has_settle:
          description: Whether the transaction has been settled.
          type: boolean
          example: false
        settle_at:
          description: Settlement datetime in ISO 8601 format.
          type:
            - string
            - 'null'
          example: '2024-05-13T00:00:00Z'
        settle_eligible_at:
          description: >-
            Datetime from which the transaction becomes eligible for settlement
            to the merchant balance, in ISO 8601 format.
          type:
            - string
            - 'null'
          example: '2024-05-14T00:00:00+07:00'
        created_at:
          description: Resource creation datetime in ISO 8601 format.
          type: string
          example: '2024-05-13T00:00:00Z'
        updated_at:
          description: Last update datetime in ISO 8601 format.
          type: string
          example: '2024-05-13T00:00:00Z'
        expired_at:
          description: Expiration datetime in ISO 8601 format.
          type:
            - string
            - 'null'
          example: '2024-05-13T00:00:00Z'
        deleted_at:
          description: Soft-deletion datetime in ISO 8601 format when applicable.
          type:
            - string
            - 'null'
          example: '2024-05-13T00:00:00Z'
        events_count:
          description: Number of related transaction events recorded.
          type: integer
          example: 1
      type: object
    ResponderErrorBody401:
      properties:
        code:
          type: integer
          example: 401
        message:
          type: string
          example: Unauthorized merchant, please sign in
      type: object
    ResponderErrorBody403:
      properties:
        code:
          type: integer
          example: 403
        message:
          type: string
          example: Access denied.
      type: object
    ResponderErrorBody404:
      properties:
        code:
          type: integer
          example: 404
        message:
          type: string
          example: Account not found.
      type: object
    ResponderErrorBody405:
      properties:
        code:
          type: integer
          example: 4059901
        message:
          type: string
          example: >-
            The PATCH method is not supported for this route. Supported methods:
            GET, HEAD, POST.
      type: object
    ResponderErrorBody422:
      properties:
        code:
          type: integer
          example: 422
        message:
          type: string
          example: Validation error.
        errors:
          type: object
          example:
            field:
              - error message
      type: object
    ResponderErrorBody503:
      properties:
        code:
          type: integer
          example: 503
        message:
          type: string
          example: Service temporarily unavailable.
      type: object
  securitySchemes:
    BearerAuth:
      type: http
      description: >-
        JWT issued by `POST /api/v1.1/access-token/b2b`. Send `Authorization:
        Bearer <token>`.
      bearerFormat: JWT
      scheme: bearer
    PartnerId:
      type: apiKey
      description: Merchant API key (`Credential.api_key`). Required on every request.
      name: X-PARTNER-ID
      in: header

````

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