HTTP API
Base URL: https://api.aefi.io. JSON in, envelope out.
CORS allows aefi.io and demo.aefi.io.
Auth
Agents pay 0.01 USDC per call (x402 + MPP) on
/v1/* except /v1/scenarios. Unpaid calls
return 402 with an accepts[] body,
PAYMENT-REQUIRED, and
WWW-Authenticate: Payment. Retry with
PAYMENT-SIGNATURE. Humans and Evidence Studio may send
x-aefi-api-key instead.
Machine-readable spec (free):
GET https://api.aefi.io/openapi.json.
Contact: [email protected].
Endpoints
| Method | Path | Purpose |
|---|---|---|
| GET | /health |
Liveness + Neo4j connectivity |
| POST | /v1/providers/search |
Provider search (NL + filters + sort/page) |
| GET | /v1/providers/:id |
Single provider performance envelope |
| GET | /v1/transactions/:hash |
Explain transaction |
| POST | /v1/payments/verify |
Verify by tx_hash or payment_id |
| GET | /v1/jobs/:job_id |
ERC-8183 job lookup |
| GET | /v1/agents/:id/activity |
Observed activity (partial) |
| GET | /v1/scenarios |
Studio search presets |
| POST | /v1/authority/check |
Wave B — honest gap envelope |
| GET | /v1/tasks/:id |
Wave C — honest gap envelope |
Search body
{
"query": "string, optional",
"capability": "optional exact tag",
"minimum_verified_jobs": 0,
"minimum_completion_rate": 0,
"minimum_confidence": "unverified",
"sort_by": "score",
"sort_dir": "desc",
"limit": 25,
"offset": 0,
"semantic_top_k": 20
}
result includes results,
total_matched, offset,
limit, sort_by,
sort_dir, has_more.
Verify body
{
"tx_hash": "0x…",
"payment_id": "pay:5042002:0x…:13"
}
Send one identifier. payment_id is the faster unique lookup.
Errors
Transport errors are HTTP status. “Not in graph” is still
200 with verified: false or
found: false and coverage gaps — absence is a
first-class result.