MeetGrade MeetGrade

REST API & Webhooks for Call Data Pipelines

In short: A call analysis API lets you pull recorded-call data, transcripts, and QA scores into your own systems over HTTPS, while webhooks push an event to your endpoint the moment a call finishes scoring. Together they form a pipeline: webhooks notify you in real time, then a REST GET fetches the full result, so you never have to poll. MeetGrade exposes a read-only JSON REST API (Bearer auth, base path /api/v1) plus a signed qa_completed webhook for exactly this pattern.

If you record and score sales calls, interviews, or support conversations, the data is only as useful as the systems you can route it into. A call analysis API turns scored calls into structured JSON your CRM, data warehouse, BI tool, or internal app can consume — and webhooks make that flow event-driven instead of a polling loop. This guide covers how the two fit together and how to build a reliable pipeline.

REST API vs. webhooks: pull vs. push

The two mechanisms solve opposite halves of the same problem.

The canonical pattern combines both: the webhook tells you that a call was graded and hands you its ID; a single REST GET then pulls the full result. This keeps webhook payloads small and gives you the complete record on demand.

Anatomy of a call data pipeline

A typical end-to-end flow looks like this:

Designing the REST layer

A clean call analysis API speaks JSON over HTTPS with predictable, paginated endpoints. In MeetGrade's v1.0 these are deliberately read-only — built for export and reaction, not writes:

Two schema details matter for parsing. criteria is an object keyed by criterion name{ key: { score, comment } } — not an array, so iterate keys rather than indexes. And on legacy records checklist_id may be null, so fall back gracefully when mapping.

Authentication and rate limits

Authenticate every request with a Bearer token in the Authorization header (keys look like mg_live_… and are shown only once at creation — store the hash-free secret server-side). MeetGrade rate-limits each key to 120 requests per minute; exceeding it returns HTTP 429, so back off and retry after a short pause. Keep keys out of browser code, mobile apps, and public repos, and rotate immediately if one leaks.

Building reliable webhooks

Webhooks are simple to consume but easy to get wrong in production. A few non-negotiables:

The qa_completed payload is intentionally minimal — event name, bot_id, source, manager, score, key_result_achieved, checklist id, timestamps, and a link back to the call card. That's enough to decide whether to act and to fetch the rest.

Common use cases

Where MeetGrade fits

MeetGrade is one option built specifically for this pipeline: a JSON REST API with Bearer auth and pagination, plus a signed qa_completed webhook, on usage-based pricing. If you'd rather avoid code entirely, generic outbound webhooks also let a no-code tool like Zapier or Make catch the event and fan it out. If you're already recording and scoring calls and want that data flowing into your own stack, the API docs and a free key are a quick way to prototype the loop end to end.

Frequently asked questions

What is a call analysis API?

It's a REST interface that lets you programmatically pull data about recorded calls — metadata, transcripts, and QA scores — into your own systems over HTTPS as structured JSON. MeetGrade's v1.0 is read-only and exposes GET /calls, GET /calls/{id} (with the full per-criterion QA breakdown), and GET /checklists, authenticated with a Bearer token.

Should I use webhooks or poll the REST API?

Use both, for different jobs. Webhooks push an event the moment a call finishes scoring, so you react in real time without a polling loop; the REST API is for on-demand fetches and backfills. The standard pattern is to let the qa_completed webhook notify you with the call ID, then make one REST GET to retrieve the full result — this avoids polling and keeps payloads small.

How do I verify a webhook is genuine?

Recompute the signature. MeetGrade signs each delivery with an X-StudyLess-Signature header containing an HMAC-SHA256 of the raw request body keyed with your webhook secret. Compute the same HMAC over the exact bytes you received and compare with a constant-time check (e.g. hmac.compare_digest) before processing. Reject anything that doesn't match.

What happens if my endpoint is down when a webhook fires?

MeetGrade retries automatically on 5xx responses and network errors using exponential backoff, and does not retry on 4xx (treated as a client error). Because retries can cause duplicate deliveries, make your handler idempotent — key processing on the call ID so a repeated delivery is a safe no-op.

Are there rate limits on the API?

Yes. Each API key is limited to 120 requests per minute; exceeding it returns HTTP 429. Back off and retry after a short pause, and use the limit and offset parameters on GET /calls to paginate large backfills efficiently rather than firing many rapid requests.

Related reading

See MeetGrade on your own calls

AI notetaker + scoring for Zoom, Google Meet & phone. Pay-as-you-go, free minutes to start.

Try MeetGrade free