Integrating Aqueducta
Aqueducta is intended for wallets, apps, and routing-aware integrations on Movement.
Recommended Request Pattern
For most user-facing flows:
- call
POST /v1/quotewithrouting_mode=fast - render the best route immediately
- optionally call
POST /v1/routeswithrouting_mode=balanced - show alternate routes once they arrive
That is the same pattern used by the Route Preview page in this docs site.
What to Persist Client-Side
If you cache responses client-side, key them by:
snapshot_idtoken_intoken_outamount_inslippage_bpsmax_hopsrouting_mode
When snapshot_id changes, invalidate cached quote data.
What to Read From the Response
The most important fields for integrators are:
snapshot_idquote_idroute_idqualityrouteroutesdiagnosticsrequired_snapshot_idsupport for replayable quote verificationpartner_fee_bps/partner_fee_recipientfor explicit integrator fees
If execution hints are enabled, the response may also include:
execution.moduleexecution.functionexecution.route_hashexecution.bcs_payload_hex
The intended public execution target is router_v3, which adds:
- explicit recipient settlement
- explicit output-side partner fee settlement
- stable versioned route hashing
Error Handling
Treat these as expected product cases:
NO_ROUTE- no valid path was found
NO_QUOTE- a path existed but none of the candidates were quotable
SNAPSHOT_UNAVAILABLE- the router is not ready yet
INVALID_TOKEN- invalid token identifier format
Do not silently collapse these into a generic failure in the UI.
Operational Signals
Operators and advanced integrators should watch:
GET /v1/status- snapshot age
- discovery coverage
- route-candidate cache state
Current Integration Boundaries
Aqueducta currently assumes:
- exact-in swaps
- single-route execution
- Movement L1 assets and pools
Current fee model:
- default fee is zero
- optional integrator fees are output-side, explicit, and reflected in net quote output
If your integration requires split routing or exact-out semantics, that is future scope, not current API behavior.