---
title: "Derive source observation from caller-submitted transaction hashes"
method: POST
path: "/v2/session/{session_id}/observe-source"
---

# Derive source observation from caller-submitted transaction hashes

`POST /v2/session/{session_id}/observe-source`

## Request

- Base URL: `https://api.assetfare.dev`
- URL: `https://api.assetfare.dev/v2/session/{session_id}/observe-source`
- Auth: none required

## Path parameters

- `session_id` string, uuid, required

## Headers

- `X-AssetFare-Session-Token` string, required

## Request body

- object
  - `idempotency_key` string, required
  - `transaction_hashes` string[], required

## Response `200`

Verified source state and, when available, the next receipt-bound action

- SessionResponse
  - `action_available` boolean, required
  - `current_action` UnsignedActionBundle, required
    - `action_id` string, uuid, required
    - `expires_at` string, date-time, required
    - `payload_sha256` string, required
    - `server_signing` unknown, required
    - `server_submission` unknown, required
    - `signed` unknown, required
    - `step_index` integer, required
    - `submitted` unknown, required
    - `unsigned_action` UnsignedAction, required
      - `safety_receipt` ActionSafetyReceiptV1, required: Deterministically recomputed from decoded/raw unsigned action data. This is a consistency receipt, not a signature or a subjective safe=true claim.
        - `action` object, required
          - `builder_version` string, nullable, required
          - `kind` 'evm_dex' | 'solana_dex' | 'evm_cctp' | 'evm_cctp_receive' | 'solana_cctp' | 'aptos_cctp' | 'evm_layerzero' | 'solana_layerzero' | 'evm_across', required
          - `provider` string, required
        - `approval` object, required
          - `exact_allowance_base` string, nullable, required
          - `required` boolean, required
          - `target` string, nullable, required
          - `token` string, nullable, required
          - `transaction_index` integer
        - `assetfare_service_fee` object, required
          - `amount_known_before_execution` boolean, required
          - `basis` object, required
            - `amount_base` string, nullable, required
            - `kind` string, required
          - `bps` integer, required
          - `exact_amount_base` string, nullable, required
          - `formula` 'floor(fee_basis_base * bps / 10000)', required
          - `recipient` string, nullable, required
        - `custody` object, required
          - `server_signing` unknown, required
          - `server_submission` unknown, required
        - `destination` object, required
          - `domain` union, required
            - integer
            - string
          - `recipient` string, nullable, required
        - `generation` 'decoded_built_action_only', required
        - `native_value_cap` object, required
          - `maximum_base` string, required
          - `per_transaction_base` string[], required
          - `unit` 'wei' | 'lamports' | 'octas', required
        - `network` object, required
          - `destination_chain` string, required
          - `source_chain` string, required
          - `source_chain_id` union, required
            - integer
            - string
        - `parties` object, required
          - `caller` string, required
          - `fee_payer` string, required
        - `payload_binding` object, required
          - `action_sha256` string, required
          - `canonicalization` 'UTF-8 JSON sorted keys compact separators; omit safety_receipt', required
          - `raw_payloads` object[], required
            - `chain_id` integer
            - `data_prefix_hex` string
            - `data_sha256` string, required
            - `index` integer, required
            - `instruction_type` string, nullable
            - `kind` 'evm_transaction' | 'solana_instruction' | 'aptos_raw_transaction', required
            - `native_value_base` string
            - `program_id` string
            - `raw_sha256` string, required
            - `selector` string
            - `target` string
        - `receive` object, required
          - `expected_amount_base` string, nullable, required
          - `minimum_amount_base` string, required
          - `token` object, required
            - `address_or_mint` string, required
            - `symbol` string, required
        - `risks` object, required
          - `caller_verification_required` unknown, required
          - `provider` string[], required
          - `unpriced` string[], required
        - `schema` 'https://assetfare.dev/schemas/action-safety-receipt-v1', required
        - `schema_version` unknown, required
        - `selector_or_instruction_allowlist` string[], required
        - `spend` object, required
          - `exact_amount_base` string, required
          - `maximum_amount_base` string, required
          - `token` object, required
            - `address_or_mint` string, required
            - `symbol` string, required
        - `target_or_program_allowlist` string[], required
        - `timing` object, required
          - `action_deadline_unix` integer, nullable, required
          - `bundle_expires_at` string, date-time, nullable, required
          - `quote_expiry_unix` integer, nullable, required
          - `recent_blockhash` string, nullable, required
      - `serverSigning` unknown
      - `serverSubmission` unknown
      - `signed` unknown, required
      - `submitted` unknown, required
    - `workflow_id` string, uuid, required
  - `quote_binding` union, required
    - object
      - `quote_fingerprint` string, required
      - `quote_id` string, uuid, required
      - `selected_mode` 'session', required
      - `server_signing` unknown, required
      - `server_submission` unknown, required
      - `version` 'assetfare-quote-bound-session-constraints-v1', required
      - `whole_session_path_and_bounds_enforced` unknown, required
    - object
      - `server_signing` unknown, required
      - `server_submission` unknown, required
      - `version` 'legacy_advisory', required
      - `whole_session_path_and_bounds_enforced` unknown, required
  - `server_signing` unknown, required
  - `server_submission` unknown, required
  - `session_id` string, uuid, required
  - `signed` unknown, required
  - `status` string, required
  - `submitted` unknown, required

## Other responses

- `400`: Invalid observation or capability token missing/incorrect
- `409`: Durable quote-bound session path or minimum changed. No new action was created; do not repeat confirmed steps or start another session. There is no replacement-approval attachment endpoint. Keep this session stopped and retry its refresh operation only if a fresh read-only quote indicates the original approved path and bounds are again satisfiable; the new quote itself is not action authority.
- `429`: Rate limited

---

[API](https://skmtc.dev/assetfare/apis/assetfare-active-route-agent-api.md) · [All operations](https://skmtc.dev/assetfare/apis/assetfare-active-route-agent-api/llms.txt) · [OpenAPI document](https://skmtc.dev/assetfare/apis/assetfare-active-route-agent-api/revisions/30aea5779aba?raw)
