Skip to main content
Once you submit a recording to Shilo, the AI pipeline processes it asynchronously. Retrieving analysis requires polling the appropriate endpoint until the progress field reaches 100, then reading the structured result. This guide covers the polling pattern, every analysis field, and how to retrieve the full call transcript.

Analysis Endpoints

All three recording types expose identical analysis and transcript endpoints:

Choosing Your Identifier

Right after submitting a call, use the call_event_id from the 202 response as your identifier:
Once analysis completes and you have retrieved the full call object (which contains the stable Shilo id), you can switch to the plain UUID for any subsequent lookups. You can also use external_recording_id:{your-recording-id} at any time if you prefer to reference calls by your own IDs.

Polling Until Complete

The progress field in the analysis response is an integer from 0 to 100. Keep polling until it equals 100.
While processing (progress < 100):
When complete (progress == 100), all sub-objects are populated.
Use exponential backoff when polling. Start with a 5-second interval, then double it on each unsuccessful poll up to a maximum of 60 seconds. Most calls complete within a few seconds to a few minutes depending on recording length.

Analysis Fields

rating

The AI’s numeric assessment of the call quality.
  • outcome (number) — Numeric score representing overall call quality or outcome result
  • reasoning (string) — Human-readable explanation of the score

summary

A concise narrative of the call.
  • outcome.summary (string) — Natural-language summary of the conversation

coaching

Structured coaching feedback for the agent.
  • possible_improvements (string[]) — Specific behaviors to work on in future calls
  • top_moments (string[]) — Positive highlights worth reinforcing in coaching sessions

disposition

The AI’s classification of the call outcome.
  • outcomes (string[]) — One or more outcome labels for the call
  • reasoning (string) — Explanation for the classification

objections

Objections the prospect raised during the conversation.
  • outcomes (string[]) — List of objection strings identified by the AI

action_items

Follow-up tasks extracted from the call, split by priority.
  • primary (string[]) — High-priority tasks the agent should act on immediately
  • secondary (string[]) — Supporting or lower-priority follow-up actions

speakers

AI-resolved speaker identities.
  • user_name (string) — Resolved name of the agent, reconciled against your user data
  • client_name (string) — Resolved name of the client or prospect

Complete Example Response

Retrieving the Transcript

Once speaker resolution is complete, you can retrieve the full sanitized transcript with AI-resolved speaker labels:
If the transcript is not yet ready, you receive a 409 Conflict response. Wait a moment and retry.
The transcript endpoint is not supported for accounts connected to Follow Up Boss. Calling it from such an account returns 403 Forbidden with a message indicating the CRM integration limitation.
The transcript endpoint for roleplays does not carry the Follow Up Boss restriction—GET /api/v1/roleplays/{identifier}/transcript works for all account types.