> ## 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.

# Show

> Retrieve the full detail of a single payment link transaction belonging to an account. The response includes the related payment link and payment method when available.

The `history_id` path parameter is the numeric transaction id returned as `id` by the list endpoint. A `404` response is returned when no matching transaction exists for the specified account.



## OpenAPI

````yaml https://payment-b2b.singapay.id/api/docs/merchant-api.json get /api/v1.0/payment-link-histories/{account_id}/{history_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 both standard SP000–SP020 codes and
      Direct-Debit-specific codes (`SP_DD_*`). The `/charge` endpoint is
      additionally protected by **`X-Signature`** + **`X-Timestamp`**
      (`verify.signature-internal`); see operation parameters for the signing
      scheme.
  - 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).
paths:
  /api/v1.0/payment-link-histories/{account_id}/{history_id}:
    get:
      tags:
        - Payment Link History
      summary: Show
      description: >-
        Retrieve the full detail of a single payment link transaction belonging
        to an account. The response includes the related payment link and
        payment method when available.


        The `history_id` path parameter is the numeric transaction id returned
        as `id` by the list endpoint. A `404` response is returned when no
        matching transaction exists for the specified account.
      operationId: paymentLinkHistoriesShow
      parameters:
        - name: account_id
          in: path
          description: >-
            ULID of the account that owns the payment link history. Must belong
            to the authenticated merchant.
          required: true
          schema:
            type: string
            example: 01HZX9K3P2J4M6N8Q0R2T4V6W8
        - name: history_id
          in: path
          description: >-
            Numeric id of the payment history record
            (`payment_link_histories.id`), as returned in the list endpoint `id`
            field.
          required: true
          schema:
            type: integer
            example: 85
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponderSuccessPaymentLinkHistory'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponderErrorEnvelope401'
        '403':
          description: Access denied to this account
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponderErrorEnvelope403'
        '404':
          description: Account or history not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponderErrorEnvelope404'
        '422':
          description: Missing `X-PARTNER-ID`
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponderErrorEnvelope422'
      security:
        - BearerAuth: []
          PartnerId: []
components:
  schemas:
    ResponderSuccessPaymentLinkHistory:
      description: >-
        Success envelope returned by the payment link history detail endpoint.
        Wraps a single history record in `data`.
      required:
        - status
        - success
        - data
      properties:
        status:
          description: HTTP status code of the response.
          type: integer
          example: 200
        success:
          description: >-
            Indicates whether the request was processed successfully. Always
            `true` for a 200 response.
          type: boolean
          example: true
        data:
          $ref: '#/components/schemas/PaymentLinkHistoryResource'
          description: The payment link history record.
      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
    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
    PaymentLinkHistoryResource:
      description: >-
        A single payment attempt (transaction) recorded against a payment link.
        Each time a customer initiates payment on a payment link, one history
        record is created — so a payment link may have many histories (e.g. an
        expired/failed attempt followed by a successful one). Core fields are
        produced by `PaymentLinkHistoryTransformer`. By default the response
        also embeds the nested `payment_link` and `payment_method` objects
        (Fractal default includes); these are omitted when the related record is
        absent. All monetary fields are in the account currency (IDR) and all
        timestamps are ISO 8601 strings.
      properties:
        id:
          description: >-
            Unique numeric identifier of this payment history record
            (`payment_link_histories.id`). Use this value as `history_id` when
            calling the show endpoint.
          type: integer
          example: 85
        reff_no:
          description: >-
            Unique reference number of this individual payment attempt. Use it
            to reconcile a specific transaction; partial matching on this field
            is supported by the `reff_no` list filter.
          type: string
          example: '12917720251024134439474'
        payment_link_reff_no:
          description: >-
            Reference number of the parent payment link that this attempt
            belongs to. Null when the related payment link is not available.
          type:
            - string
            - 'null'
          example: PL-20251024-0001
        payment_method_name:
          description: >-
            Human-readable name of the payment channel used for this attempt
            (e.g. `QRIS`, `BRI Virtual Account`, `ShopeePay`). Null when the
            customer has not yet selected a method.
          type:
            - string
            - 'null'
          example: VA BRI
        payment_method_value:
          description: >-
            Channel-specific payment instruction value presented to the customer
            — e.g. the virtual account number, QRIS string, or e-wallet account.
            Null when not yet generated.
          type:
            - string
            - 'null'
          example: '5588867273870397'
        payment_method_additional:
          description: >-
            Additional channel-specific payment detail (e.g. supplementary
            instruction or display string). Null when not applicable.
          type:
            - string
            - 'null'
          example: a.n. SINGA PAYMENT
        expired_at:
          description: >-
            ISO 8601 timestamp after which this payment attempt can no longer be
            paid. Null when the attempt does not expire.
          type:
            - string
            - 'null'
          example: '2025-10-25T13:44:39+07:00'
        amount:
          description: Gross amount the customer is charged for this attempt, in IDR.
          type: number
          example: '1200000.00'
        payment_date:
          description: >-
            ISO 8601 timestamp at which the payment was confirmed paid by the
            channel. Null while the attempt is still pending, failed, or
            expired.
          type:
            - string
            - 'null'
          example: '2025-10-24T13:45:07+07:00'
        balance_after:
          description: >-
            Merchant account balance (IDR) after this transaction was credited.
            Populated only once the payment is settled to the balance; null
            otherwise.
          type:
            - number
            - 'null'
          example: '2500000.00'
        status:
          description: Raw stored status of the payment attempt.
          type: string
          enum:
            - pending
            - paid
            - failed
            - expired
          example: paid
        status_computed:
          description: >-
            Display status derived at read time: identical to `status`, except a
            `pending` attempt whose `expired_at` has already passed is reported
            as `expired`. Prefer this field for UI display.
          type: string
          enum:
            - pending
            - paid
            - failed
            - expired
          example: paid
        is_expired:
          description: >-
            True when `expired_at` is in the past (regardless of the stored
            `status`). False when there is no expiry or it has not yet passed.
          type: boolean
          example: true
        customer_name:
          description: Name of the paying customer, if captured during checkout.
          type:
            - string
            - 'null'
          example: ''
        customer_email:
          description: Email address of the paying customer, if captured during checkout.
          type:
            - string
            - 'null'
          example: ''
        customer_phone:
          description: Phone number of the paying customer, if captured during checkout.
          type:
            - string
            - 'null'
          example: ''
        ip_address:
          description: >-
            IP address from which the customer initiated this payment attempt,
            if captured.
          type:
            - string
            - 'null'
          example: 103.133.68.7, 103.133.68.7
        locations:
          description: >-
            Opaque geolocation/context data captured for this attempt, as stored
            on the model. Structure is not guaranteed; treat as free-form. Null
            when not captured.
          type:
            - object
            - 'null'
          additionalProperties: true
        processed_timestamp:
          description: >-
            ISO 8601 timestamp at which the payment was processed by the payment
            channel/vendor. Null until processing occurs.
          type:
            - string
            - 'null'
          example: '2025-10-24T13:45:07+07:00'
        has_settle:
          description: >-
            True when the funds from this transaction have been settled to the
            merchant. Exposed as the `has_settle` list filter.
          type: boolean
          example: true
        settle_at:
          description: >-
            ISO 8601 timestamp at which the transaction was settled to the
            merchant. Null when not yet settled.
          type:
            - string
            - 'null'
          example: '2025-10-24T15:00:00+07:00'
        optional_metadata:
          description: >-
            Arbitrary key/value metadata attached to the payment link / attempt
            by the merchant at creation time. Echoed back as-is. Null when none
            was supplied.
          type:
            - object
            - 'null'
          additionalProperties: true
        created_at:
          description: >-
            ISO 8601 timestamp when this payment history record was created
            (i.e. when the attempt was initiated).
          type:
            - string
            - 'null'
          example: '2025-10-24T13:44:39+07:00'
        updated_at:
          description: ISO 8601 timestamp of the most recent update to this record.
          type:
            - string
            - 'null'
          example: '2025-10-29T11:12:17+07:00'
      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
    ResponderErrorBody422:
      properties:
        code:
          type: integer
          example: 422
        message:
          type: string
          example: Validation error.
        errors:
          type: object
          example:
            field:
              - error message
      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

````