{"service":"zendiq-agent-api","version":"v1","network":"mainnet","terms":"https://zendiq.ai/agents/terms/","endpoints":[{"method":"POST","path":"/v1/agent/analyse-token","priceUsd":0,"settles":"free — rate-limited, no payment required","description":"Screen a single token by mint, with no trade size. Returns the token risk score, its signal breakdown, and provenance including cache age. The cheap \"should I even look at this?\" call for scanning many mints; cacheable across callers. The decide call (/analyse) returns this same token score inline, so screening first is an option, never a prerequisite."},{"method":"POST","path":"/v1/agent/analyse","priceUsd":0.01,"settles":"always — the verdict is the deliverable","description":"ZendIQ swap triage for Solana. Returns a Safe / Protect / Refuse verdict for a proposed swap, with token risk screening, sandwich-attack exposure, and the priority fee and Jito tip we would use. Advisory only — no transaction is built and no keys are ever handled. Pay in USDC; the facilitator sponsors network fees, so no SOL is required. Versioned: v1 is additive-only — ignore unknown fields. Compatibility contract at GET /v1/agent. Paying accepts the API terms: https://zendiq.ai/agents/terms/"},{"method":"POST","path":"/v1/agent/optimize","priceUsd":0.02,"settles":"on a built transaction — a failed build charges nothing","description":"ZendIQ swap execution for Solana. Builds an UNSIGNED swap and returns it alongside the plan (venue, slippage, priority fee), a simulation result, and the net-benefit arithmetic so you can verify the bytes before signing. It also returns the same Safe / Protect / Refuse verdict and reasons as /analyse; a Refuse is still built, so read verdict before signing. The venue is chosen by risk, then by net benefit: Jupiter Ultra when its upstream MEV protection is the right instrument, or the Jupiter Swap API (Quote + Build) when risk scoring calls for a specific priority fee, which Ultra cannot honour; a direct venue (Raydium on a Safe verdict, or a Jito bundle on Raydium or the Jupiter Swap API on any verdict) replaces it only when it beats that route after fee, Jito tip, expected sandwich loss and a bundle's landing risk, by 0.1% of the trade capped at $1, and plan.venueDecision shows the comparison. Send method: \"jito\" to force a Jito bundle venue; plan.choice then reads \"forced\". plan.priorityFee.control states whether the requested fee was a ceiling, a budget spent in full up to compute-unit price rounding, or left to the venue; plan.priorityFee.appliedLamports is the fee read back from the build and is the only verified charge. A Jito tip is added only on bundle venues, inside the swap transaction, and a bundle carries no priority fee. Submission differs by venue, so follow the returned submit object: Ultra transactions go to Jupiter /execute with the requestId; Swap API and Raydium transactions go to your own RPC; Jito bundle transactions are posted back, signed, to /v1/agent/bundle (free), which forwards them to Jito and reports landing. Zero custody — the transaction is never signed here. Requires a taker public key: the mainnet wallet that signs the trade, which must hold the input amount and SOL for the network fee and token account rent (a gasless Jupiter Ultra fill is exempt from the SOL). A taker that cannot fund the trade gets 422 taker_insufficient_balance, uncharged. The call fee is paid separately, in USDC, by the paying wallet; the facilitator sponsors that payment's network fees, so the paying wallet needs no SOL. Paying accepts the API terms: https://zendiq.ai/agents/terms/"},{"method":"POST","path":"/v1/agent/bundle","priceUsd":0,"settles":"free — rate-limited; you already paid at /optimize","description":"Submit a signed Jito bundle transaction returned by /optimize (submit.method \"jito_bundle\"). Body: { \"signedTransaction\": \"<base64>\" }. ZendIQ forwards it to Jito under its whitelisted key and returns the bundle id and landing state (landed, failed_on_chain, pending, not_landed, unknown, rejected). Only the exact transaction /optimize issued, carrying its Jito tip, is accepted. Idempotent: resubmitting the same signed transaction returns the first submission and never sends a second bundle. GET this path + /<signature> for status."}],"compatibility":{"version":"v1","additiveOnly":true,"notes":["New fields may appear in any response at any time. Ignore fields you do not recognise; their arrival is not a breaking change.","Stable fields will not be removed, renamed, or have their type changed within v1.","The verdict enum (Safe, Protect, Refuse) is closed and will not gain members within v1. Other enums may gain members.","Experimental fields may change shape or disappear within v1 without a version bump. Do not make them load-bearing.","A breaking change to a stable field ships as /v2. v1 then serves for at least 90 further days, carrying RFC 8594 Deprecation and Sunset headers on every response for the whole window."],"fields":{"stable":["verdict","recommendedExecution.path","recommendedExecution.priorityFeeLamports","recommendedExecution.jitoTipLamports","reasons","disclaimer","transaction","requestId","plan.venue","plan.slippageBps","plan.priorityFee","submit.method","netBenefit.netUsd","custody"],"experimental":["confidence","basis","tokenRisk","sandwichExposure","route","marketContext","degraded","latencyMs","simulation","plan.venueFallback","plan.venueDecision","plan.transaction","plan.route","plan.reason","netBenefit.expectedMevLossUsd","analysisId","analysisExpiresAt","analysis"]}},"bundleLookupTable":{"address":"HHhmPLodSmawV1EtMCNBiQTHdYpECQB2X7w1MbM6pdEw","verified":true,"verifiedAtSlot":452973149,"error":null},"bundleRegions":{"regions":["ny","slc"],"valid":true,"error":null},"rateLimits":{"perIpPerMinute":60,"perPayerPerMinute":30,"screenPerIpPerMinute":240,"note":"perIpPerMinute and perPayerPerMinute apply to the paid endpoints; the free /analyse-token has its own per-IP limit, screenPerIpPerMinute. A 429 does not consume a payment authorization. Back off for Retry-After seconds and present the same one again."},"custody":"none — ZendIQ never holds keys or funds. /analyse builds no transaction; /optimize returns an unsigned transaction you sign yourself. You submit it, except on Jito bundle venues, where you post the signed transaction to /v1/agent/bundle and ZendIQ broadcasts those exact bytes; a signed transaction cannot be altered."}