Docs & API reference
Everything you need to connect your AI chatbot, AI agents and n8n/Make automations to ProofMyAI. Most setups take under 10 minutes and many need no code at all. Prefer video? Watch the 3-minute setup tutorial โ.
Quick start
- Create a free account (50 conversations a month free, no card).
- Open your project โ Settings and copy your API key (it starts with
ap_live_). Each project has its own key. - Pick what you want to monitor: upload chat transcripts, connect n8n/Make, or send events to the API below.
- Add a Slack, email, Telegram or webhook channel under Settings โ Notifications so you hear about problems.
Connect without code
- Chat transcripts: export conversations from Intercom, Tidio, Crisp, Zendesk or any bot as CSV/JSON and upload them in Chatbot audits. Add your help articles first so answers are checked against them.
- Nightly bot tests: in Chatbot tests, paste your bot's HTTP endpoint and a list of questions with the facts a right answer must include. ProofMyAI asks your bot every night.
- n8n: n8n โ Settings โ n8n API โ create a key. In ProofMyAI open n8n & Make โ Connect n8n and paste your n8n URL and key. Executions are pulled every 15 minutes.
- Make: Make โ Profile โ API access โ add a token with
scenarios:read. Connect Make in ProofMyAI with your scenario IDs. - Twilio / WhatsApp: in Live tracking, connect Twilio with a read-only API key to check bot replies on SMS and WhatsApp.
Authentication
Send your project API key with every request, in either header:
Authorization: Bearer ap_live_xxxxxxxxxxxxxxxx
# or
X-API-Key: ap_live_xxxxxxxxxxxxxxxxBase URL: https://proofmyai.com/api/v1. Bodies are JSON (Content-Type: application/json), up to 2 MB. Keep the key on your server; don't put it in browser code. You can regenerate it in Settings at any time.
POST /chat-events: live chatbot monitoring
Send each conversation as it happens, either the full message history or just the newest question and answer. Personal data is masked before anything is stored or checked. Replies are graded in the background against your help articles and rules.
| Field | Type | Description |
|---|---|---|
conversation_id | string, required | Your ID for the conversation. Sending the same ID again adds only the new turns. |
messages | array | Full history: [{ role: "user" | "assistant", content }]. |
question | string | The customer's message. Send it alone when the customer writes, and ProofMyAI alerts you if the bot never replies. |
answer | string | The bot's reply to question. |
bot_name | string | Optional label when you run several bots. |
latency_ms | integer | Optional: how long the reply took. |
cost_usd | number | Optional: what the reply cost. |
error | string | Optional: an error your bot hit while replying. |
Send messages, or question + answer, or just question.
curl -X POST https://proofmyai.com/api/v1/chat-events \
-H "Authorization: Bearer $PROOFMYAI_KEY" \
-H "Content-Type: application/json" \
-d '{
"conversation_id": "chat-8841",
"question": "How much is shipping to Germany?",
"answer": "Shipping to Germany is free on all orders.",
"latency_ms": 1850
}'Response 202: {"accepted": 1}. Add ?wait=1 to wait for the verdicts (slower; useful for testing):
{"graded": 1, "results": [{"turn_index": 0, "verdict": "hallucination", "label": "Made up",
"severity": "high", "reason": "The shipping article says Germany costs โฌ9.90; free shipping is not mentioned."}]}Verdicts: correct, unsupported (not in your docs), hallucination (made up), should_escalate, off_policy, unclear.
Tip: call the API without waiting for it (fire-and-forget) so your bot never slows down. The Live tracking page in your dashboard has ready-made cURL, JavaScript and Python snippets that do this safely, plus no-code steps for Intercom, Zendesk, Crisp and Tidio through n8n or Make.
POST /agent-runs: AI agent monitoring
Send one request when an agent run finishes. ProofMyAI checks it for loops, tool errors, runaway cost, slow runs, empty output and answers the tools didn't support.
| Field | Type | Description |
|---|---|---|
run_id | string, required | Unique ID of this run. Sending the same run_id twice returns 409. |
agent_name | string, required | Which agent ran, e.g. "refund-agent". |
goal | string | What the agent was asked to do. |
status | string | success (default), error, timeout or cancelled. |
final_output | string | The agent's final answer or result. |
steps | array | Each step: { type: llm | tool | retrieval | other, name, input, output, error, duration_ms, tokens, cost_usd }. |
curl -X POST https://proofmyai.com/api/v1/agent-runs \
-H "Authorization: Bearer $PROOFMYAI_KEY" \
-H "Content-Type: application/json" \
-d '{
"run_id": "run_2026_0412",
"agent_name": "refund-agent",
"goal": "Refund order #1043",
"status": "success",
"final_output": "Refund of $49 issued.",
"steps": [
{"type": "tool", "name": "lookup_order", "output": {"total": 49}, "duration_ms": 320},
{"type": "tool", "name": "issue_refund", "error": "Payment API timeout", "duration_ms": 30000, "cost_usd": 0.002}
]
}'Response 201 (example):
{"id": 812, "score": 55, "issues": [
{"code": "TOOL_ERRORS", "severity": "high", "message": "..."},
{"code": "ENDED_ON_ERROR", "severity": "medium", "message": "The last step failed but the run still reported success."}]}Issue codes: RUN_FAILED, TOOL_ERRORS, LOOP_DETECTED, TOO_MANY_STEPS, OVER_BUDGET, SLOW_RUN, EMPTY_OUTPUT, ENDED_ON_ERROR, plus from the AI review GOAL_NOT_MET and UNGROUNDED_OUTPUT. Set your step, cost and time limits in project Settings.
POST /workflow-runs: n8n, Make and Zapier
Most people connect n8n or Make with an API key instead (see above). Use this endpoint for Zapier, self-built pipelines, or to push runs yourself. Send one run or an array of up to 500.
| Field | Type | Description |
|---|---|---|
workflow_id | string, required | Your workflow or scenario ID. |
execution_id | string, required | Unique ID of this run (duplicates are ignored). |
status | string, required | success, error, warning, running, waiting, cancelled or crashed. |
platform | string | n8n, make, zapier or other (default). |
workflow_name | string | Readable name shown in alerts. |
started_at | ISO 8601 | When the run started, with a time zone, e.g. 2026-09-29T10:15:00Z. |
duration_ms | number | How long it took. |
output_items | integer | How many items it produced. 0 on a "success" is flagged as a silent failure. |
error_message | string | The error, if any. |
curl -X POST https://proofmyai.com/api/v1/workflow-runs \
-H "Authorization: Bearer $PROOFMYAI_KEY" \
-H "Content-Type: application/json" \
-d '[{"platform": "zapier", "workflow_id": "order-sync", "workflow_name": "Shopify โ Sheets",
"execution_id": "ex_99121", "status": "success", "output_items": 0, "duration_ms": 2400}]'Response 201: {"received": 1, "created": 1, "duplicates": 0}
Errors & limits
| Status | Meaning |
|---|---|
400 | Invalid JSON or a missing/invalid field. The error field says which one. |
401 | Missing or wrong API key, or the account is suspended. |
402 | Your plan's monthly limit is reached. Upgrade under Plan & billing; nothing else breaks. |
409 | An agent run with this run_id was already recorded. |
413 | Body over 2 MB, or more than 500 workflow runs in one request. |
429 | More than 600 requests per minute for one project. Retry after a short pause. |
Errors look like {"error": "conversation_id: Required"}. A service health check is available at https://proofmyai.com/api/health, and live status at /status.
Privacy & data
Emails, phone numbers, card numbers, IBANs, IP addresses and names are masked before storage or AI checks. Per project you can turn on results-only storage, set auto-delete, add your own words to mask, or switch AI checking off. Details in the Trust Center.
Stuck? Open a support ticket or message us on WhatsApp. See what's new in the changelog.