Sabi
Give your agent eyes on the physical world.
Try it now
Go to the web app (demo pre-filled), or give your Nevermined agent our docs URL plus your preferred prompt to get verified.
Example prompt: “Is the AWS vending machine Out of Order right now?”
Or: “Is there security at the front desk?”
Scan the QR code or open https://webapp-psi-inky.vercel.app?demo=1 to place the demo order (AWS vending machine).
Tell your agent
Copy this and paste it to your AI agent. That's all you need to do.
Follow the instructions at https://webapp-psi-inky.vercel.app/skill to use the Sabi real-world verification API. Sign up, submit verifications, and retrieve photo-verified answers about physical locations.Sabi dispatches a human verifier to any location. They capture photos with smart glasses and answer your agent's question. Three API calls. No SDK.
1. Sign up
curl -X POST https://sabi-backend.ben-imadali.workers.dev/api/auth/signup \
-H "Content-Type: application/json" \
-d '{}'
# => {"apiKey": "sabi_sk_...", "userId": "..."}Save the apiKey. Use it on all subsequent requests. Do this once.
2. Submit a verification
# First call without payment token to get 402 + payment info:
curl -X POST https://sabi-backend.ben-imadali.workers.dev/api/verifications \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <apiKey>" \
-d '{
"question": "Is the AWS vending machine Out of Order right now?",
"targetLat": 37.7851,
"targetLng": -122.3965
}'
# => HTTP 402, payment-required header (base64 JSON with planId/agentId)
# Then retry with x402 access token from Nevermined:
curl -X POST https://sabi-backend.ben-imadali.workers.dev/api/verifications \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <apiKey>" \
-H "payment-signature: <access-token>" \
-d '{
"question": "Is the AWS vending machine Out of Order right now?",
"targetLat": 37.7851,
"targetLng": -122.3965
}'
# => {"job": {"id": "...", "status": "connecting"}}Payment uses the x402 protocol. The 402 response includes a payment-required header (base64 JSON with planId and agentId).
How to get an access token
You need a Nevermined API key. Get one at sandbox.nevermined.app (or nevermined.app for production).
Using the JS SDK
import { Payments } from "@nevermined-io/payments";
const payments = Payments.getInstance({
nvmApiKey: "<your-nvm-api-key>",
environment: "sandbox",
});
await payments.plans.orderPlan("<planId>");
const { accessToken } = await payments.x402
.getX402AccessToken("<planId>", "<agentId>");Using curl
# 1. Order the plan (once)
curl -s -X POST https://api.sandbox.nevermined.app/api/v1/payments/plans/<planId>/order \
-H "Authorization: Bearer <your-nvm-api-key>"
# 2. Get x402 access token
curl -s -X POST https://api.sandbox.nevermined.app/api/v1/x402/permissions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <your-nvm-api-key>" \
-d '{"accepted":{"scheme":"nvm:erc4337","network":"eip155:84532","planId":"<planId>","extra":{"agentId":"<agentId>"}}}'
# => {"accessToken": "..."}Use the returned accessToken as the payment-signature header in the verification request above.
3. Get the result
curl https://sabi-backend.ben-imadali.workers.dev/api/verifications/<id>/artifact \
-H "Authorization: Bearer <apiKey>"
# => {"answer": "Yes, it's open", "frames": [...]}Poll GET /api/verifications/<id> until status is "verified", then fetch the artifact.
What comes back
answer — the verifier's spoken response, transcribed
frames — timestamped photos captured every 5s during the session
For AI agents
Point your agent at SKILL.md — a self-contained instruction file. The agent signs itself up, resolves locations, submits verifications, and retrieves results. No human setup required.
API reference
| Method | Path | Description |
|---|---|---|
| POST | /api/auth/signup | Create account |
| POST | /api/verifications | Submit verification (requires payment-signature header) |
| GET | /api/verifications | List jobs |
| GET | /api/verifications/:id | Job status |
| GET | /api/verifications/:id/artifact | Result (answer + photos) |