Skip to content

HTTP and SSE API

The canonical OpenAPI document is published at https://solver.vsnexa.com/openapi.json. The copy bundled with this site is generated byte-for-byte from the repository's canonical openapi/openapi.json during each build.

Operations

Nexa V6 Solver Integration API operations

Method Path Purpose Operation ID
GET /.well-known/nexa-solver.json getSolverManifest getSolverManifest
GET /.well-known/nexa-onchain-discovery.json getOnchainDiscovery getOnchainDiscovery
GET /openapi.json getOpenApi getOpenApi
GET /.well-known/nexa-standards.json getStandardsManifest getStandardsManifest
GET /api/v6/solver-discovery getSolverDiscovery getSolverDiscovery
GET /api/v6/solver-feed getSolverFeed getSolverFeed
GET /api/v6/solver-feed/events streamSolverFeed streamSolverFeed
GET /api/v6/routes/{routeId} getRouteDetail getRouteDetail
POST /api/v6/execution-permits/request-message buildPermitRequestMessage buildPermitRequestMessage
POST /api/v6/execution-permits createExecutionPermit createExecutionPermit
GET /api/v6/execution-permits/{fillId} getExecutionPermit getExecutionPermit

Request rules

  • Send and accept JSON for HTTP API operations unless OpenAPI specifies the SSE event stream.
  • Preserve base-10 strings for execution-relevant integers.
  • Supply Idempotency-Key for permit creation exactly as documented.
  • Sign the canonical permit-request message; a signed discovery or Feed object does not authorize a fill.
  • Handle documented structured error codes rather than parsing message text.

Signed Feed snapshots

The Feed response contains a signed payload plus hash, declared signer, and signature. Consumers must recompute the canonical hash, recover the signer, and check expiry before exposing routes to selection logic. Query filters reduce the returned route set but do not relax verification.

Confirmed-set SSE

The event stream publishes changes to the confirmed active set. Use Last-Event-ID when reconnecting, process events in order, and fall back to a fresh verified HTTP snapshot when recovery is not possible. A subscription is transport, not authority: verify signed state before execution.

Example browser-independent stream request:

curl --no-buffer \
  -H 'Accept: text/event-stream' \
  https://solver.vsnexa.com/api/v6/solver-feed/events

Permit requests

The local SDK operation is the preferred way to create the canonical request message. The HTTP request-message operation exists for compatibility. In both cases, sign the exact bytes and submit the identical normalized request with the resulting signature.

Permit issuance is the boundary at which a selected quote becomes authorized for a specific payer, recipient, amount, validity window, and fill ID.

Caching and retries

Static discovery, standards, and OpenAPI documents may be cached according to their response headers. Feed, route, permit, status, and SSE data are dynamic; do not apply static-document caching behavior to them.

Use idempotent reads freely. Retry permit submission only with the same request and idempotency key. If the intent changes, use a new key and obtain a new signature.

OpenAPI tooling

Download the canonical schema for client generation or inspection:

curl --fail --silent --show-error \
  https://solver.vsnexa.com/openapi.json \
  --output nexa-v6-openapi.json

Generated clients must still implement the signature, authority, and exact 1+1 rules described in Solver integration.