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

# List transactions (identified + optionally unidentified) for an integration

> Returns a paginated list of transactions for the calling integration: the cashier and finance view of everything that settled through Feddi (wallet payments, top-ups, refunds, voids, and bonus credits). Beyond the core ledger fields, the response flattens the customer-identity context to top-level fields: `customer_phone`, `customer_name`, `identified_method` (how the payer was resolved: `phone`, `qr`, `short_code`, `card_fingerprint`, or `unidentified`), `applied_discount_minor`, and a stable `receipt_number`. By default the list returns **only identified transactions**; pass `include_unidentified=true` to merge in anonymous-session settlements for the cashier's full till view. Money is server-authoritative: every amount is a minor-units integer paired with an explicit `currency`. Redemption secrets (the session code, QR nonce, and reward code held in transaction metadata) are stripped server-side and **never leave the boundary**. Results are tenant-scoped to the integration named in the path AND the `x-api-key`: an `{integrationId}` that does not match the key's integration resolves to `401`/`403`, never another tenant's rows. Read-only and cursor-paginated, filterable by `status`, a date window, and `branch_id`. Rows reflect the richness of the session that produced each transaction: settlements captured with full basket lines and identity return detailed rows, while thin settlements come back sparse.



## OpenAPI

````yaml /api-reference/openapi.yaml get /{integrationId}/transactions
openapi: 3.1.0
info:
  title: Feddi Partner API
  version: '2026-06-01'
  description: >-
    Operate a Feddi closed-loop wallet and loyalty program at the point of sale:
    identify customers, read balances, accept wallet payments, run top-ups, and
    reconcile transactions.


    All amounts are integer minor units with an explicit ISO-4217 currency.
    Balances are merchant-held and closed-loop.


    Every response uses a typed envelope (`ok` / `data` / `error` / `meta`) with
    string error codes (never a bare HTTP number) and an idempotency-replay
    flag. Authenticate with the `x-api-key` header; exchange it for a
    short-lived POS terminal JWT for hot-path calls.


    Self-validate against this document (`GET /openapi`) and read `GET
    /capabilities` for the credential types, currencies, and features enabled
    for your integration before assuming any enum.


    Operations are tagged `x-feddi-availability: ga` (stable) or `beta`
    (callable, contract may still change additively); confirm what is enabled
    for your credentials via `GET /capabilities`.


    Sandbox access is granted per partner agreement; request credentials from
    your Feddi contact.
servers:
  - url: https://api.feddi.io/v1/partner
    description: production
  - url: https://api.dev.feddi.io/v1/partner
    description: dev
security:
  - ApiKeyAuth: []
tags:
  - name: platform
    description: >-
      Platform cross-cutting: health, capabilities, openapi self-serve, merchant
      provisioning, settlement, reconciliation.
  - name: checkout_session
    description: >-
      Checkout sessions: every interaction opens a session, then identity and
      basket attach to it, and payment, top-up, and offers run against it.
  - name: auth
    description: >-
      Partner authentication + onboarding: API key lifecycle, POS terminal JWT
      exchange, terminal heartbeat.
  - name: customers
    description: >-
      Customer lookup + identification: resolve identity, cashier-panel
      summaries, preferences, GDPR export/erase.
  - name: enrollment
    description: >-
      Enrollment + signup: OTP enroll, cashback claims, identity/consent,
      customer correction + merge.
  - name: payments
    description: >-
      Payments + redemption: debit wallet (promo-first), balance-check, void,
      refund, QR mint.
  - name: topup
    description: >-
      Wallet top-up: 2-step prepare/confirm, reload-bonus grants, SKU top-up,
      settlement + reconciliation.
  - name: incentives
    description: >-
      Incentives + offers: offer feeds, apply/redeem/release locks, proposals,
      budget envelopes, points, grant clawback.
  - name: transactions
    description: >-
      Transactions + receipts: transaction detail, void, receipts, disputes,
      settlements, reconciliation, exports.
  - name: webhooks
    description: >-
      Webhooks + events: subscriptions, delivery history + retry, event catalog,
      polling fallback.
paths:
  /{integrationId}/transactions:
    get:
      tags:
        - transactions
      summary: >-
        List transactions (identified + optionally unidentified) for an
        integration
      description: >-
        Returns a paginated list of transactions for the calling integration:
        the cashier and finance view of everything that settled through Feddi
        (wallet payments, top-ups, refunds, voids, and bonus credits). Beyond
        the core ledger fields, the response flattens the customer-identity
        context to top-level fields: `customer_phone`, `customer_name`,
        `identified_method` (how the payer was resolved: `phone`, `qr`,
        `short_code`, `card_fingerprint`, or `unidentified`),
        `applied_discount_minor`, and a stable `receipt_number`. By default the
        list returns **only identified transactions**; pass
        `include_unidentified=true` to merge in anonymous-session settlements
        for the cashier's full till view. Money is server-authoritative: every
        amount is a minor-units integer paired with an explicit `currency`.
        Redemption secrets (the session code, QR nonce, and reward code held in
        transaction metadata) are stripped server-side and **never leave the
        boundary**. Results are tenant-scoped to the integration named in the
        path AND the `x-api-key`: an `{integrationId}` that does not match the
        key's integration resolves to `401`/`403`, never another tenant's rows.
        Read-only and cursor-paginated, filterable by `status`, a date window,
        and `branch_id`. Rows reflect the richness of the session that produced
        each transaction: settlements captured with full basket lines and
        identity return detailed rows, while thin settlements come back sparse.
      operationId: transactionsList
      parameters:
        - name: integrationId
          in: path
          required: true
          description: >-
            The calling integration's id. MUST match the integration the API key
            is scoped to; mismatch → 401/403 (cross-tenant isolation).
          schema:
            type: string
            format: uuid
        - name: status
          in: query
          required: false
          description: Filter by transaction status.
          schema:
            type: string
            enum:
              - pending
              - completed
              - failed
              - partially_refunded
              - refunded
        - name: include_unidentified
          in: query
          required: false
          description: >-
            When true, merge in transactions from anonymous sessions (no
            resolved customer). Default false (identified only).
          schema:
            type: boolean
            default: false
        - name: branch_id
          in: query
          required: false
          description: Filter to a single branch.
          schema:
            type: string
            format: uuid
        - name: created_from
          in: query
          required: false
          description: Inclusive lower bound on createdAt (RFC3339).
          schema:
            type: string
            format: date-time
        - name: created_to
          in: query
          required: false
          description: Inclusive upper bound on createdAt (RFC3339).
          schema:
            type: string
            format: date-time
        - name: cursor
          in: query
          required: false
          description: Opaque cursor from a prior page's `meta.next_cursor`.
          schema:
            type: string
        - name: limit
          in: query
          required: false
          description: Page size (default 50, max 200).
          schema:
            type: integer
            minimum: 1
            maximum: 200
            default: 50
      responses:
        '200':
          description: A page of transaction summaries.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ResponseEnvelope'
                  - type: object
                    properties:
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/TransactionSummary'
              example:
                ok: true
                data:
                  - transaction_id: tx_77c1
                    receipt_number: RCT-2026-000812
                    transaction_type: PAYMENT
                    transaction_subtype: BALANCE
                    status: completed
                    amount_minor: 4500
                    currency: QAR
                    applied_discount_minor: 500
                    customer_phone: '+97433001122'
                    customer_name: Layla A.
                    identified_method: qr
                    branch_id: 22222222-2222-2222-2222-222222222222
                    branch_name: City Center
                    partner_session_id: ord-99812
                    feddi_session_id: 33333333-3333-3333-3333-333333333333
                    created_at: '2026-06-05T09:14:00Z'
                error: null
                meta:
                  request_id: req_tl1
                  idempotency_replayed: false
                  api_version: '2026-06-01'
                  next_cursor: eyJjIjoxMDB9
                  has_more: true
                  data_completeness_score: 71
        '400':
          description: >-
            `VALIDATION_ERROR` (HTTP 400), malformed query (bad cursor, invalid
            date, limit out of range).
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ResponseEnvelope'
                  - type: object
                    properties:
                      error:
                        $ref: '#/components/schemas/Error'
        '401':
          description: '`INVALID_API_KEY` (HTTP 401), missing/invalid `x-api-key`.'
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ResponseEnvelope'
                  - type: object
                    properties:
                      error:
                        $ref: '#/components/schemas/Error'
        '403':
          description: >-
            `FORBIDDEN` (HTTP 403), the `{integrationId}` in the path does not
            match the key's integration, or the key lacks transaction READ.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ResponseEnvelope'
                  - type: object
                    properties:
                      error:
                        $ref: '#/components/schemas/Error'
      security:
        - ApiKeyAuth: []
components:
  schemas:
    ResponseEnvelope:
      type: object
      description: >-
        The standard response envelope that every enveloped endpoint serializes
        through. `ok` is a boolean discriminator: when `ok` is `true`, the typed
        result is carried in `data`; when `ok` is `false`, a typed error object
        is returned instead. The `meta` object is uniform across the entire API
        surface.
      required:
        - ok
        - meta
      properties:
        ok:
          type: boolean
        data:
          type:
            - object
            - 'null'
        error:
          oneOf:
            - $ref: '#/components/schemas/Error'
            - type: 'null'
        meta:
          $ref: '#/components/schemas/Meta'
    TransactionSummary:
      type: object
      description: >-
        One row of the transaction list. Customer-identity context is FLATTENED
        to top-level fields for the cashier till view.
      required:
        - transaction_id
        - transaction_type
        - status
        - amount_minor
        - currency
        - created_at
      properties:
        transaction_id:
          type: string
        receipt_number:
          type:
            - string
            - 'null'
          description: The stable receipt-of-record number, when minted.
        transaction_type:
          type: string
          enum:
            - PAYMENT
            - DEPOSIT
            - WITHDRAW
            - TRANSFER
            - REWARD
            - BONUS_CREDIT
          description: Matches the transaction type enum.
        transaction_subtype:
          type:
            - string
            - 'null'
          enum:
            - BANK_TRANSFER
            - CASH
            - BALANCE
            - CRYPTO
            - POINTS
            - CARD
            - CASHBACK
            - BONUS_CREDIT
            - INCENTIVE_CLAWBACK
            - null
        status:
          type: string
          enum:
            - pending
            - completed
            - failed
            - partially_refunded
            - refunded
          description: Lower-cased projection of transaction status.
        amount_minor:
          type: integer
          description: Transaction amount, minor units (server-authoritative).
        currency:
          type: string
          minLength: 3
          maxLength: 3
          description: ISO-4217 currency.
        applied_discount_minor:
          type:
            - integer
            - 'null'
          description: Total discount applied to this transaction, minor units.
        customer_phone:
          type:
            - string
            - 'null'
          description: Identified customer phone (null when unidentified).
        customer_name:
          type:
            - string
            - 'null'
        identified_method:
          type:
            - string
            - 'null'
          enum:
            - phone
            - qr
            - short_code
            - card_fingerprint
            - provider_customer_id
            - unidentified
            - null
        branch_id:
          type:
            - string
            - 'null'
          format: uuid
        branch_name:
          type:
            - string
            - 'null'
        partner_session_id:
          type:
            - string
            - 'null'
          description: The partner's order ref.
        feddi_session_id:
          type:
            - string
            - 'null'
          format: uuid
        created_at:
          type: string
          format: date-time
    Error:
      type: object
      description: >-
        The typed error object returned with every non-2xx response. `code` is a
        string enum (for example `WALLET_PROGRAM_AMBIGUOUS`,
        `CREDENTIAL_TYPE_UNSUPPORTED`, `INSUFFICIENT_FUNDS`,
        `IDEMPOTENCY_KEY_REUSED`, `CURRENCY_NOT_SUPPORTED`), **never a bare HTTP
        status number**. Inspect `code` for programmatic branching, not the HTTP
        status. Some codes echo the valid set in `details` so clients can
        present or reconcile the accepted values: for example
        `CREDENTIAL_TYPE_UNSUPPORTED` lists the supported credential types,
        `CURRENCY_NOT_SUPPORTED` lists the supported ISO-4217 currencies, and
        `WALLET_PROGRAM_AMBIGUOUS` lists the candidate `wallet_program_id`
        values that matched the request.
      required:
        - code
        - message
      properties:
        code:
          type: string
          enum:
            - INSUFFICIENT_FUNDS
            - INVALID_API_KEY
            - CREDENTIAL_TYPE_UNSUPPORTED
            - CURRENCY_NOT_SUPPORTED
            - IDEMPOTENCY_KEY_REUSED
            - WALLET_PROGRAM_AMBIGUOUS
            - REQUIRES_DYNAMIC_CREDENTIAL
            - NOT_FOUND
            - FORBIDDEN
            - VALIDATION_ERROR
            - RATE_LIMITED
            - CONFLICT
            - INTERNAL_SERVER_ERROR
        message:
          type: string
        details:
          type: object
          additionalProperties: true
    Meta:
      type: object
      description: >-
        The uniform response metadata block returned on every response.
        `data_completeness_score` is computed per call and reports the
        completeness of the returned data. `decision_trace_id` is present on
        responses that carry decision or insight output and can be used to
        correlate the response with its reasoning. `capabilities` is an
        additive, response-level array of hints advertising features the caller
        may use, and may be extended over time without notice.
      required:
        - request_id
        - api_version
      properties:
        request_id:
          type: string
          description: Feddi-issued correlation id for this response.
        idempotency_replayed:
          type: boolean
          description: True when this response was replayed from the idempotency store.
        api_version:
          type: string
          description: The single API version field.
          example: '2026-06-01'
        data_completeness_score:
          type: integer
          minimum: 0
          maximum: 100
          description: >-
            0-100, computed per call (basket/identity/tax/category/consent
            presence).
        decision_trace_id:
          type:
            - string
            - 'null'
          description: Opaque trace id on intelligence-bearing responses; one per response.
        capabilities:
          type: object
          additionalProperties: true
          description: Additive response-level capability hints.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Partner API key (platform- or merchant-scoped). Contract key-enforces
        context.merchant_id.

````