Graine AI

List an agent's calls

List the calls this agent has placed, newest first.

List the calls this agent has placed, newest first.

Unlike the older internal API, no implicit status filter is applied: queued, ringing and in-progress calls are visible by default, so a partner polling for a live call can actually see it.

The agent's existence is verified in your organisation first, so an unknown or another tenant's agent answers 404 rather than an empty page.

This endpoint is metered on the executions bucket (600 requests per minute per organisation) rather than the default bucket.

Rate limit: 600 requests per minute per organization (bucket executions.list). Exceeding it returns 429 with Retry-After; the X-RateLimit-* response headers report your remaining allowance on every call.

GET
/v2/agents/{agent_id}/executions
/v2/agents/6c6f4cc3-f56c-479d-8422-7f76694daa29/executions?status=completed%2Cfailed&direction=outbound&from_date=2026-08-01T00%3A00%3A00%2B05%3A30&to_date=2026-08-27T00%3A00%3A00%2B05%3A30&include_transcript=false&page=1&page_size=20

The Authorization access token

Authorization

Authorization
Required
Bearer <token>

Your Graine API key. Create one in the dashboard under Developers, or via POST /v2/api-keys. Send it as Authorization: Bearer <key>.

In: header

Path Parameters

agent_id
Required
Agent Id

Agent identifier.

Query Parameters

statusStatus

Comma-separated statuses, e.g. 'completed,failed'. Also accepts the pseudo-status 'voicemail'. Omit to see every call, including calls that are still in flight.

directionDirection

inbound | outbound

from_dateFrom Date

ISO-8601 with a timezone offset. Filters on creation time.

to_dateTo Date

ISO-8601 with a timezone offset.

include_transcriptInclude Transcript

Include the conversation transcript on every execution.

Default: false

organization_idOrganization Id

Must match the organisation the API key belongs to.

pagePage

1-indexed page number (max 10000 — narrow the window instead)

Default: 1Minimum: 1Maximum: 10000

page_sizePage Size

Items per page (max 100)

Default: 20Minimum: 1Maximum: 100

Response Body

200

A page of this agent's calls, newest first. The objects are the same ones GET /v2/calls returns.

data
Required
Data

This page of executions, newest first.

pagination
Required
Pagination

Where this page sits in the result set.

400

1000 — malformed or contradictory input. 1002 — a required parameter is missing.

error
Required
Error

Stable integer code from the /v2 error table. Branch on this.

message
Required
Message

One human-readable sentence. Wording may change; the code will not.

401

1100 — missing, unknown or inactive API key. 1101 — a browser session token was presented instead of an API key.

error
Required
Error

Stable integer code from the /v2 error table. Branch on this.

message
Required
Message

One human-readable sentence. Wording may change; the code will not.

403

1102 — the key is valid but lacks the scope this endpoint requires, or names another organization. GET /v2/scopes reports what a key holds.

error
Required
Error

Stable integer code from the /v2 error table. Branch on this.

message
Required
Message

One human-readable sentence. Wording may change; the code will not.

404

1200 — no such resource in your organization. A resource belonging to another organization answers 404, never 403.

error
Required
Error

Stable integer code from the /v2 error table. Branch on this.

message
Required
Message

One human-readable sentence. Wording may change; the code will not.

422

1001 — the body or query failed validation; the message names the first offending field.

error
Required
integer

Stable integer code from the error table. Branch on this, not on the message.

message
Required
string

One human-readable sentence. Wording may change; the code will not.

429

1300 — the per-organization request rate or concurrent-call limit was reached. Carries Retry-After.

error
Required
Error

Stable integer code from the /v2 error table. Branch on this.

message
Required
Message

One human-readable sentence. Wording may change; the code will not.

503

1501 — a service this endpoint depends on is unreachable or returned a 5xx.

error
Required
Error

Stable integer code from the /v2 error table. Branch on this.

message
Required
Message

One human-readable sentence. Wording may change; the code will not.

504

1502 — a service this endpoint depends on did not answer in time.

error
Required
Error

Stable integer code from the /v2 error table. Branch on this.

message
Required
Message

One human-readable sentence. Wording may change; the code will not.

curl -X GET "https://api.graine.ai/v2/agents/6c6f4cc3-f56c-479d-8422-7f76694daa29/executions?status=completed%2Cfailed&direction=outbound&from_date=2026-08-01T00%3A00%3A00%2B05%3A30&to_date=2026-08-27T00%3A00%3A00%2B05%3A30&include_transcript=false&organization_id=string&page=1&page_size=20" \
  -H "Authorization: Bearer <token>"

A page of this agent's calls, newest first. The objects are the same ones GET /v2/calls returns.

{
  "data": [
    {
      "execution_id": "dbcffa37-92a1-4ae7-9814-71ca7b8ab3d3",
      "status": "completed",
      "is_terminal": true,
      "direction": "outbound",
      "agent_id": "6c6f4cc3-f56c-479d-8422-7f76694daa29",
      "batch_id": "7d1f0a52-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
      "campaign_id": "31ff3ea9-8bb5-433f-868f-286ac3c31328",
      "contact_id": "c41f7e02-9b8a-4d51-b0c7-6f2a1e3d4c55",
      "parent_execution_id": "9b2c1d84-77e3-4a10-8f5b-2c6d9e0a1b33",
      "retry_count": 0,
      "to_number": "+919812345678",
      "from_number": "+917971442184",
      "provider": "custom",
      "duration_seconds": 209,
      "answered_by_voicemail": false,
      "hangup_by": "Caller",
      "hangup_reason": "User disconnected the call",
      "recording_url": "https://storage.graine.ai/2026/08/26/0d76fa8c-ea49-4d78-9e5b-1a15ab7b3ac2.mp3",
      "cost": {
        "total": 0.134068,
        "currency": "USD",
        "breakdown": {
          "llm": 0.020814,
          "network": 0,
          "platform": 0.01,
          "synthesizer": 0.052034,
          "telephony": 0.02,
          "transcriber": 0.03122
        }
      },
      "summary": "Dealer was unaware of the campaign; the cashback process was explained.",
      "sentiment": "neutral",
      "extracted_data": {
        "call_outcome": "already_knew_no_doubts",
        "follow_up": false,
        "callback_time_requested": ""
      },
      "custom_analytics": [
        {
          "name": "Custom Analytics",
          "required_keys": [
            "call_outcome"
          ]
        }
      ],
      "variables": {
        "callee_name": "Raju",
        "agent_name": "Priya Plumber Activation Agent"
      },
      "error": {
        "message": "The recipient's carrier rejected the call."
      },
      "scheduled_at": "2026-08-27T09:30:00.000Z",
      "created_at": "2026-08-26T12:19:54.580Z",
      "updated_at": "2026-08-26T12:25:01.543Z",
      "completed_at": "2026-08-26T12:23:35.194Z",
      "transcript": [
        {
          "role": "assistant",
          "content": "Namaste, main Kavya bol rahi hoon."
        },
        {
          "role": "user",
          "content": "Haan boliye."
        }
      ]
    }
  ],
  "pagination": {
    "page": 1,
    "page_size": 20,
    "total": 137,
    "total_pages": 7,
    "has_more": true
  }
}