The MeerTech API is the programmatic surface behind the SDKs. REST for configuration, resource management, and inspection. WebSocket + webhooks for live run events. Every call is scoped by an agent identity and gated by Sentinel.
https://api.meertech.tech/v1
Bearer token (agent identity) or HMAC (webhook ingress)
application/json · UTF-8 · RFC 3339 timestamps
Cursor-based — `?cursor=…&limit=50` (max 200)
Idempotency-Key header on all POSTs, 24h window
Major version in path, feature flags per workspace
Per-workspace; burst + sustained headers on every response
A run is the unit of autonomous work: plan, steps, trace, outcome. Runs are always scoped to an agent and carry the policy envelope resolved at start time.
/agents/{agent_id}/runs
Start a new run for an agent. Returns a run id and the resolved policy envelope.
request
http
POST /v1/agents/finance.reconciler/runs
Authorization: Bearer sk_live_...
Idempotency-Key: run-2026-04-18-period-close
{
"inputs": {
"period": "2026-04",
"scope": ["intercompany", "bank.primary"]
},
"mode": "live",
"trace_level": "detailed"
}201 response
json
{
"run_id": "rn_9f2a4b",
"agent_id": "finance.reconciler",
"status": "queued",
"policy_envelope": "envelope:finance.reconciler@v7",
"trace_url": "/v1/runs/rn_9f2a4b/trace",
"created_at": "2026-04-18T12:04:21Z"
}/runs/{run_id}
Inspect run state. Includes the resolved plan, step progress, pending approvals, and outcome.
200 response
json
{
"run_id": "rn_9f2a4b",
"status": "awaiting_approval",
"plan": {
"steps_total": 42,
"steps_completed": 38,
"steps_pending": 1,
"steps_escalated": 3
},
"awaiting": [
{ "step_id": "st_12", "queue": "controller.queue",
"reason": "amount > 25000" }
],
"started_at": "2026-04-18T12:04:21Z",
"trace_cursor": "tr_3b1c"
}/runs/{run_id}/pause
/runs/{run_id}/resume
/runs/{run_id}/cancel
Operator controls. Pause suspends the scheduler; cancel marks the run terminal and flushes any pending approvals.
/runs/{run_id}/trace
Stream or page the run's audit trace — every step, tool call, policy decision, and approval in order.
stream frame
json
{
"ts": "2026-04-18T12:04:22Z",
"step_id": "st_07",
"kind": "tool.call",
"tool": "mcp.zoho_books.post_journal",
"policy": "allow",
"latency_ms": 184,
"result": "jrn_9f2a"
}Tools are external capabilities an agent may invoke. Each is registered under a policy binding — what it does, who may call it, and under what envelope.
/tools
request
http
POST /v1/tools
Authorization: Bearer sk_live_...
{
"name": "zoho_books.post_journal",
"provider": "mcp.zoho_books",
"input_schema": { "$ref": "#/schemas/JournalEntry" },
"output_schema": { "type": "string" },
"policy_binding": {
"envelope": "envelope:finance.reconciler@v7",
"required_scopes": ["post.journal"]
},
"idempotent": true
}/tools
/tools/{tool_id}
/tools/{tool_id}
List, inspect, retire. Retiring a tool leaves historical runs intact — the trace still references it by id.
Two ingest paths: REST batch for structured backfills, streaming socket for live telemetry. Every record carries source, timestamp, and policy class.
/grid/connectors/{id}/ingest
batch request
http
POST /v1/grid/connectors/sap.gl/ingest
Content-Type: application/json
Idempotency-Key: sap-gl-2026-04-batch-7
{
"records": [
{ "id": "txn_1", "ts": "2026-04-18T11:00:00Z",
"source": "sap.gl", "policy_class": "internal.finance",
"body": { ... } }
]
}202 accepted
json
{
"accepted": 1,
"rejected": 0,
"lineage_root": "ln_7f12"
}wss://grid.meertech.tech/v1/stream
WebSocket stream. Subscribe to connector topics; server pushes records with lineage as they land. Auth via bearer + topic scope.
Every state change emits an event. Route them to webhooks, Slack, PagerDuty, or downstream systems. Signed with HMAC SHA-256 and delivered with exponential backoff retry.
/webhooks
subscribe
http
POST /v1/webhooks
{
"url": "https://ops.example.com/hooks/meertech",
"events": [
"run.started",
"run.awaiting_approval",
"run.succeeded",
"run.failed",
"policy.denied"
],
"secret": "whsec_..."
}(your url)
run.awaiting_approval delivery
json
{
"event": "run.awaiting_approval",
"ts": "2026-04-18T12:04:22Z",
"run_id": "rn_9f2a4b",
"agent_id": "finance.reconciler",
"step_id": "st_12",
"queue": "controller.queue",
"reason": "amount > 25000",
"payload_preview": { "vendor": "AWS", "amount_usd": 28450 },
"signature": "t=1713...,v1=3b1c..."
}error response
json
{
"error": {
"code": "policy_denied",
"message": "Action exceeded autonomous envelope",
"detail": {
"envelope": "envelope:finance.reconciler@v7",
"violation": "amount_usd > autonomous_max",
"observed": 62000,
"limit": 50000,
"escalation_queue": "treasury.queue"
},
"request_id": "req_3b1c"
}
}Bad request — schema mismatch, malformed body
Unauthenticated — missing or expired bearer
Policy denied — Sentinel refused the action
Resource not found or out of scope for this identity
Idempotency conflict — key reused with different body
Rate limit — retry with exponential backoff
Transient — retry with exponential backoff + jitter