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.sql applied. 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=1 to reject anonymous requests when you have no AMPLY_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.

MethodPathPurpose
GET/api/v1/agentAgent workflow manifest (steps + commercial paths)
POST/api/v1/signup/agentMint API key without OAuth (when enabled + terms accepted)
POST/api/v1/routeRecommend a provider for a task
POST/api/v1/outcomeSubmit route outcome feedback (1 credit per accepted submission)
POST/api/v1/reportCost and savings report for 30d/90d windows
GET/api/v1/statusHealth, version, auth mode, catalog diagnostics
GET/api/v1/healthLatest provider health states from 5-minute probes (requires Bearer)
GET/api/v1/openapiOpenAPI 3 JSON document
GET/api/v1/providersPublic provider snapshot
POST/api/v1/route/outcomeOptional async execution feedback (post-route telemetry)
GET/api/v1/route/auditAudit bundle + proof hash for a route request_id (scoped to principal)
GET/api/v1/billing/statusWallet 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 — prefer routeTaskTracked() so you get a bound reportOutcome after each route.
  • Python: amply_sdk.route_task_tracked mirrors the same pattern (report_outcome closure).

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