Alpine· Docs
Contents

Reference · Transfers

Quote a transfer

Project the totals and fee lines a transfer would produce, before committing to it.

POST/v1/transfers/quote

Authorization: Bearer ak_test_… · Application API key

semantic: quote_projection_no_reservation

This read needs refs from objects you hold; the docs' own refs live in the exhibition, not your bench. Compose it in the playground against your own world.

Key capabilities

  • TransferQuoteRead

Conditional, gating specific request features; a request that uses one without it is refused:

  • TransferAppFeeInstructionRequest
  • TransferApplicationPaysAppFeeInstructionRequest
  • TransferReceiverPaysAppFeeInstructionRequest
  • TransferSplitAppFeeInstructionRequest
  • TransferExternalCostGuardRequest

Request body fields

  • sourceAccountRef
  • sourceEndpointRef
  • sourceHoldingRef
  • destination
  • valueUnit
  • amountMinorUnits
  • feeInstruction · optional

Response fields

  • quoteBasisTransferRef
  • totals
  • lines
  • externalCostEvidence

Contract notes

feeInstructionKindsrequest_application_fee · request_external_cost_guard
feeInstructionBearerssender_pays · application_pays · receiver_pays · split
feeInstructionExternalCostGuardKindsprovider_fee · gas_fee
externalCostGuardmax_provider_or_gas_cost_over_assessed_runtime_material
receiverPaidAppFeegross_receiver_entitlement_minus_app_fee_net_receiver_credit
splitAppFeeone_app_fee_evidence_line_split_into_one_debit_leg_plus_receiver_withholding_leg
deferreddurable_quote_reservation · selected_quote_initiation_material

Sharp edges

  • A quote reserves nothing. If the assessed material moves before you create the transfer, the created totals can differ from the quoted ones.
  • Pass the quote back as acceptedQuote on create when you want the initiation judged against the basis you showed your user.

Wire receipt

Captured from the real gateway by the scenario suite; nothing here is composed by hand.

A quote prices the move without reserving anything; it is a projection, not a commitment.

Request

POST /v1/transfers/quote
Authorization: Bearer ak_test_…
Content-Type: application/json

{
  "sourceAccountRef": "1baa9144-8a36-3fb5-bfab-395db835f1ae",
  "sourceEndpointRef": "23f410d0-11b3-3cb0-aaa8-911e90aa2f2b",
  "sourceHoldingRef": "fcc8c901-938d-343b-ac27-497cfa374333",
  "destination": {
    "kind": "internal-endpoint",
    "accountRef": "281b43e7-a6c6-34b6-a488-15266d29d607",
    "endpointRef": "2638f318-9348-3985-aea2-1819b9864dd0",
    "holdingRef": "99869eff-193b-3006-a0cc-785174320c13"
  },
  "valueUnit": {
    "kind": "fiat",
    "currency": "NGN"
  },
  "amountMinorUnits": "4000"
}

Response · 200

{
  "status": 200,
  "body": {
    "value": {
      "quoteBasisTransferRef": "ac474ebc-11d7-3d80-8ccf-34c60e2b1b52",
      "operationId": "00000000-0000-0000-0000-00000000015f",
      "sourceAccountRef": "1baa9144-8a36-3fb5-bfab-395db835f1ae",
      "sourceEndpointRef": "23f410d0-11b3-3cb0-aaa8-911e90aa2f2b",
      "sourceHoldingRef": "fcc8c901-938d-343b-ac27-497cfa374333",
      "destination": {
        "kind": "internal-endpoint",
        "accountRef": "281b43e7-a6c6-34b6-a488-15266d29d607",
        "endpointRef": "2638f318-9348-3985-aea2-1819b9864dd0",
        "holdingRef": "99869eff-193b-3006-a0cc-785174320c13"
      },
      "valueUnit": {
        "kind": "fiat",
        "currency": "NGN"
      },
      "amountMinorUnits": "4000",
      "requestedAt": "2026-07-11T05:20:22.251813Z",
      "observedAt": "2026-07-11T05:20:22.251813Z",
      "noFeeReason": "no_configured_fee",
      "totals": [],
      "lines": [],
      "externalCostEvidence": []
    },
    "freshness": "Current",
    "visibility": "Full",
    "evidence": [
      {
        "receiptRef": "ac474ebc-11d7-3d80-8ccf-34c60e2b1b52",
        "source": "VaeRuntime"
      }
    ]
  },
  "evidence": [
    {
      "receiptRef": "ac474ebc-11d7-3d80-8ccf-34c60e2b1b52"
    }
  ]
}

captured 2026-07-11 · gateway 0.1.0 · Money moves · Quote the transfer

Refused requests

Refusals are stated as plainly as capabilities; these were captured live, the same way.

This key was minted without TransferQuoteRead; the platform answers with the exact permission it lacks.

Request

POST /v1/transfers/quote
Authorization: Bearer ak_test_…
Content-Type: application/json

{
  "sourceAccountRef": "fd99d2c2-153a-4f79-8942-ad571cc02071",
  "sourceEndpointRef": "037cf7c5-8117-4f9b-ae94-aeb9ea943b66",
  "sourceHoldingRef": "15ccdc23-af46-4fb0-a3c2-6755ba2b327a",
  "destination": {
    "kind": "internal-endpoint",
    "accountRef": "d3aae042-72c1-4fa2-84fc-5e0541e37e0d",
    "endpointRef": "0cc6b300-0764-46f1-9f6a-6c47613f24d4",
    "holdingRef": "3613193e-0fc1-4aae-9954-a56a7a1f4cc0"
  },
  "valueUnit": {
    "kind": "fiat",
    "currency": "NGN"
  },
  "amountMinorUnits": "1000"
}

Response · 403

{
  "status": 403,
  "problem": {
    "kind": "Forbidden",
    "status": 403,
    "code": "forbidden-PermissionDenied",
    "message": "PermissionDenied",
    "evidence": [
      {
        "receiptRef": "b9f0e40e-6ea7-38ef-b677-9b6690e67cd8"
      },
      {
        "receiptRef": "4ce6558b-daa5-3ba0-b95e-165ba8d5f5ff"
      }
    ]
  },
  "evidence": [
    {
      "receiptRef": "b9f0e40e-6ea7-38ef-b677-9b6690e67cd8"
    },
    {
      "receiptRef": "4ce6558b-daa5-3ba0-b95e-165ba8d5f5ff"
    }
  ]
}

captured 2026-07-11 · gateway 0.1.0 · The gate holds · The capability gate

See also

generated from openapi.json · gateway 0.1.0 · sandbox