REST API
No MCP? Every one of the 49 tools is reachable over plain HTTP at
https://api.vidmee.ai. One envelope covers the whole surface.
Authentication
Bearer token on every request. Create a key in the dashboard.
curl https://api.vidmee.ai/v1/status \
-H "Authorization: Bearer $VIDMEE_API_KEY"
The job envelope
Everything is POST /v1/jobs with an operation and its input.
curl https://api.vidmee.ai/v1/jobs \ -H "Authorization: Bearer $VIDMEE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "operation": "inspect", "input": { "source": "https://staging.acme.app/checkout", "goal": "the Pay button is visible and the form has no errors" } }'
Operation names and aliases
operation accepts the canonical tool name or its dotted namespace alias, they are equal:
"operation": "inspect" == "qa.inspect" "operation": "search_visual_memory" == "memory.search" "operation": "generate_visual" == "generate.visual"
Full map, scopes, and per-op JSON-Schema at GET /v1/operations and GET /v1/operations/{name}.
Long-running jobs
Calls block up to ~30s. Longer ops (sweep_site, compose_video,
generate_until_pass, storyboard_video) return a poll_url and
events_url. Poll or stream, or fetch by id with get_result. Over MCP this
is transparent, the call just returns the final result.
Spend control: quotes, holds, per-agent budgets
Money is a first-class API surface, built for agents that hold a budget:
Quote before you spend. estimate prices any specific job for free. Generation
pre-authorizes the estimate as a hold and settles on actual provider cost; failed generations refund
the hold. Every tool description states its own price; get_wallet shows live balances.
Per-agent hard caps. Tag any job with an agent_id in its input, then cap that
agent with POST /v1/wallet/budgets (admin-scoped key): daily or monthly caps on analysis
credits and generation spend. A capped agent’s over-budget call fails with a structured error
instead of spending. GET /v1/wallet/budgets lists caps and current-period spend.
// give the nightly QA agent a hard daily ceiling curl -X POST https://api.vidmee.ai/v1/wallet/budgets \ -H "Authorization: Bearer $VIDMEE_ADMIN_KEY" -H "content-type: application/json" \ -d '{"agent_id": "qa-nightly", "period": "day", "analysis_cap_credits": 200, "hard": true}' // every job that agent runs carries its id {"operation": "inspect", "input": {"source": "https://...", "agent_id": "qa-nightly"}}
Signed evidence packs
Any completed job can produce an offline-verifiable receipt: POST /v1/evidence/{job_id}
returns a canonical manifest (result digest + the stored SHA-256 of every referenced screenshot)
signed with VidMee’s Ed25519 key (GET /v1/evidence/key). Verify the signature, the
manifest bytes, and the downloaded artifact’s hash without contacting VidMee — machine-consumable
proof of what the agent’s work looked like, made for CI logs, tickets and audit trails.
Reference verifier: vidmee.ai/verify-evidence.py —
python3 verify-evidence.py pack.json screenshot.png.
Idempotency
Pass a stable client_ref (e.g. "{run_id}:{step}") so a retry returns the SAME job, never a duplicate charge.
Result envelope
Hero tools always return a verdict; specialists return the fields they produce.
{
"verdict": "issues_found", // clean | issues_found | regression_detected | pass | fail
"safe_to_ship": false,
"findings": [ { "severity": "p1", "title": "...", "evidence": "..." } ],
"asset_id": "img_...", // signed URLs, private, short-lived
"next_actions": [ "..." ]
}
Errors
{ "error": { "code": "provider_rate_limited",
"message": "...", "retryable": true } }
Retry on retryable: true. The full retryable-code list is on each op at GET /v1/operations/{name}.
Discovery endpoints (no auth)
| Endpoint | What |
|---|---|
GET /llms.txt | The quickstart an LLM reads to self-onboard. |
GET /openapi.json | Full OpenAPI schema. |
GET /v1/operations | Every operation: scope, layer, summary, input JSON-Schema. |
GET /v1/operations/{name} | One operation's full contract. |
GET /v1/integrations | Paste-ready harness configs. |
GET /v1/providers | Generation providers and what each is best for. |