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

# Get billing transaction

> Retrieve one immutable wallet movement, its historical balance and links to payment or product usage.

Retrieve one immutable wallet movement, its historical balance and links to payment or product usage. All IDs and cursors must belong to the authorized workspace and environment. Required scope: billing:read. Owner authority is required. Related reads can pin snapshot\_id from billing summary to reconcile the same as-of state; expired snapshots return 410, never a silent refresh.

Examples use synthetic IDs. Replace them with values returned by your environment.


## OpenAPI

````yaml openapi/amlok.json GET /v1/billing/transactions/{id}
openapi: 3.1.0
info:
  title: AMLOK API
  version: 1.0.0
  description: >-
    AMLOK API: borrower connections, Insights origination, immutable risk
    packages and Signal monitoring. Use your institution-issued API origin.
servers: []
security:
  - BearerAuth: []
paths:
  /v1/billing/transactions/{id}:
    get:
      tags:
        - Billing
      summary: Get billing transaction
      description: >-
        Retrieve one immutable wallet movement, its historical balance and links
        to payment or product usage. All IDs and cursors must belong to the
        authorized workspace and environment. Required scope: billing:read.
        Owner authority is required. Related reads can pin snapshot_id from
        billing summary to reconcile the same as-of state; expired snapshots
        return 410, never a silent refresh.
      operationId: getBillingTransaction
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            minLength: 1
          description: id
        - name: snapshot_id
          in: query
          required: false
          schema:
            type: string
            minLength: 1
          description: snapshot id
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/BillingTransaction'
                  meta:
                    $ref: '#/components/schemas/Meta'
                required:
                  - data
                  - meta
                additionalProperties: false
              example:
                data:
                  id: txn_usage_synthetic
                  snapshot_id: snap_synthetic
                  posted_at: '2026-11-06T12:00:00Z'
                  amount: '-40.00'
                  currency: CAD
                  kind: usage
                  product: insights
                  description: Synthetic underwriting usage, not a price quotation.
                  usage_id: usage_synthetic
                  payment_id: null
                  borrower_id: bor_synthetic
                  balance_after: '4935.00'
                  sequence: 3
                  funding_type: null
                  record_version: 1
                  related_transaction_id: null
                meta:
                  request_id: req_synthetic
                  schema_version: 1.0.0
                  environment: sandbox
          headers:
            X-Request-ID:
              schema:
                type: string
                minLength: 1
              description: Same request ID as meta.request_id or error.request_id.
        '400':
          description: >-
            Inspect structured error; retry only when retryable. 429 and 503 can
            include Retry-After.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/Error'
                required:
                  - error
                additionalProperties: false
              example:
                error:
                  code: validation_error
                  message: Validation error.
                  retryable: false
                  request_id: req_synthetic
                  field: null
          headers:
            X-Request-ID:
              schema:
                type: string
                minLength: 1
              description: Same request ID as meta.request_id or error.request_id.
        '401':
          description: >-
            Inspect structured error; retry only when retryable. 429 and 503 can
            include Retry-After.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/Error'
                required:
                  - error
                additionalProperties: false
              example:
                error:
                  code: unauthenticated
                  message: Unauthenticated.
                  retryable: false
                  request_id: req_synthetic
                  field: null
          headers:
            X-Request-ID:
              schema:
                type: string
                minLength: 1
              description: Same request ID as meta.request_id or error.request_id.
        '403':
          description: >-
            Inspect structured error; retry only when retryable. 429 and 503 can
            include Retry-After.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/Error'
                required:
                  - error
                additionalProperties: false
              example:
                error:
                  code: forbidden
                  message: Forbidden.
                  retryable: false
                  request_id: req_synthetic
                  field: null
          headers:
            X-Request-ID:
              schema:
                type: string
                minLength: 1
              description: Same request ID as meta.request_id or error.request_id.
        '404':
          description: >-
            Inspect structured error; retry only when retryable. 429 and 503 can
            include Retry-After.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/Error'
                required:
                  - error
                additionalProperties: false
              example:
                error:
                  code: not_found
                  message: Not found.
                  retryable: false
                  request_id: req_synthetic
                  field: null
          headers:
            X-Request-ID:
              schema:
                type: string
                minLength: 1
              description: Same request ID as meta.request_id or error.request_id.
        '409':
          description: >-
            Inspect structured error; retry only when retryable. 429 and 503 can
            include Retry-After.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/Error'
                required:
                  - error
                additionalProperties: false
              example:
                error:
                  code: invalid_state
                  message: Invalid state.
                  retryable: false
                  request_id: req_synthetic
                  field: null
          headers:
            X-Request-ID:
              schema:
                type: string
                minLength: 1
              description: Same request ID as meta.request_id or error.request_id.
        '410':
          description: >-
            Inspect structured error; retry only when retryable. 429 and 503 can
            include Retry-After.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/Error'
                required:
                  - error
                additionalProperties: false
              example:
                error:
                  code: cursor_expired
                  message: Cursor expired.
                  retryable: false
                  request_id: req_synthetic
                  field: null
          headers:
            X-Request-ID:
              schema:
                type: string
                minLength: 1
              description: Same request ID as meta.request_id or error.request_id.
        '429':
          description: >-
            Inspect structured error; retry only when retryable. 429 and 503 can
            include Retry-After.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/Error'
                required:
                  - error
                additionalProperties: false
              example:
                error:
                  code: rate_limited
                  message: Rate limited.
                  retryable: true
                  request_id: req_synthetic
                  field: null
          headers:
            Retry-After:
              description: Minimum delay in seconds before retry.
              schema:
                type: integer
                minimum: 0
            X-Request-ID:
              schema:
                type: string
                minLength: 1
              description: Same request ID as meta.request_id or error.request_id.
        '503':
          description: >-
            Inspect structured error; retry only when retryable. 429 and 503 can
            include Retry-After.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/Error'
                required:
                  - error
                additionalProperties: false
              example:
                error:
                  code: temporarily_unavailable
                  message: Temporarily unavailable.
                  retryable: true
                  request_id: req_synthetic
                  field: null
          headers:
            Retry-After:
              description: Minimum delay in seconds before retry.
              schema:
                type: integer
                minimum: 0
            X-Request-ID:
              schema:
                type: string
                minLength: 1
              description: Same request ID as meta.request_id or error.request_id.
      security:
        - BearerAuth: []
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |-
            curl --request GET --fail-with-body --max-time 30 \
              "${AMLOK_API_BASE_URL}/v1/billing/transactions/record_synthetic" \
              --header "Authorization: Bearer ${AMLOK_API_KEY}" \
              --header 'Accept: application/json'
        - lang: Python
          source: >
            import os

            import requests


            headers = {'Accept': 'application/json'}

            headers["Authorization"] = "Bearer " + os.environ["AMLOK_API_KEY"]

            response = requests.request('GET', os.environ["AMLOK_API_BASE_URL"]
            + '/v1/billing/transactions/record_synthetic', headers=headers,
            timeout=30, allow_redirects=False)

            response.raise_for_status()

            print(response.json())
        - lang: JavaScript
          source: >
            const headers = {"Accept": "application/json"};

            headers.Authorization = `Bearer ${process.env.AMLOK_API_KEY}`;

            const response = await fetch(process.env.AMLOK_API_BASE_URL +
            "/v1/billing/transactions/record_synthetic", {
              method: "GET", headers, redirect: "error", signal: AbortSignal.timeout(30000)
            });

            if (!response.ok) throw new Error(`HTTP ${response.status}: ${await
            response.text()}`);

            console.log(await response.json());
components:
  schemas:
    BillingTransaction:
      type: object
      properties:
        id:
          type: string
          minLength: 1
          description: >-
            Opaque identifier, authorized within the API key workspace and
            environment.
        snapshot_id:
          type: string
          minLength: 1
          description: >-
            Opaque identifier, authorized within the API key workspace and
            environment.
        posted_at:
          type: string
          minLength: 1
          format: date-time
          description: >-
            Posted at for BillingTransaction. Constraints, requiredness and
            allowed values are defined by this schema.
        amount:
          type: string
          minLength: 1
          pattern: ^-?(?:0|[1-9][0-9]*)\.[0-9]{2}$
          description: >-
            Amount for BillingTransaction. Constraints, requiredness and allowed
            values are defined by this schema.
        currency:
          const: CAD
          description: >-
            Currency for BillingTransaction. Constraints, requiredness and
            allowed values are defined by this schema.
        kind:
          type: string
          enum:
            - funding
            - usage
            - adjustment
            - final_refund
          description: >-
            Kind for BillingTransaction. Constraints, requiredness and allowed
            values are defined by this schema.
        product:
          anyOf:
            - type: string
              enum:
                - insights
                - signal
            - type: 'null'
          description: >-
            Product for BillingTransaction. Constraints, requiredness and
            allowed values are defined by this schema.
        description:
          type: string
          minLength: 1
          description: >-
            Description for BillingTransaction. Constraints, requiredness and
            allowed values are defined by this schema.
        usage_id:
          anyOf:
            - type: string
              minLength: 1
              description: >-
                Opaque identifier, authorized within the API key workspace and
                environment.
            - type: 'null'
          description: >-
            Usage id for BillingTransaction. Constraints, requiredness and
            allowed values are defined by this schema.
        payment_id:
          anyOf:
            - type: string
              minLength: 1
              description: Opaque ID within the authorized workspace and environment.
            - type: 'null'
          description: >-
            Related funding payment or refund source; null when no payment
            applies.
        borrower_id:
          anyOf:
            - type: string
              minLength: 1
              description: Opaque ID within the authorized workspace and environment.
            - type: 'null'
          description: >-
            Borrower charged when applicable; funding is workspace-wide and
            normally null.
        balance_after:
          type: string
          minLength: 1
          pattern: ^(?:0|[1-9][0-9]*)\.[0-9]{2}$
          description: >-
            Spendable CAD balance immediately after this entry in sequence
            order.
        sequence:
          type: integer
          minimum: 1
          description: Strictly increasing posting order within the workspace wallet.
        funding_type:
          anyOf:
            - type: string
              enum:
                - paid
                - promotional
            - type: 'null'
          description: >-
            Paid or promotional credit for funding entries; null for other
            kinds.
        record_version:
          type: integer
          const: 1
          description: Immutable published record; event.resource_version is always 1.
        related_transaction_id:
          anyOf:
            - type: string
              minLength: 1
            - type: 'null'
          description: >-
            Original immutable transaction corrected or reversed by this entry;
            null otherwise.
      required:
        - id
        - snapshot_id
        - posted_at
        - amount
        - currency
        - kind
        - product
        - description
        - usage_id
        - payment_id
        - borrower_id
        - balance_after
        - sequence
        - funding_type
        - record_version
        - related_transaction_id
      additionalProperties: false
      description: >-
        Immutable signed CAD wallet movement. Funding is positive, usage and
        final refunds negative, adjustments signed. sequence gives total posting
        order; balance_after is the historical balance after this entry.
        Promotional funding has no payment; paid funding links payment_id.
        related_transaction_id links corrections/reversals.
      allOf:
        - if:
            properties:
              kind:
                const: usage
          then:
            properties:
              usage_id:
                type: string
                minLength: 1
                description: Opaque ID within the authorized workspace and environment.
              product:
                type: string
                enum:
                  - insights
                  - signal
              amount:
                type: string
                minLength: 1
                pattern: ^-[0-9]+\.[0-9]{2}$
        - if:
            properties:
              kind:
                const: funding
          then:
            properties:
              funding_type:
                type: string
                enum:
                  - paid
                  - promotional
              amount:
                type: string
                minLength: 1
                pattern: ^(?:0|[1-9][0-9]*)\.[0-9]{2}$
          else:
            properties:
              funding_type:
                type: 'null'
        - if:
            properties:
              funding_type:
                const: paid
          then:
            properties:
              payment_id:
                type: string
                minLength: 1
                description: Opaque ID within the authorized workspace and environment.
        - if:
            properties:
              funding_type:
                const: promotional
          then:
            properties:
              payment_id:
                type: 'null'
    Meta:
      type: object
      properties:
        request_id:
          type: string
          minLength: 1
          description: >-
            Opaque identifier, authorized within the API key workspace and
            environment.
        schema_version:
          type: string
          minLength: 1
          description: >-
            Schema version for Meta. Constraints, requiredness and allowed
            values are defined by this schema.
        environment:
          type: string
          enum:
            - sandbox
            - live
          description: >-
            Environment for Meta. Constraints, requiredness and allowed values
            are defined by this schema.
      required:
        - request_id
        - schema_version
        - environment
      additionalProperties: false
    Error:
      type: object
      properties:
        code:
          type: string
          enum:
            - validation_error
            - unauthenticated
            - forbidden
            - not_found
            - invalid_state
            - idempotency_conflict
            - insufficient_credits
            - precondition_failed
            - cursor_expired
            - rate_limited
            - temporarily_unavailable
            - deal_snapshot_conflict
            - payload_too_large
            - unsupported_media_type
            - document_rejected
            - processing_failed
            - session_expired
            - consent_purpose_missing
            - sandbox_only
            - scenario_not_available
            - idempotency_result_expired
          description: >-
            Code for Error. Constraints, requiredness and allowed values are
            defined by this schema.
        message:
          type: string
          minLength: 1
          description: >-
            Message for Error. Constraints, requiredness and allowed values are
            defined by this schema.
        retryable:
          type: boolean
          description: >-
            Retryable for Error. Constraints, requiredness and allowed values
            are defined by this schema.
        request_id:
          type: string
          minLength: 1
          description: >-
            Opaque identifier, authorized within the API key workspace and
            environment.
        field:
          anyOf:
            - type: string
              minLength: 1
            - type: 'null'
          description: >-
            Field for Error. Constraints, requiredness and allowed values are
            defined by this schema.
      required:
        - code
        - message
        - retryable
        - request_id
        - field
      additionalProperties: false
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API key
      description: >-
        Server-to-server API key bound to exactly one workspace, institution
        tenant and environment. No caller-supplied workspace override is
        accepted. Do not use in public browser code.

````

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