API Documentation

Cloudflare Access
A

Getting Started

Base URL

https://eval-api.magicblocks.ai

Authentication

Two authentication methods are used depending on the endpoint:

Webhook
HMAC-SHA256 Signature

For POST /api/eval. Include signature in the X-Eval-Signature header. Computed as HMAC-SHA256(body, workspace_secret).

API Key
Bearer Token

For all other endpoints. Include in the Authorization: Bearer <api_key> header.

Integration Flow

1
Send Webhook
2
Receive 202
3
Poll Status
4
Get Result

1. POST the conversation payload to /api/eval. Returns 202 Accepted with an evalId.

2. Poll GET /api/eval/:sessionId/status every 5 seconds. The response includes a Retry-After header.

3. When status is complete, fetch the full result from GET /api/eval/:sessionId/result.

4. Status lifecycle: pendingprocessingcomplete | failed

Endpoint Reference

MethodPathPurposeAuth
POST
/api/evalSubmit conversation for evaluation
HMAC
GET
/api/eval/:sessionId/statusPoll evaluation status
API Key
GET
/api/eval/:sessionId/resultGet full evaluation result
API Key
GET
/api/evalsList evaluations (paginated)
API Key
DELETE
/api/eval/:evalIdDelete single evaluation
API Key
POST
/api/evals/bulk-deleteDelete multiple evaluations (up to 100)
API Key
GET
/api/config/:agentIdGet agent evaluation config
API Key
PUT
/api/config/:agentIdUpdate agent evaluation config
API Key
GET
/api/promptGet current system prompt
API Key
PUT
/api/promptUpdate system prompt (new version)
API Key
GET
/api/prompt/versionsList prompt version history
API Key
POST
/api/prompt/rollbackRollback to a specific prompt version
API Key
POST
/api/simulateRun test eval synchronously (simulator)
API Key
GET
/api/healthHealth check and system stats
None

Webhook Payload Schema

Only three fields are required. All others degrade gracefully when missing.

Required Fields

  • workspaceId — workspace identifier
  • session.id — unique session ID
  • session.messages[] — conversation transcript

Optional Fields

  • session.channel, durationMs, goals, keyFacts, summary
  • contact — name, emails, phones
  • agent — id, name, purpose, industry
  • evalConfig — inline rules, watchlist, topics
  • messageMetadata — per-message sentiment/flags
curl -X POST https://eval-api.magicblocks.ai/api/eval \
  -H "Content-Type: application/json" \
  -H "X-Eval-Signature: sha256=<hmac_signature>" \
  -d '{
    "workspaceId": "ws_demo",
    "session": {
      "id": "sess_123",
      "messages": [
        { "id": "m1", "role": "agent", "content": "Hello!" },
        { "id": "m2", "role": "lead", "content": "Hi there" }
      ]
    }
  }'

Polling Status Responses

pending
{ "status": "pending", "sessionId": "sess_123", "queuedAt": "2026-04-09T14:00:00Z", "retryAfter": 5 }
processing
{ "status": "processing", "sessionId": "sess_123", "startedAt": "2026-04-09T14:00:05Z", "retryAfter": 5 }
complete
{ "status": "complete", "sessionId": "sess_123", "evalId": "eval_abc123",
  "completedAt": "2026-04-09T14:00:20Z",
  "resultUrl": "/api/eval/sess_123/result",
  "summary": { "npsScore": 8, "flagged": false, "complianceRating": "compliant" } }
failed
{ "status": "failed", "sessionId": "sess_123", "error": "AI model timeout", "retryable": true }

Error Codes

CodeHTTPDescription
INVALID_PAYLOAD400Payload failed validation (details in response)
MISSING_REQUIRED_FIELD400A required field (messages, sessionId, workspaceId) is missing
DUPLICATE_SESSION409Session already queued or evaluated
EVAL_NOT_FOUND404No eval exists for this session or eval ID
UNAUTHORIZED401Invalid or missing API key / HMAC signature
RATE_LIMITED429Too many requests (check Retry-After header)
INTERNAL_ERROR500Unexpected server error

Error Response Format

{
  "error": {
    "code": "EVAL_NOT_FOUND",
    "message": "No evaluation found for session sess_abc123",
    "requestId": "req_a1b2c3d4e5f6"
  }
}