SDKs and tools
Small, dependency-free clients for Python and JavaScript, generated from the same OpenAPI document the API publishes, plus a Postman collection. They are deliberately thin: the API is nine endpoints and one envelope, and a client you can read in full is one you can debug.
Generated, not maintained
Both clients are produced from the published OpenAPI document, which is itself generated from the routes and the catalogue. They are small on purpose — the API is nine endpoints and one envelope, and a client you can read in an afternoon is one you can debug at midnight.
| Download | What it is |
|---|---|
| humanops.py | Python 3.9+. Standard library only — no requests, no dependencies. |
| humanops.js | ES module for Node 18+ and modern browsers. Uses the platform fetch. |
| humanops.postman.json | Postman / Bruno collection covering every endpoint. |
| humanops-examples.zip | Both clients, the collection, the quickstart script and one runnable file per agent framework — the contents of the examples repository. |
| openapi.json | The OpenAPI 3.1 document the other four are built from. |
Python
from humanops import HumanOps
ho = HumanOps(api_key="ho_test_…")
quote = ho.quote("human.verify", location={"country_iso": "ES", "city_slug": "barcelona"})
print(quote["price_cents"])
task = ho.create_task(
capability="human.verify",
spec={"claim": "This address is a working office", "subject": "Acme SL"},
location={"country_iso": "ES", "city_slug": "barcelona"},
max_price_cents=20000,
)
# obeys poll_after_s; returns as soon as there is an answer
result = ho.wait_for_result(task["ref"], timeout=300)
print(result["answer"], result["confidence_bps"])
JavaScript
import { HumanOps } from './humanops.js';
const ho = new HumanOps({ apiKey: 'ho_test_…' });
const task = await ho.createTask({
capability: 'human.verify',
spec: { claim: 'This address is a working office', subject: 'Acme SL' },
location: { country_iso: 'ES', city_slug: 'barcelona' },
max_price_cents: 20000,
});
const result = await ho.waitForResult(task.ref, { timeoutMs: 300000 });
console.log(result.answer, result.confidence_bps);
Frameworks
If you are using an agent framework, reach for the MCP server rather than an HTTP client — LangChain, LlamaIndex, the OpenAI Agents SDK and n8n all speak it, and the install page carries a snippet for each.
The curl cookbook
One call per operation, generated from the same document. Set these two first — a ho_test_ key spends nothing, so start there.
export HO_KEY=ho_test_replace_me
export HO=https://quiescence.eu/humanops/api/v1
listCapabilities
Every capability, with its JSON Schemas, prices and live geographies
curl -s -X GET "$HO/capabilities" | jq .data
getCapability
getCapability
curl -s -X GET "$HO/capabilities/human.verify" | jq .data
getCoverage
getCoverage
curl -s -X GET "$HO/coverage" | jq .data
quoteTask
An exact price, or a refusal with alternatives
curl -s -X POST "$HO/quote" \
-H 'Content-Type: application/json' \
-d '{
"capability": "human.verify",
"location": {
"country_iso": "ES",
"city_slug": "barcelona"
},
"sla": "standard"
}' | jq .data
listTasks
listTasks
curl -s -X GET "$HO/tasks" \
-H "Authorization: Bearer $HO_KEY" | jq .data
createTask
Order a task
curl -s -X POST "$HO/tasks" \
-H "Authorization: Bearer $HO_KEY" \
-H 'Content-Type: application/json' \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"capability": "human.verify",
"spec": {
"claim": "This address is a working office, not a mailbox",
"subject": "Acme SL, Carrer de Balmes 200"
},
"location": {
"country_iso": "ES",
"city_slug": "barcelona"
},
"max_price_cents": 20000
}' | jq .data
getTask
getTask
curl -s -X GET "$HO/tasks/$REF" \
-H "Authorization: Bearer $HO_KEY" | jq .data
getTaskResult
getTaskResult
curl -s -X GET "$HO/tasks/$REF/result" \
-H "Authorization: Bearer $HO_KEY" | jq .data
listTaskEvidence
listTaskEvidence
curl -s -X GET "$HO/tasks/$REF/evidence" \
-H "Authorization: Bearer $HO_KEY" | jq .data
cancelTask
cancelTask
curl -s -X POST "$HO/tasks/$REF/cancel" \
-H "Authorization: Bearer $HO_KEY" | jq .data
disputeTask
Say the delivered answer is wrong
curl -s -X POST "$HO/tasks/$REF/dispute" \
-H "Authorization: Bearer $HO_KEY" \
-H 'Content-Type: application/json' \
-d '{}' | jq .data