Fair use for integration and light traffic with abuse protection. Production agent workloads run on a prepaid usage model: deposit funds (for example $10), then each request debits that balance until topped up. This is built for high call volume, not a fake flat subscription for one endpoint. The public catalog is curated by Amply; providers do not pay for visibility or placement.
Developer documentation
Amply API
Current release: v3.1.13, aligned with GET /api/v1/status.
New here? Start with the overview below.
Overview
Amply exposes a single decision endpoint: you send a natural-language task (plus optional workload hints), and receive a ranked recommendation with economics, latency signals, and a machine-readable why. Integrate from any stack with fetch, curl, or the SDKs below once published.
Base URL (production): https://www.useamply.com/api/v1
How we keep cost and latency comparable
There is no public “live feed” of vector-database pricing and performance that stays fresh and apples-to-apples. Instead, Amply continuously measures its own routing path (scheduled probes plus real traffic), combines that with verified catalog data, and shows you what each recommendation leaned on—see metrics_source and measured_at on GET /api/v1/providers and in raw_metrics from POST /api/v1/route. Freshness hints live on GET /api/v1/status. For the full picture, read catalog methodology.
Authentication
Send a Bearer token on POST /api/v1/route:
Authorization: Bearer YOUR_API_KEY
- User keys. Sign in and create keys in the dashboard. Requires Supabase +
database_setup_amply_api_keys.sqlapplied. Secrets are stored as SHA-256 only; the full key is shown once at creation. - Server keys. Comma-separated
AMPLY_API_KEYS(ops / shared secrets). If set, every request must present a valid env key or a valid user key. - Require Bearer. Set
AMPLY_REQUIRE_API_KEY=1to reject anonymous requests when you have noAMPLY_API_KEYS(e.g. production with user keys only).
If nothing requires auth (local dev), requests without Authorization may still succeed. Check /api/v1/status for auth_mode and diagnostics.user_api_keys_store_ready.
Production keys & principals
For metering, prepaid wallet debit, per-principal quota, and audit scoping, callers should use a user-bound secret: either a dashboard-created key from /dashboard/api-keys (after sign-in) or an autonomous key from POST /api/v1/signup/agent when enabled.
AMPLY_API_KEYS (server env) are operator keys: they authenticate but do not attach a principal, so settlement and audit ownership behave differently. Use env keys for cron, probes, and internal tools — not as the default for customer agents.
Every successful POST /api/v1/route response with metering on includes an integration object: deep links for billing status, outcome reporting, and audit bundles; structured alerts plus a recommendation when no principal is present. Response headers include X-Amply-Principal-Bound (0 or 1) and X-Amply-Auth-Source (e.g. user_key vs server_key). GET /api/v1/status exposes diagnostics.principal_binding with policy copy and a rolling last_24h_metering_snapshot (including no_principal_pct).
Agent interface (workflow + signup)
Workflow manifest. GET /api/v1/agent returns a single JSON document: ordered workflow.steps with all credential steps before GET /api/v1/providers (discover → health → schema → credential → catalog → route → outcome → audit), credential_before_catalog: true, principal_binding_policy (when to use user-bound keys vs server keys), commercial (pricing pointer, provider catalog intent / mailto, optional Stripe listing URL from env), and signup flags. Use it as the canonical bootstrap instead of parsing HTML.
Autonomous API key. When the deployment sets AMPLY_AGENT_SIGNUP=1, agents can call POST /api/v1/signup/agent with { "accept_tos_version": "…" } (must match diagnostics.agent_signup.tos_version from GET /api/v1/status). The response includes api_key once and quickstart URLs. Optional shared secret: header X-Amply-Agent-Signup-Token when AMPLY_AGENT_SIGNUP_SHARED_SECRET is set. Apply database_migration_amply_agent_signup.sql so new columns exist on amply_api_keys.
Billing model. Agents are expected to run against a prepaid balance. Deposit once, consume usage charges per request, and top up when depleted. Read response-level economics from usage and estimated_charge_usd on POST /api/v1/route.
Endpoints
v1 scope. Amply v1 is routing-first: discovery, status, providers, route, and optional outcome telemetry are stable API contracts. Payments settlement rails, enterprise policy engines, and adversarial-defense APIs are not guaranteed v1 contracts unless explicitly documented as shipped.
| Method | Path | Purpose |
|---|---|---|
| GET | /api/v1/agent | Agent workflow manifest (steps + commercial paths) |
| POST | /api/v1/signup/agent | Mint API key without OAuth (when enabled + terms accepted) |
| POST | /api/v1/route | Recommend a provider for a task |
| POST | /api/v1/outcome | Submit route outcome feedback (1 credit per accepted submission) |
| POST | /api/v1/report | Cost and savings report for 30d/90d windows |
| GET | /api/v1/status | Health, version, auth mode, catalog diagnostics |
| GET | /api/v1/health | Latest provider health states from 5-minute probes (requires Bearer) |
| GET | /api/v1/openapi | OpenAPI 3 JSON document |
| GET | /api/v1/providers | Public provider snapshot |
| POST | /api/v1/route/outcome | Optional async execution feedback (post-route telemetry) |
| GET | /api/v1/route/audit | Audit bundle + proof hash for a route request_id (scoped to principal) |
| GET | /api/v1/billing/status | Wallet balance + can_call (user-bound keys) |
Outcome telemetry (freshness)
Rankings improve when real execution results flow back. After you call the recommended provider, post POST /api/v1/route/outcome with the route request_id, provider_id, and an outcome enum — ideally from a background queue, not inline on your critical path.
Prefer POST /api/v1/outcome for new integrations. Request body: { route_id, success, actual_latency_ms?, error_code? }. Accepted submissions return { received: true, credits_awarded: 1 }.
Official SDKs expose routeTaskTracked (JS) / route_task_tracked (Python) as the default integration shape: route once, then call the bundled reportOutcome helper when your worker finishes.
Amply also runs scheduled synthetic probes and rolls up 30-day aggregates (see /api/v1/status outcome_telemetry and probe_cycle_cron_path). Target freshness is reflected in outcome_telemetry_target_hours — customer outcomes close the gap fastest.
Ranking transparency: POST /api/v1/route includes rankings[].confidence_sources with catalog/probe/outcome source labels for each ranked provider.
Cost constraints are available on POST /api/v1/route via budget_usd_per_1m_ops and slo_p99_ms. Constrained responses include cost_analysis and optional filtered_out.
Savings API: POST /api/v1/report with { "period": "30d" | "90d" } returns totals and a shareable summary, for example: "Amply saved your agent fleet $1,240.55 in the last 30 days."
See /dashboard/savings for a shareable monthly cost report.
OpenAPI
The machine-readable contract lives at /api/v1/openapi. Import it into Postman, Insomnia, or codegen tools. Spec version matches 3.1.13.
SDKs
Official SDKs support route decisions and optional async outcome reporting.
- TypeScript / JavaScript:
amply-sdk— preferrouteTaskTracked()so you get a boundreportOutcomeafter each route. - Python:
amply_sdk.route_task_trackedmirrors the same pattern (report_outcomeclosure).
Need a reference integration (queue-based async outcome writes)? Contact us via the mission page.
Limits & errors
Optional per-IP rate limits may be enabled via AMPLY_V1_RATE_LIMIT_PER_MIN. When active, expect 429 with error: rate_limited (and optional quota_exceeded when daily per-principal route quota is configured). Invalid or missing auth returns 401 if API keys are required. The same limits surface in machine-readable form: open /api/v1/status and read rate_limit (enabled flag and requests per minute) plus auth_mode.
Wallet debit (402). When strict settlement is enabled for your principal, insufficient prepaid balance returns 402 with shortfall_usd, balance_usd, and a top_up_url hint. Check GET /api/v1/billing/status from the same user-bound key, or open Routing wallet in the dashboard.
Operational status: /api/v1/status · /status · Pricing & quotas