Sessions
Sessions endpoints of the Ellipsis REST API.
Optionally filtered by config, source, time window, attributed author, repository, and whether the session is still going.
curl "https://api.ellipsis.dev/sessions" \
-H "Authorization: Bearer $ELLIPSIS_API_KEY"{
"sessions": [
{
"agent_config_id": "string",
"attributed_user": {
"avatar_url": "string",
"id": 0,
"login": "string",
"type": "User"
},
"attribution_id": "string",
"attribution_type": "github_user",
"client_version": "string",
"config_override": {},
"context_repository": "string",
"cost_fee": 0,
"cost_sandbox_cpu": 0,
"cost_sandbox_memory": 0,
"cost_tokens": 0,
"created_at": "2026-01-01T00:00:00Z",
"customer_id": "string",
"default_resolution": "repo_default",
"exit_status": "completed",
"harness": "claude_code",
"id": "string",
"last_activity_at": "2026-01-01T00:00:00Z",
"last_message_at": "2026-01-01T00:00:00Z",
"live_summary": "string",
"metadata": {},
"output_prs": [
{
"gh_pr_id": 0,
"number": 0,
"repo_full_name": "string",
"title": "string",
"url": "string"
}
],
"parent_agent_session_id": "string",
"parent_kind": "continuation",
"prompt": "string",
"prompting": {
"blocked_reason": "mention_surface",
"detail": "string",
"enabled": false,
"surface_name": "string"
},
"replayed_from_session_id": "string",
"resolved_budget_cents": 0,
"resolved_budget_source": "system",
"sandbox_id": "string",
"session_key": "string",
"session_state": "idle",
"source": "react",
"status": "scheduled",
"status_reason": "string",
"stopped_at": "2026-01-01T00:00:00Z",
"stopped_by": 0,
"stopped_by_user": {
"avatar_url": "string",
"id": 0,
"login": "string",
"type": "User"
},
"surface": {
"run": "scheduled",
"session": "alive",
"status": "string"
},
"tokens_cache_creation": 0,
"tokens_cache_read": 0,
"tokens_input": 0,
"tokens_model": "string",
"tokens_output": 0,
"tokens_total": 0,
"updated_at": "2026-01-01T00:00:00Z",
"webhook_id": "string",
"webhook_type": "github.issue"
}
]
}{
"properties": {
"sessions": {
"items": {
"properties": {
"agent_config_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"attributed_user": {
"anyOf": [
{
"properties": {
"avatar_url": {
"type": "string"
},
"id": {
"type": "integer"
},
"login": {
"type": "string"
},
"type": {
"enum": [
"User",
"Organization",
"Bot",
"Mannequin"
],
"type": "string"
}
},
"required": [
"id",
"login",
"type",
"avatar_url"
],
"type": "object"
},
{
"type": "null"
}
]
},
"attribution_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"attribution_type": {
"anyOf": [
{
"enum": [
"github_user",
"linear_user",
"slack_user",
"api_key"
],
"type": "string"
},
{
"type": "null"
}
]
},
"client_version": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"config_override": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
]
},
"context_repository": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"cost_fee": {
"default": 0,
"type": "integer"
},
"cost_sandbox_cpu": {
"default": 0,
"type": "integer"
},
"cost_sandbox_memory": {
"default": 0,
"type": "integer"
},
"cost_tokens": {
"type": "integer"
},
"created_at": {
"format": "date-time",
"type": "string"
},
"customer_id": {
"type": "string"
},
"default_resolution": {
"anyOf": [
{
"enum": [
"repo_default",
"account_default",
"none"
],
"type": "string"
},
{
"type": "null"
}
]
},
"exit_status": {
"anyOf": [
{
"enum": [
"completed",
"budget_hit",
"payment_required",
"tool_call_failed",
"lifecycle_hook_failed",
"missing_repo_access",
"missing_token_permissions",
"missing_sandbox_variables",
"cancelled",
"interrupted",
"error",
"stopped"
],
"type": "string"
},
{
"type": "null"
}
]
},
"harness": {
"enum": [
"claude_code",
"codex"
],
"type": "string"
},
"id": {
"type": "string"
},
"last_activity_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"last_message_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"live_summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"additionalProperties": {
"type": "string"
},
"default": {},
"type": "object"
},
"output_prs": {
"anyOf": [
{
"items": {
"properties": {
"gh_pr_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"number": {
"type": "integer"
},
"repo_full_name": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"type": "string"
}
},
"required": [
"repo_full_name",
"number",
"url"
],
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
]
},
"parent_agent_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"parent_kind": {
"anyOf": [
{
"enum": [
"continuation",
"handoff",
"resume"
],
"type": "string"
},
{
"type": "null"
}
]
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"prompting": {
"properties": {
"blocked_reason": {
"anyOf": [
{
"enum": [
"mention_surface",
"ephemeral_trigger",
"non_interactive",
"harness_single_turn",
"closed",
"laptop"
],
"type": "string"
},
{
"type": "null"
}
]
},
"detail": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"enabled": {
"type": "boolean"
},
"surface_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"enabled"
],
"type": "object"
},
"replayed_from_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"resolved_budget_cents": {
"type": "integer"
},
"resolved_budget_source": {
"enum": [
"system",
"account",
"config",
"run"
],
"type": "string"
},
"sandbox_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"session_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"session_state": {
"anyOf": [
{
"enum": [
"idle",
"running",
"closed"
],
"type": "string"
},
{
"type": "null"
}
]
},
"source": {
"enum": [
"react",
"manual",
"api",
"cli",
"mention",
"cron",
"laptop"
],
"type": "string"
},
"status": {
"enum": [
"scheduled",
"creating_sandbox",
"running",
"retrying",
"completed",
"error",
"cancelled",
"stopped"
],
"type": "string"
},
"status_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"stopped_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"stopped_by": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"stopped_by_user": {
"anyOf": [
{
"properties": {
"avatar_url": {
"type": "string"
},
"id": {
"type": "integer"
},
"login": {
"type": "string"
},
"type": {
"enum": [
"User",
"Organization",
"Bot",
"Mannequin"
],
"type": "string"
}
},
"required": [
"id",
"login",
"type",
"avatar_url"
],
"type": "object"
},
{
"type": "null"
}
]
},
"surface": {
"anyOf": [
{
"properties": {
"run": {
"anyOf": [
{
"enum": [
"scheduled",
"starting",
"working",
"waiting",
"done",
"failed",
"stopped",
"cancelled",
"retrying"
],
"type": "string"
},
{
"type": "null"
}
]
},
"session": {
"anyOf": [
{
"enum": [
"alive",
"sleeping",
"closed"
],
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"session",
"run",
"status"
],
"type": "object"
},
{
"type": "null"
}
]
},
"tokens_cache_creation": {
"default": 0,
"type": "integer"
},
"tokens_cache_read": {
"default": 0,
"type": "integer"
},
"tokens_input": {
"default": 0,
"type": "integer"
},
"tokens_model": {
"type": "string"
},
"tokens_output": {
"default": 0,
"type": "integer"
},
"tokens_total": {
"default": 0,
"type": "integer"
},
"updated_at": {
"format": "date-time",
"type": "string"
},
"webhook_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"webhook_type": {
"anyOf": [
{
"enum": [
"github.issue",
"github.issue_comment",
"github.push",
"github.pull_request",
"github.pull_request_comment",
"github.pull_request_review",
"github.pull_request_review_comment",
"slack.app_mention",
"slack.message",
"slack.channel_created",
"linear.issue",
"linear.issue_comment",
"sentry.event_alert",
"sentry.metric_alert",
"user.message"
],
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"customer_id",
"created_at",
"updated_at",
"harness",
"source",
"cost_tokens",
"tokens_model",
"resolved_budget_cents",
"resolved_budget_source",
"status",
"prompting"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"sessions"
],
"type": "object"
}Request
50integerA GitHub account id (see GET /v1/integrations/github/members); scopes the list to sessions attributed to that developer.
"owner/name" (exact) or a bare repo name, matched the same way as on GET /v1/sessions/search. Sessions whose repository is named only inside their agent config — dashboard starts, cron, handoffs — do not match.
falsebooleanKeep only sessions whose conversation is still going — live or sleeping — dropping the ones that completed, errored, or were stopped or cancelled. A session parked between turns counts as unfinished.
Responses
Provide at most one of config_id, config, or template_id; with none, the account's default-config ladder resolves the config. 400 when idle_start is combined with prompt or handoff, or when a handoff is combined with any config source or override.
curl -X POST "https://api.ellipsis.dev/sessions" \
-H "Authorization: Bearer $ELLIPSIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt":"..."}'{
"agent_config_id": "string",
"attributed_user": {
"avatar_url": "string",
"id": 0,
"login": "string",
"type": "User"
},
"attribution_id": "string",
"attribution_type": "github_user",
"client_version": "string",
"config_override": {},
"context_repository": "string",
"cost_fee": 0,
"cost_sandbox_cpu": 0,
"cost_sandbox_memory": 0,
"cost_tokens": 0,
"created_at": "2026-01-01T00:00:00Z",
"customer_id": "string",
"default_resolution": "repo_default",
"exit_status": "completed",
"harness": "claude_code",
"id": "string",
"last_activity_at": "2026-01-01T00:00:00Z",
"last_message_at": "2026-01-01T00:00:00Z",
"live_summary": "string",
"metadata": {},
"output_prs": [
{
"gh_pr_id": 0,
"number": 0,
"repo_full_name": "string",
"title": "string",
"url": "string"
}
],
"parent_agent_session_id": "string",
"parent_kind": "continuation",
"prompt": "string",
"prompting": {
"blocked_reason": "mention_surface",
"detail": "string",
"enabled": false,
"surface_name": "string"
},
"replayed_from_session_id": "string",
"resolution_source": "repo_default",
"resolved_budget_cents": 0,
"resolved_budget_source": "system",
"resolved_config_name": "string",
"sandbox_id": "string",
"session_key": "string",
"session_state": "idle",
"source": "react",
"status": "scheduled",
"status_reason": "string",
"stopped_at": "2026-01-01T00:00:00Z",
"stopped_by": 0,
"stopped_by_user": {
"avatar_url": "string",
"id": 0,
"login": "string",
"type": "User"
},
"surface": {
"run": "scheduled",
"session": "alive",
"status": "string"
},
"tokens_cache_creation": 0,
"tokens_cache_read": 0,
"tokens_input": 0,
"tokens_model": "string",
"tokens_output": 0,
"tokens_total": 0,
"updated_at": "2026-01-01T00:00:00Z",
"webhook_id": "string",
"webhook_type": "github.issue"
}{
"properties": {
"config": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"budget": {
"additionalProperties": false,
"properties": {
"day": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"month": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"session": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"week": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
}
},
"type": "object"
},
"claude": {
"additionalProperties": false,
"properties": {
"effort": {
"anyOf": [
{
"enum": [
"low",
"medium",
"high",
"xhigh",
"max"
],
"type": "string"
},
{
"type": "null"
}
]
},
"fallback_model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"max_turns": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
},
"model": {
"default": "claude-opus-5",
"type": "string"
},
"settings": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"path": {
"type": "string"
},
"repository": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"name": {
"type": "string"
},
"owner": {
"type": "object"
},
"ref": {
"type": "object"
}
},
"required": [
"name"
],
"type": "object"
},
{
"type": "null"
}
]
}
},
"required": [
"path"
],
"type": "object"
},
{
"type": "null"
}
]
},
"system": {
"anyOf": [
{
"type": "string"
},
{
"additionalProperties": false,
"properties": {
"file": {
"type": "string"
}
},
"required": [
"file"
],
"type": "object"
},
{
"items": {
"anyOf": [
{
"type": "string"
},
{
"additionalProperties": false,
"properties": {
"file": {
"type": "string"
}
},
"required": [
"file"
],
"type": "object"
}
]
},
"type": "array"
}
],
"default": ""
}
},
"type": "object"
},
"codex": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"model": {
"default": "bedrock-gpt-5.6-terra",
"type": "string"
},
"system": {
"anyOf": [
{
"type": "string"
},
{
"additionalProperties": false,
"properties": {
"file": {
"type": "string"
}
},
"required": [
"file"
],
"type": "object"
},
{
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "object"
}
]
},
"type": "array"
}
],
"default": ""
}
},
"type": "object"
},
{
"type": "null"
}
]
},
"ellipsis": {
"additionalProperties": false,
"properties": {
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"enabled": {
"default": true,
"type": "boolean"
},
"ide": {
"default": true,
"type": "boolean"
},
"interactive": {
"default": true,
"type": "boolean"
},
"metadata": {
"additionalProperties": false,
"properties": {
"annotations": {
"additionalProperties": {
"type": "string"
},
"default": {},
"type": "object"
},
"labels": {
"default": [],
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"default": "v1",
"type": "string"
}
},
"type": "object"
},
"environment": {
"additionalProperties": false,
"properties": {
"compute": {
"additionalProperties": false,
"properties": {
"cpu": {
"anyOf": [
{
"maximum": 16,
"minimum": 0.125,
"type": "number"
},
{
"type": "null"
}
]
},
"memory": {
"anyOf": [
{
"type": "string"
},
{
"additionalProperties": false,
"properties": {
"gb": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"mb": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
}
},
"type": "object"
},
{
"type": "null"
}
]
},
"timeout": {
"anyOf": [
{
"type": "string"
},
{
"additionalProperties": false,
"properties": {
"hours": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"minutes": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"seconds": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
}
},
"type": "object"
},
{
"type": "null"
}
]
}
},
"type": "object"
},
"hooks": {
"additionalProperties": false,
"properties": {
"post_clone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"post_start": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"type": "object"
},
"image": {
"additionalProperties": false,
"properties": {
"dockerfile_append": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"setup": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"type": "object"
},
"ports": {
"default": [
3000,
5173,
8000,
8080
],
"items": {
"type": "integer"
},
"type": "array"
},
"repositories": {
"default": [],
"items": {
"additionalProperties": false,
"properties": {
"name": {
"type": "string"
},
"owner": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"ref": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"name"
],
"type": "object"
},
"type": "array"
},
"variables": {
"default": [],
"items": {
"additionalProperties": false,
"properties": {
"name": {
"type": "string"
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"name"
],
"type": "object"
},
"type": "array"
}
},
"type": "object"
},
"llm": {
"additionalProperties": false,
"properties": {
"proxy": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"type": "object"
},
"mcp_servers": {
"default": [],
"items": {
"anyOf": [
{
"type": "string"
},
{
"additionalProperties": false,
"properties": {
"name": {
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
}
]
},
"type": "array"
},
"permissions": {
"additionalProperties": false,
"properties": {
"ellipsis": {
"default": true,
"enum": [
true,
"all"
]
},
"github": {
"additionalProperties": false,
"properties": {
"permissions": {
"anyOf": [
{
"const": "read_only",
"type": "string"
},
{
"additionalProperties": {
"type": "string"
},
"type": "object"
},
{
"type": "null"
}
]
},
"repositories": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
]
}
},
"type": "object"
}
},
"type": "object"
},
"skills": {
"default": [],
"items": {
"additionalProperties": false,
"properties": {
"path": {
"type": "string"
},
"repository": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"name": {
"type": "string"
},
"owner": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"ref": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"name"
],
"type": "object"
},
{
"type": "null"
}
]
}
},
"required": [
"path"
],
"type": "object"
},
"type": "array"
},
"structured_output": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"json_schema": {
"additionalProperties": true,
"type": "object"
},
"type": {
"const": "json_schema",
"default": "json_schema",
"type": "string"
}
},
"required": [
"json_schema"
],
"type": "object"
},
{
"type": "null"
}
]
},
"trigger": {
"anyOf": [
{
"oneOf": [
{
"additionalProperties": false,
"properties": {
"schedule": {
"type": "string"
},
"type": {
"const": "cron",
"default": "cron",
"type": "string"
}
},
"required": [
"schedule"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"issue": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"for": {
"type": "object"
},
"labels": {
"type": "array"
},
"on": {
"type": "array"
},
"repositories": {
"type": "object"
}
},
"required": [
"on"
],
"type": "object"
},
{
"type": "null"
}
]
},
"linear_issue": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"for": {
"type": "object"
},
"on": {
"type": "array"
}
},
"type": "object"
},
{
"type": "null"
}
]
},
"pull_request": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"base": {
"type": "array"
},
"draft": {
"type": "object"
},
"for": {
"type": "object"
},
"head": {
"type": "array"
},
"labels": {
"type": "array"
},
"on": {
"type": "array"
},
"paths": {
"type": "array"
},
"repositories": {
"type": "object"
}
},
"required": [
"on"
],
"type": "object"
},
{
"type": "null"
}
]
},
"push": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"branch": {
"type": "array"
},
"for": {
"type": "object"
},
"paths": {
"type": "array"
},
"repositories": {
"type": "object"
}
},
"type": "object"
},
{
"type": "null"
}
]
},
"sentry": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"on": {
"type": "array"
},
"projects": {
"type": "array"
}
},
"required": [
"on"
],
"type": "object"
},
{
"type": "null"
}
]
},
"slack_channel": {
"anyOf": [
{
"additionalProperties": false,
"properties": {},
"type": "object"
},
{
"type": "null"
}
]
},
"type": {
"const": "react",
"default": "react",
"type": "string"
}
},
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"platforms": {
"default": [],
"items": {
"enum": [
"github",
"slack",
"linear"
],
"type": "string"
},
"type": "array"
},
"type": {
"const": "mention",
"default": "mention",
"type": "string"
}
},
"type": "object"
}
]
},
{
"type": "null"
}
]
}
},
"type": "object"
},
{
"type": "null"
}
]
},
"config_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"config_override": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
]
},
"config_override_yaml": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"force_rebuild": {
"default": false,
"type": "boolean"
},
"handoff": {
"anyOf": [
{
"properties": {
"parent_session_id": {
"type": "string"
},
"ref": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"repo": {
"type": "string"
},
"sha": {
"type": "string"
}
},
"required": [
"parent_session_id",
"repo",
"sha"
],
"type": "object"
},
{
"type": "null"
}
]
},
"idle_start": {
"default": false,
"type": "boolean"
},
"metadata": {
"additionalProperties": {
"type": "string"
},
"default": {},
"type": "object"
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"repository": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"template_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"type": "object"
}{
"properties": {
"agent_config_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"attributed_user": {
"anyOf": [
{
"properties": {
"avatar_url": {
"type": "string"
},
"id": {
"type": "integer"
},
"login": {
"type": "string"
},
"type": {
"enum": [
"User",
"Organization",
"Bot",
"Mannequin"
],
"type": "string"
}
},
"required": [
"id",
"login",
"type",
"avatar_url"
],
"type": "object"
},
{
"type": "null"
}
]
},
"attribution_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"attribution_type": {
"anyOf": [
{
"enum": [
"github_user",
"linear_user",
"slack_user",
"api_key"
],
"type": "string"
},
{
"type": "null"
}
]
},
"client_version": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"config_override": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
]
},
"context_repository": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"cost_fee": {
"default": 0,
"type": "integer"
},
"cost_sandbox_cpu": {
"default": 0,
"type": "integer"
},
"cost_sandbox_memory": {
"default": 0,
"type": "integer"
},
"cost_tokens": {
"type": "integer"
},
"created_at": {
"format": "date-time",
"type": "string"
},
"customer_id": {
"type": "string"
},
"default_resolution": {
"anyOf": [
{
"enum": [
"repo_default",
"account_default",
"none"
],
"type": "string"
},
{
"type": "null"
}
]
},
"exit_status": {
"anyOf": [
{
"enum": [
"completed",
"budget_hit",
"payment_required",
"tool_call_failed",
"lifecycle_hook_failed",
"missing_repo_access",
"missing_token_permissions",
"missing_sandbox_variables",
"cancelled",
"interrupted",
"error",
"stopped"
],
"type": "string"
},
{
"type": "null"
}
]
},
"harness": {
"enum": [
"claude_code",
"codex"
],
"type": "string"
},
"id": {
"type": "string"
},
"last_activity_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"last_message_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"live_summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"additionalProperties": {
"type": "string"
},
"default": {},
"type": "object"
},
"output_prs": {
"anyOf": [
{
"items": {
"properties": {
"gh_pr_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"number": {
"type": "integer"
},
"repo_full_name": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"type": "string"
}
},
"required": [
"repo_full_name",
"number",
"url"
],
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
]
},
"parent_agent_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"parent_kind": {
"anyOf": [
{
"enum": [
"continuation",
"handoff",
"resume"
],
"type": "string"
},
{
"type": "null"
}
]
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"prompting": {
"properties": {
"blocked_reason": {
"anyOf": [
{
"enum": [
"mention_surface",
"ephemeral_trigger",
"non_interactive",
"harness_single_turn",
"closed",
"laptop"
],
"type": "string"
},
{
"type": "null"
}
]
},
"detail": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"enabled": {
"type": "boolean"
},
"surface_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"enabled"
],
"type": "object"
},
"replayed_from_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"resolution_source": {
"anyOf": [
{
"enum": [
"repo_default",
"account_default",
"none"
],
"type": "string"
},
{
"type": "null"
}
]
},
"resolved_budget_cents": {
"type": "integer"
},
"resolved_budget_source": {
"enum": [
"system",
"account",
"config",
"run"
],
"type": "string"
},
"resolved_config_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"sandbox_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"session_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"session_state": {
"anyOf": [
{
"enum": [
"idle",
"running",
"closed"
],
"type": "string"
},
{
"type": "null"
}
]
},
"source": {
"enum": [
"react",
"manual",
"api",
"cli",
"mention",
"cron",
"laptop"
],
"type": "string"
},
"status": {
"enum": [
"scheduled",
"creating_sandbox",
"running",
"retrying",
"completed",
"error",
"cancelled",
"stopped"
],
"type": "string"
},
"status_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"stopped_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"stopped_by": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"stopped_by_user": {
"anyOf": [
{
"properties": {
"avatar_url": {
"type": "string"
},
"id": {
"type": "integer"
},
"login": {
"type": "string"
},
"type": {
"enum": [
"User",
"Organization",
"Bot",
"Mannequin"
],
"type": "string"
}
},
"required": [
"id",
"login",
"type",
"avatar_url"
],
"type": "object"
},
{
"type": "null"
}
]
},
"surface": {
"anyOf": [
{
"properties": {
"run": {
"anyOf": [
{
"enum": [
"scheduled",
"starting",
"working",
"waiting",
"done",
"failed",
"stopped",
"cancelled",
"retrying"
],
"type": "string"
},
{
"type": "null"
}
]
},
"session": {
"anyOf": [
{
"enum": [
"alive",
"sleeping",
"closed"
],
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"session",
"run",
"status"
],
"type": "object"
},
{
"type": "null"
}
]
},
"tokens_cache_creation": {
"default": 0,
"type": "integer"
},
"tokens_cache_read": {
"default": 0,
"type": "integer"
},
"tokens_input": {
"default": 0,
"type": "integer"
},
"tokens_model": {
"type": "string"
},
"tokens_output": {
"default": 0,
"type": "integer"
},
"tokens_total": {
"default": 0,
"type": "integer"
},
"updated_at": {
"format": "date-time",
"type": "string"
},
"webhook_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"webhook_type": {
"anyOf": [
{
"enum": [
"github.issue",
"github.issue_comment",
"github.push",
"github.pull_request",
"github.pull_request_comment",
"github.pull_request_review",
"github.pull_request_review_comment",
"slack.app_mention",
"slack.message",
"slack.channel_created",
"linear.issue",
"linear.issue_comment",
"sentry.event_alert",
"sentry.metric_alert",
"user.message"
],
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"customer_id",
"created_at",
"updated_at",
"harness",
"source",
"cost_tokens",
"tokens_model",
"resolved_budget_cents",
"resolved_budget_source",
"status",
"prompting"
],
"type": "object"
}Request
An inline agent config to run under.
A saved agent config id to run under.
Optional partial-config override merged onto the chosen config and re-validated (e.g. {"limits": {"run": 5.0}} to raise just this run's budget). Merged onto config_id/template_id or the platform default; with an inline config, set fields directly instead. Mutually exclusive with config_override_yaml.
The same partial-config override as a YAML/JSON string (e.g. read from a file). Mutually exclusive with config_override.
falsebooleanSkip the image cache for this session's initial provision: a fresh full build whose snapshot then refreshes the cache for later runs. A wake of a durable session provisions through the cache as usual. The CLI's `--rebuild`.
Laptop-to-cloud handoff parameters. When set, the built-in handoff config is used and config_id/config/template_id must be omitted.
falsebooleanStart the session with no initial message: the sandbox spins up, the agent starts idle at the prompt, and the first message sent to the session opens turn 0. Mutually exclusive with prompt and handoff. Ignored when the resolved config is not interactive (an ephemeral run keeps its kickoff — it can never receive a message).
{}objectArbitrary string key/value metadata stored on the session.
Per-run instructions appended to the initial query after the config's shared system prompt. Applies regardless of which config source is used. For a handoff, this is the developer's handoff note.
The "owner/name" repository the client is standing in (the CLI's detected git remote). Selects the repo rung of the defaults ladder, and is merged into the sandbox repository set (cloned at its default branch) regardless of which config source is used. An unknown or foreign repo is ignored.
A maintained run-on-demand template slug (e.g. "ellipsis-helper"), resolved server-side to its config. At most one of config_id, config, or template_id may be set; if none is, the run resolves the account's default-config ladder (repo default, then account default, then the platform default config).
Responses
Grouped by session, over everything a session left behind: step text, recap text, created PRs, and recap-embedding similarity. This is how an agent answers "did Tony look into X?": resolve the author via /github/members, search, then read the winning session via /sessions/{id} (recap) and /sessions/{id}/records (transcript).
curl "https://api.ellipsis.dev/sessions/search?q=..." \
-H "Authorization: Bearer $ELLIPSIS_API_KEY"{
"attributed_users": {},
"results": [
{
"matched": [
"string"
],
"recap_snippet": "string",
"record_hit_count": 0,
"record_hits": [],
"session": {
"agent_config_id": "string",
"attributed_user": {
"avatar_url": "string",
"id": 0,
"login": "string",
"type": "User"
},
"attribution_id": "string",
"attribution_type": "github_user",
"client_version": "string",
"config_override": {},
"context_repository": "string",
"cost_fee": 0,
"cost_sandbox_cpu": 0,
"cost_sandbox_memory": 0,
"cost_tokens": 0,
"created_at": "2026-01-01T00:00:00Z",
"customer_id": "string",
"default_resolution": "repo_default",
"exit_status": "completed",
"harness": "claude_code",
"id": "string",
"last_activity_at": "2026-01-01T00:00:00Z",
"last_message_at": "2026-01-01T00:00:00Z",
"live_summary": "string",
"metadata": {},
"output_prs": [
{
"gh_pr_id": 0,
"number": 0,
"repo_full_name": "string",
"title": "string",
"url": "string"
}
],
"parent_agent_session_id": "string",
"parent_kind": "continuation",
"prompt": "string",
"prompting": {
"blocked_reason": "mention_surface",
"detail": "string",
"enabled": false,
"surface_name": "string"
},
"replayed_from_session_id": "string",
"resolved_budget_cents": 0,
"resolved_budget_source": "system",
"sandbox_id": "string",
"session_key": "string",
"session_state": "idle",
"source": "react",
"status": "scheduled",
"status_reason": "string",
"stopped_at": "2026-01-01T00:00:00Z",
"stopped_by": 0,
"stopped_by_user": {
"avatar_url": "string",
"id": 0,
"login": "string",
"type": "User"
},
"surface": {
"run": "scheduled",
"session": "alive",
"status": "string"
},
"tokens_cache_creation": 0,
"tokens_cache_read": 0,
"tokens_input": 0,
"tokens_model": "string",
"tokens_output": 0,
"tokens_total": 0,
"updated_at": "2026-01-01T00:00:00Z",
"webhook_id": "string",
"webhook_type": "github.issue"
}
}
]
}{
"properties": {
"attributed_users": {
"additionalProperties": {
"$ref": "#/components/schemas/GithubAccountSnippet"
},
"type": "object"
},
"results": {
"items": {
"properties": {
"matched": {
"items": {
"type": "string"
},
"type": "array"
},
"recap_snippet": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"record_hit_count": {
"default": 0,
"type": "integer"
},
"record_hits": {
"default": [],
"items": {
"properties": {
"agent_config_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"agent_session_id": {
"type": "string"
},
"attribution_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"attribution_type": {
"anyOf": [
{
"enum": [
"github_user",
"linear_user",
"slack_user",
"api_key"
],
"type": "string"
},
{
"type": "null"
}
]
},
"created_at": {
"format": "date-time",
"type": "string"
},
"id": {
"type": "string"
},
"output_prs": {
"anyOf": [
{
"items": {
"properties": {
"gh_pr_id": {
"type": "object"
},
"number": {
"type": "integer"
},
"repo_full_name": {
"type": "string"
},
"title": {
"type": "object"
},
"url": {
"type": "string"
}
},
"required": [
"repo_full_name",
"number",
"url"
],
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
]
},
"record_type": {
"type": "string"
},
"session_execution_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"session_source": {
"anyOf": [
{
"enum": [
"react",
"manual",
"api",
"cli",
"mention",
"cron",
"laptop"
],
"type": "string"
},
{
"type": "null"
}
]
},
"session_status": {
"anyOf": [
{
"enum": [
"scheduled",
"creating_sandbox",
"running",
"retrying",
"completed",
"error",
"cancelled",
"stopped"
],
"type": "string"
},
{
"type": "null"
}
]
},
"snippet": {
"type": "string"
},
"stream_seq": {
"type": "integer"
}
},
"required": [
"id",
"session_execution_id",
"agent_session_id",
"stream_seq",
"record_type",
"created_at",
"snippet"
],
"type": "object"
},
"type": "array"
},
"session": {
"properties": {
"agent_config_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"attributed_user": {
"anyOf": [
{
"properties": {
"avatar_url": {
"type": "string"
},
"id": {
"type": "integer"
},
"login": {
"type": "string"
},
"type": {
"enum": [
"User",
"Organization",
"Bot",
"Mannequin"
],
"type": "string"
}
},
"required": [
"id",
"login",
"type",
"avatar_url"
],
"type": "object"
},
{
"type": "null"
}
]
},
"attribution_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"attribution_type": {
"anyOf": [
{
"enum": [
"github_user",
"linear_user",
"slack_user",
"api_key"
],
"type": "string"
},
{
"type": "null"
}
]
},
"client_version": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"config_override": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
]
},
"context_repository": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"cost_fee": {
"default": 0,
"type": "integer"
},
"cost_sandbox_cpu": {
"default": 0,
"type": "integer"
},
"cost_sandbox_memory": {
"default": 0,
"type": "integer"
},
"cost_tokens": {
"type": "integer"
},
"created_at": {
"format": "date-time",
"type": "string"
},
"customer_id": {
"type": "string"
},
"default_resolution": {
"anyOf": [
{
"enum": [
"repo_default",
"account_default",
"none"
],
"type": "string"
},
{
"type": "null"
}
]
},
"exit_status": {
"anyOf": [
{
"enum": [
"completed",
"budget_hit",
"payment_required",
"tool_call_failed",
"lifecycle_hook_failed",
"missing_repo_access",
"missing_token_permissions",
"missing_sandbox_variables",
"cancelled",
"interrupted",
"error",
"stopped"
],
"type": "string"
},
{
"type": "null"
}
]
},
"harness": {
"enum": [
"claude_code",
"codex"
],
"type": "string"
},
"id": {
"type": "string"
},
"last_activity_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"last_message_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"live_summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"additionalProperties": {
"type": "string"
},
"default": {},
"type": "object"
},
"output_prs": {
"anyOf": [
{
"items": {
"properties": {
"gh_pr_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"number": {
"type": "integer"
},
"repo_full_name": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"type": "string"
}
},
"required": [
"repo_full_name",
"number",
"url"
],
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
]
},
"parent_agent_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"parent_kind": {
"anyOf": [
{
"enum": [
"continuation",
"handoff",
"resume"
],
"type": "string"
},
{
"type": "null"
}
]
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"prompting": {
"properties": {
"blocked_reason": {
"anyOf": [
{
"enum": [
"mention_surface",
"ephemeral_trigger",
"non_interactive",
"harness_single_turn",
"closed",
"laptop"
],
"type": "string"
},
{
"type": "null"
}
]
},
"detail": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"enabled": {
"type": "boolean"
},
"surface_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"enabled"
],
"type": "object"
},
"replayed_from_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"resolved_budget_cents": {
"type": "integer"
},
"resolved_budget_source": {
"enum": [
"system",
"account",
"config",
"run"
],
"type": "string"
},
"sandbox_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"session_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"session_state": {
"anyOf": [
{
"enum": [
"idle",
"running",
"closed"
],
"type": "string"
},
{
"type": "null"
}
]
},
"source": {
"enum": [
"react",
"manual",
"api",
"cli",
"mention",
"cron",
"laptop"
],
"type": "string"
},
"status": {
"enum": [
"scheduled",
"creating_sandbox",
"running",
"retrying",
"completed",
"error",
"cancelled",
"stopped"
],
"type": "string"
},
"status_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"stopped_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"stopped_by": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"stopped_by_user": {
"anyOf": [
{
"properties": {
"avatar_url": {
"type": "string"
},
"id": {
"type": "integer"
},
"login": {
"type": "string"
},
"type": {
"enum": [
"User",
"Organization",
"Bot",
"Mannequin"
],
"type": "string"
}
},
"required": [
"id",
"login",
"type",
"avatar_url"
],
"type": "object"
},
{
"type": "null"
}
]
},
"surface": {
"anyOf": [
{
"properties": {
"run": {
"anyOf": [
{
"enum": [
"scheduled",
"starting",
"working",
"waiting",
"done",
"failed",
"stopped",
"cancelled",
"retrying"
],
"type": "string"
},
{
"type": "null"
}
]
},
"session": {
"anyOf": [
{
"enum": [
"alive",
"sleeping",
"closed"
],
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"session",
"run",
"status"
],
"type": "object"
},
{
"type": "null"
}
]
},
"tokens_cache_creation": {
"default": 0,
"type": "integer"
},
"tokens_cache_read": {
"default": 0,
"type": "integer"
},
"tokens_input": {
"default": 0,
"type": "integer"
},
"tokens_model": {
"type": "string"
},
"tokens_output": {
"default": 0,
"type": "integer"
},
"tokens_total": {
"default": 0,
"type": "integer"
},
"updated_at": {
"format": "date-time",
"type": "string"
},
"webhook_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"webhook_type": {
"anyOf": [
{
"enum": [
"github.issue",
"github.issue_comment",
"github.push",
"github.pull_request",
"github.pull_request_comment",
"github.pull_request_review",
"github.pull_request_review_comment",
"slack.app_mention",
"slack.message",
"slack.channel_created",
"linear.issue",
"linear.issue_comment",
"sentry.event_alert",
"sentry.metric_alert",
"user.message"
],
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"customer_id",
"created_at",
"updated_at",
"harness",
"source",
"cost_tokens",
"tokens_model",
"resolved_budget_cents",
"resolved_budget_source",
"status",
"prompting"
],
"type": "object"
}
},
"required": [
"session",
"matched"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"results",
"attributed_users"
],
"type": "object"
}Request
What text a search query is matched against: the session log's record text, the session recaps (summaries), or both.
recordsrecapsbothAttributed GitHub user account ids.
Saved agent config ids (ORed with author_id).
"owner/name" (exact) or a bare repo name.
20integerResponses
Requires a user token (device-flow `agent login`): the user is part of the sync's idempotency key, so API keys and sandbox tokens are rejected with a 403 rather than silently attributed.
curl -X POST "https://api.ellipsis.dev/sessions/sync" \
-H "Authorization: Bearer $ELLIPSIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"cc_session_id": "...",
"transcript_gzip_b64": "..."
}'{
"accepted": false,
"event_count": 0,
"process_id": "string",
"session_id": "string"
}{
"properties": {
"cc_session_id": {
"type": "string"
},
"cwd": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"git_branch": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"reason": {
"default": "stop",
"enum": [
"stop",
"session_end"
],
"type": "string"
},
"repo": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"transcript_gzip_b64": {
"type": "string"
}
},
"required": [
"cc_session_id",
"transcript_gzip_b64"
],
"type": "object"
}{
"properties": {
"accepted": {
"type": "boolean"
},
"event_count": {
"type": "integer"
},
"process_id": {
"type": "string"
},
"session_id": {
"type": "string"
}
},
"required": [
"session_id",
"process_id",
"event_count",
"accepted"
],
"type": "object"
}Request
The Claude Code session uuid (from the hook payload's session_id).
The laptop working directory.
The checked-out git branch.
"stop"enumWhich hook fired the sync: "stop" (mid-session, once per turn) or "session_end" (the Claude Code process terminated).
stopsession_endThe enrolled repository ("owner/name", from the working directory's git remote).
The redacted transcript JSONL, gzipped then base64-encoded.
Responses
The public wire shape — the same shape the stream's session frames carry, with attributed_user and stopped_by_user resolved at read time. The heavy near-static blobs (config snapshot, input/output) live on the detail endpoints, not here.
curl "https://api.ellipsis.dev/sessions/{session_id}" \
-H "Authorization: Bearer $ELLIPSIS_API_KEY"{
"agent_config_id": "string",
"attributed_user": {
"avatar_url": "string",
"id": 0,
"login": "string",
"type": "User"
},
"attribution_id": "string",
"attribution_type": "github_user",
"client_version": "string",
"config_override": {},
"context_repository": "string",
"cost_fee": 0,
"cost_sandbox_cpu": 0,
"cost_sandbox_memory": 0,
"cost_tokens": 0,
"created_at": "2026-01-01T00:00:00Z",
"customer_id": "string",
"default_resolution": "repo_default",
"exit_status": "completed",
"harness": "claude_code",
"id": "string",
"last_activity_at": "2026-01-01T00:00:00Z",
"last_message_at": "2026-01-01T00:00:00Z",
"live_summary": "string",
"metadata": {},
"output_prs": [
{
"gh_pr_id": 0,
"number": 0,
"repo_full_name": "string",
"title": "string",
"url": "string"
}
],
"parent_agent_session_id": "string",
"parent_kind": "continuation",
"prompt": "string",
"prompting": {
"blocked_reason": "mention_surface",
"detail": "string",
"enabled": false,
"surface_name": "string"
},
"replayed_from_session_id": "string",
"resolved_budget_cents": 0,
"resolved_budget_source": "system",
"sandbox_id": "string",
"session_key": "string",
"session_state": "idle",
"source": "react",
"status": "scheduled",
"status_reason": "string",
"stopped_at": "2026-01-01T00:00:00Z",
"stopped_by": 0,
"stopped_by_user": {
"avatar_url": "string",
"id": 0,
"login": "string",
"type": "User"
},
"surface": {
"run": "scheduled",
"session": "alive",
"status": "string"
},
"tokens_cache_creation": 0,
"tokens_cache_read": 0,
"tokens_input": 0,
"tokens_model": "string",
"tokens_output": 0,
"tokens_total": 0,
"updated_at": "2026-01-01T00:00:00Z",
"webhook_id": "string",
"webhook_type": "github.issue"
}{
"properties": {
"agent_config_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"attributed_user": {
"anyOf": [
{
"properties": {
"avatar_url": {
"type": "string"
},
"id": {
"type": "integer"
},
"login": {
"type": "string"
},
"type": {
"enum": [
"User",
"Organization",
"Bot",
"Mannequin"
],
"type": "string"
}
},
"required": [
"id",
"login",
"type",
"avatar_url"
],
"type": "object"
},
{
"type": "null"
}
]
},
"attribution_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"attribution_type": {
"anyOf": [
{
"enum": [
"github_user",
"linear_user",
"slack_user",
"api_key"
],
"type": "string"
},
{
"type": "null"
}
]
},
"client_version": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"config_override": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
]
},
"context_repository": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"cost_fee": {
"default": 0,
"type": "integer"
},
"cost_sandbox_cpu": {
"default": 0,
"type": "integer"
},
"cost_sandbox_memory": {
"default": 0,
"type": "integer"
},
"cost_tokens": {
"type": "integer"
},
"created_at": {
"format": "date-time",
"type": "string"
},
"customer_id": {
"type": "string"
},
"default_resolution": {
"anyOf": [
{
"enum": [
"repo_default",
"account_default",
"none"
],
"type": "string"
},
{
"type": "null"
}
]
},
"exit_status": {
"anyOf": [
{
"enum": [
"completed",
"budget_hit",
"payment_required",
"tool_call_failed",
"lifecycle_hook_failed",
"missing_repo_access",
"missing_token_permissions",
"missing_sandbox_variables",
"cancelled",
"interrupted",
"error",
"stopped"
],
"type": "string"
},
{
"type": "null"
}
]
},
"harness": {
"enum": [
"claude_code",
"codex"
],
"type": "string"
},
"id": {
"type": "string"
},
"last_activity_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"last_message_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"live_summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"additionalProperties": {
"type": "string"
},
"default": {},
"type": "object"
},
"output_prs": {
"anyOf": [
{
"items": {
"properties": {
"gh_pr_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"number": {
"type": "integer"
},
"repo_full_name": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"type": "string"
}
},
"required": [
"repo_full_name",
"number",
"url"
],
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
]
},
"parent_agent_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"parent_kind": {
"anyOf": [
{
"enum": [
"continuation",
"handoff",
"resume"
],
"type": "string"
},
{
"type": "null"
}
]
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"prompting": {
"properties": {
"blocked_reason": {
"anyOf": [
{
"enum": [
"mention_surface",
"ephemeral_trigger",
"non_interactive",
"harness_single_turn",
"closed",
"laptop"
],
"type": "string"
},
{
"type": "null"
}
]
},
"detail": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"enabled": {
"type": "boolean"
},
"surface_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"enabled"
],
"type": "object"
},
"replayed_from_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"resolved_budget_cents": {
"type": "integer"
},
"resolved_budget_source": {
"enum": [
"system",
"account",
"config",
"run"
],
"type": "string"
},
"sandbox_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"session_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"session_state": {
"anyOf": [
{
"enum": [
"idle",
"running",
"closed"
],
"type": "string"
},
{
"type": "null"
}
]
},
"source": {
"enum": [
"react",
"manual",
"api",
"cli",
"mention",
"cron",
"laptop"
],
"type": "string"
},
"status": {
"enum": [
"scheduled",
"creating_sandbox",
"running",
"retrying",
"completed",
"error",
"cancelled",
"stopped"
],
"type": "string"
},
"status_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"stopped_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"stopped_by": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"stopped_by_user": {
"anyOf": [
{
"properties": {
"avatar_url": {
"type": "string"
},
"id": {
"type": "integer"
},
"login": {
"type": "string"
},
"type": {
"enum": [
"User",
"Organization",
"Bot",
"Mannequin"
],
"type": "string"
}
},
"required": [
"id",
"login",
"type",
"avatar_url"
],
"type": "object"
},
{
"type": "null"
}
]
},
"surface": {
"anyOf": [
{
"properties": {
"run": {
"anyOf": [
{
"enum": [
"scheduled",
"starting",
"working",
"waiting",
"done",
"failed",
"stopped",
"cancelled",
"retrying"
],
"type": "string"
},
{
"type": "null"
}
]
},
"session": {
"anyOf": [
{
"enum": [
"alive",
"sleeping",
"closed"
],
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"session",
"run",
"status"
],
"type": "object"
},
{
"type": "null"
}
]
},
"tokens_cache_creation": {
"default": 0,
"type": "integer"
},
"tokens_cache_read": {
"default": 0,
"type": "integer"
},
"tokens_input": {
"default": 0,
"type": "integer"
},
"tokens_model": {
"type": "string"
},
"tokens_output": {
"default": 0,
"type": "integer"
},
"tokens_total": {
"default": 0,
"type": "integer"
},
"updated_at": {
"format": "date-time",
"type": "string"
},
"webhook_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"webhook_type": {
"anyOf": [
{
"enum": [
"github.issue",
"github.issue_comment",
"github.push",
"github.pull_request",
"github.pull_request_comment",
"github.pull_request_review",
"github.pull_request_review_comment",
"slack.app_mention",
"slack.message",
"slack.channel_created",
"linear.issue",
"linear.issue_comment",
"sentry.event_alert",
"sentry.metric_alert",
"user.message"
],
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"customer_id",
"created_at",
"updated_at",
"harness",
"source",
"cost_tokens",
"tokens_model",
"resolved_budget_cents",
"resolved_budget_source",
"status",
"prompting"
],
"type": "object"
}Request
Responses
Most notably system_prompt_append, the text Ellipsis appends to Claude Code's default system prompt (platform section + response instructions + the config's own instructions). Per execution because each cold wake persists its own launch config (a config edit or replay override between wakes changes it).
curl "https://api.ellipsis.dev/sessions/{session_id}/executions" \
-H "Authorization: Bearer $ELLIPSIS_API_KEY"{
"executions": [
{
"agent_session_id": "string",
"attempt_index": 0,
"created_at": "2026-01-01T00:00:00Z",
"execution_index": 0,
"exit_status": "string",
"id": "string",
"model": "string",
"query": "string",
"resumed": false,
"status": "running",
"system_prompt_append": "string",
"wake_index": 0
}
]
}{
"properties": {
"executions": {
"items": {
"properties": {
"agent_session_id": {
"type": "string"
},
"attempt_index": {
"type": "integer"
},
"created_at": {
"format": "date-time",
"type": "string"
},
"execution_index": {
"type": "integer"
},
"exit_status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"query": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"resumed": {
"type": "boolean"
},
"status": {
"enum": [
"running",
"failed",
"done"
],
"type": "string"
},
"system_prompt_append": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"wake_index": {
"type": "integer"
}
},
"required": [
"id",
"agent_session_id",
"created_at",
"execution_index",
"wake_index",
"attempt_index",
"resumed",
"status"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"executions"
],
"type": "object"
}Request
Responses
The membership-gated dashboard page, which performs the sandbox proxy handoff itself. No credential is minted here — the URL grants nothing by possession. 409 when the sandbox isn't running (send the session a message to wake it first). Backs the `agent session ide` CLI verb.
curl "https://api.ellipsis.dev/sessions/{session_id}/ide" \
-H "Authorization: Bearer $ELLIPSIS_API_KEY"{
"url": "string"
}{
"properties": {
"url": {
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
}Request
Responses
The complete, ordered history of the session (agent output, tool calls, thinking, lifecycle events, sandbox output, message events) as an ordered manifest of presigned segment URLs. Segments are gzip members: download in order and concatenate for one file. The JSON API never carries the bytes (same two-step as files). /records is the paged live view of the same data.
curl "https://api.ellipsis.dev/sessions/{session_id}/log" \
-H "Authorization: Bearer $ELLIPSIS_API_KEY"{
"archived_through_feed_seq": 0,
"caught_up": false,
"earliest_feed_seq": 0,
"format": "ellipsis_session_log@1",
"latest_feed_seq": 0,
"segments": [
{
"bytes": 0,
"download_url": "string",
"end_feed_seq": 0,
"expires_in": 0,
"record_count": 0,
"start_feed_seq": 0
}
],
"session_id": "string"
}{
"properties": {
"archived_through_feed_seq": {
"type": "integer"
},
"caught_up": {
"type": "boolean"
},
"earliest_feed_seq": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"format": {
"default": "ellipsis_session_log@1",
"type": "string"
},
"latest_feed_seq": {
"type": "integer"
},
"segments": {
"items": {
"properties": {
"bytes": {
"type": "integer"
},
"download_url": {
"type": "string"
},
"end_feed_seq": {
"type": "integer"
},
"expires_in": {
"type": "integer"
},
"record_count": {
"type": "integer"
},
"start_feed_seq": {
"type": "integer"
}
},
"required": [
"start_feed_seq",
"end_feed_seq",
"record_count",
"bytes",
"download_url",
"expires_in"
],
"type": "object"
},
"type": "array"
},
"session_id": {
"type": "string"
}
},
"required": [
"session_id",
"earliest_feed_seq",
"archived_through_feed_seq",
"latest_feed_seq",
"caught_up",
"segments"
],
"type": "object"
}Request
Responses
409 for react/cron, non-interactive, and closed sessions. Returns the created message so the caller can track it by id; a retried send with the same idempotency_key returns the original message.
curl -X POST "https://api.ellipsis.dev/sessions/{session_id}/messages" \
-H "Authorization: Bearer $ELLIPSIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"message":"..."}'{
"agent_session_id": "string",
"author": "string",
"body": "string",
"created_at": "2026-01-01T00:00:00Z",
"delivered_at": "2026-01-01T00:00:00Z",
"delivered_turn_id": "string",
"feed_seq": 0,
"id": "string",
"sender_attribution_id": "string",
"sender_attribution_type": "github_user",
"status": "pending"
}{
"properties": {
"idempotency_key": {
"anyOf": [
{
"maxLength": 128,
"type": "string"
},
{
"type": "null"
}
]
},
"message": {
"type": "string"
}
},
"required": [
"message"
],
"type": "object"
}{
"properties": {
"agent_session_id": {
"type": "string"
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"body": {
"type": "string"
},
"created_at": {
"format": "date-time",
"type": "string"
},
"delivered_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"delivered_turn_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"feed_seq": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"id": {
"type": "string"
},
"sender_attribution_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"sender_attribution_type": {
"anyOf": [
{
"enum": [
"github_user",
"linear_user",
"slack_user",
"api_key"
],
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"enum": [
"pending",
"delivered"
],
"type": "string"
}
},
"required": [
"id",
"agent_session_id",
"status",
"body",
"created_at"
],
"type": "object"
}Request
Optional retry-safety key, unique per (session, key): a retry with the same key returns the original message — no duplicate message, no double turn, no double spend. The SDK auto-generates one per send.
The message text.
Responses
For a dev server running in the session's live sandbox: the same dashboard page as the IDE, deep-linked to the port. Backs `agent session port`.
curl "https://api.ellipsis.dev/sessions/{session_id}/ports/{port}" \
-H "Authorization: Bearer $ELLIPSIS_API_KEY"{
"port": 0,
"url": "string"
}{
"properties": {
"port": {
"type": "integer"
},
"url": {
"type": "string"
}
},
"required": [
"url",
"port"
],
"type": "object"
}Request
Responses
Pagination is opt-in (after_seq/limit — the same feed_seq cursor as the stream); a bare call returns the full retained transcript. Available to sandbox tokens too: an agent answering "did X look into Y?" needs to read the session it found via /sessions/search, and any org member sees the same transcript in the dashboard (laptop transcripts are redacted client-side before they are ever uploaded).
curl "https://api.ellipsis.dev/sessions/{session_id}/records" \
-H "Authorization: Bearer $ELLIPSIS_API_KEY"{
"earliest_feed_seq": 0,
"has_more": false,
"messages": [],
"records": [
{
"agent_session_id": "string",
"agent_turn_id": "string",
"cost": 0,
"created_at": "2026-01-01T00:00:00Z",
"duration": 0,
"feed_seq": 0,
"id": "string",
"model": "string",
"payload": {},
"record_format": "string",
"record_type": "string",
"session_message_id": "string",
"source": "lifecycle",
"stream_seq": 0,
"tokens_info": {
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0,
"cost_usd": 0,
"input_tokens": 0,
"num_turns": 0,
"output_tokens": 0
},
"tools": [
"string"
]
}
]
}{
"properties": {
"earliest_feed_seq": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"has_more": {
"default": false,
"type": "boolean"
},
"messages": {
"default": [],
"items": {
"properties": {
"agent_session_id": {
"type": "string"
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"body": {
"type": "string"
},
"created_at": {
"format": "date-time",
"type": "string"
},
"delivered_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"delivered_turn_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"feed_seq": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"id": {
"type": "string"
},
"sender_attribution_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"sender_attribution_type": {
"anyOf": [
{
"enum": [
"github_user",
"linear_user",
"slack_user",
"api_key"
],
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"enum": [
"pending",
"delivered"
],
"type": "string"
}
},
"required": [
"id",
"agent_session_id",
"status",
"body",
"created_at"
],
"type": "object"
},
"type": "array"
},
"records": {
"items": {
"properties": {
"agent_session_id": {
"type": "string"
},
"agent_turn_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"cost": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"created_at": {
"format": "date-time",
"type": "string"
},
"duration": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"feed_seq": {
"type": "integer"
},
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"payload": {
"additionalProperties": true,
"type": "object"
},
"record_format": {
"type": "string"
},
"record_type": {
"type": "string"
},
"session_message_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"source": {
"enum": [
"lifecycle",
"claude_code",
"codex"
],
"type": "string"
},
"stream_seq": {
"type": "integer"
},
"tokens_info": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"cache_creation_input_tokens": {
"default": 0,
"type": "integer"
},
"cache_read_input_tokens": {
"default": 0,
"type": "integer"
},
"cost_usd": {
"default": 0,
"type": "number"
},
"input_tokens": {
"default": 0,
"type": "integer"
},
"num_turns": {
"default": 0,
"type": "integer"
},
"output_tokens": {
"default": 0,
"type": "integer"
}
},
"type": "object"
},
{
"type": "null"
}
]
},
"tools": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"agent_session_id",
"feed_seq",
"stream_seq",
"source",
"record_type",
"record_format",
"payload",
"created_at"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"records"
],
"type": "object"
}Request
0integerResponses
Reuses the original config snapshot unless config_id is given, and accepts the same config_override as session start — e.g. {"claude": {"model": ...}} to replay the same input on a different model.
curl -X POST "https://api.ellipsis.dev/sessions/{session_id}/replay" \
-H "Authorization: Bearer $ELLIPSIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt":"..."}'{
"agent_config_id": "string",
"attributed_user": {
"avatar_url": "string",
"id": 0,
"login": "string",
"type": "User"
},
"attribution_id": "string",
"attribution_type": "github_user",
"client_version": "string",
"config_override": {},
"context_repository": "string",
"cost_fee": 0,
"cost_sandbox_cpu": 0,
"cost_sandbox_memory": 0,
"cost_tokens": 0,
"created_at": "2026-01-01T00:00:00Z",
"customer_id": "string",
"default_resolution": "repo_default",
"exit_status": "completed",
"harness": "claude_code",
"id": "string",
"last_activity_at": "2026-01-01T00:00:00Z",
"last_message_at": "2026-01-01T00:00:00Z",
"live_summary": "string",
"metadata": {},
"output_prs": [
{
"gh_pr_id": 0,
"number": 0,
"repo_full_name": "string",
"title": "string",
"url": "string"
}
],
"parent_agent_session_id": "string",
"parent_kind": "continuation",
"prompt": "string",
"prompting": {
"blocked_reason": "mention_surface",
"detail": "string",
"enabled": false,
"surface_name": "string"
},
"replayed_from_session_id": "string",
"resolved_budget_cents": 0,
"resolved_budget_source": "system",
"sandbox_id": "string",
"session_key": "string",
"session_state": "idle",
"source": "react",
"status": "scheduled",
"status_reason": "string",
"stopped_at": "2026-01-01T00:00:00Z",
"stopped_by": 0,
"stopped_by_user": {
"avatar_url": "string",
"id": 0,
"login": "string",
"type": "User"
},
"surface": {
"run": "scheduled",
"session": "alive",
"status": "string"
},
"tokens_cache_creation": 0,
"tokens_cache_read": 0,
"tokens_input": 0,
"tokens_model": "string",
"tokens_output": 0,
"tokens_total": 0,
"updated_at": "2026-01-01T00:00:00Z",
"webhook_id": "string",
"webhook_type": "github.issue"
}{
"properties": {
"config_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"config_override": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
]
},
"config_override_yaml": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"type": "object"
}{
"properties": {
"agent_config_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"attributed_user": {
"anyOf": [
{
"properties": {
"avatar_url": {
"type": "string"
},
"id": {
"type": "integer"
},
"login": {
"type": "string"
},
"type": {
"enum": [
"User",
"Organization",
"Bot",
"Mannequin"
],
"type": "string"
}
},
"required": [
"id",
"login",
"type",
"avatar_url"
],
"type": "object"
},
{
"type": "null"
}
]
},
"attribution_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"attribution_type": {
"anyOf": [
{
"enum": [
"github_user",
"linear_user",
"slack_user",
"api_key"
],
"type": "string"
},
{
"type": "null"
}
]
},
"client_version": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"config_override": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
]
},
"context_repository": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"cost_fee": {
"default": 0,
"type": "integer"
},
"cost_sandbox_cpu": {
"default": 0,
"type": "integer"
},
"cost_sandbox_memory": {
"default": 0,
"type": "integer"
},
"cost_tokens": {
"type": "integer"
},
"created_at": {
"format": "date-time",
"type": "string"
},
"customer_id": {
"type": "string"
},
"default_resolution": {
"anyOf": [
{
"enum": [
"repo_default",
"account_default",
"none"
],
"type": "string"
},
{
"type": "null"
}
]
},
"exit_status": {
"anyOf": [
{
"enum": [
"completed",
"budget_hit",
"payment_required",
"tool_call_failed",
"lifecycle_hook_failed",
"missing_repo_access",
"missing_token_permissions",
"missing_sandbox_variables",
"cancelled",
"interrupted",
"error",
"stopped"
],
"type": "string"
},
{
"type": "null"
}
]
},
"harness": {
"enum": [
"claude_code",
"codex"
],
"type": "string"
},
"id": {
"type": "string"
},
"last_activity_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"last_message_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"live_summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"additionalProperties": {
"type": "string"
},
"default": {},
"type": "object"
},
"output_prs": {
"anyOf": [
{
"items": {
"properties": {
"gh_pr_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"number": {
"type": "integer"
},
"repo_full_name": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"type": "string"
}
},
"required": [
"repo_full_name",
"number",
"url"
],
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
]
},
"parent_agent_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"parent_kind": {
"anyOf": [
{
"enum": [
"continuation",
"handoff",
"resume"
],
"type": "string"
},
{
"type": "null"
}
]
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"prompting": {
"properties": {
"blocked_reason": {
"anyOf": [
{
"enum": [
"mention_surface",
"ephemeral_trigger",
"non_interactive",
"harness_single_turn",
"closed",
"laptop"
],
"type": "string"
},
{
"type": "null"
}
]
},
"detail": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"enabled": {
"type": "boolean"
},
"surface_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"enabled"
],
"type": "object"
},
"replayed_from_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"resolved_budget_cents": {
"type": "integer"
},
"resolved_budget_source": {
"enum": [
"system",
"account",
"config",
"run"
],
"type": "string"
},
"sandbox_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"session_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"session_state": {
"anyOf": [
{
"enum": [
"idle",
"running",
"closed"
],
"type": "string"
},
{
"type": "null"
}
]
},
"source": {
"enum": [
"react",
"manual",
"api",
"cli",
"mention",
"cron",
"laptop"
],
"type": "string"
},
"status": {
"enum": [
"scheduled",
"creating_sandbox",
"running",
"retrying",
"completed",
"error",
"cancelled",
"stopped"
],
"type": "string"
},
"status_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"stopped_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"stopped_by": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"stopped_by_user": {
"anyOf": [
{
"properties": {
"avatar_url": {
"type": "string"
},
"id": {
"type": "integer"
},
"login": {
"type": "string"
},
"type": {
"enum": [
"User",
"Organization",
"Bot",
"Mannequin"
],
"type": "string"
}
},
"required": [
"id",
"login",
"type",
"avatar_url"
],
"type": "object"
},
{
"type": "null"
}
]
},
"surface": {
"anyOf": [
{
"properties": {
"run": {
"anyOf": [
{
"enum": [
"scheduled",
"starting",
"working",
"waiting",
"done",
"failed",
"stopped",
"cancelled",
"retrying"
],
"type": "string"
},
{
"type": "null"
}
]
},
"session": {
"anyOf": [
{
"enum": [
"alive",
"sleeping",
"closed"
],
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"session",
"run",
"status"
],
"type": "object"
},
{
"type": "null"
}
]
},
"tokens_cache_creation": {
"default": 0,
"type": "integer"
},
"tokens_cache_read": {
"default": 0,
"type": "integer"
},
"tokens_input": {
"default": 0,
"type": "integer"
},
"tokens_model": {
"type": "string"
},
"tokens_output": {
"default": 0,
"type": "integer"
},
"tokens_total": {
"default": 0,
"type": "integer"
},
"updated_at": {
"format": "date-time",
"type": "string"
},
"webhook_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"webhook_type": {
"anyOf": [
{
"enum": [
"github.issue",
"github.issue_comment",
"github.push",
"github.pull_request",
"github.pull_request_comment",
"github.pull_request_review",
"github.pull_request_review_comment",
"slack.app_mention",
"slack.message",
"slack.channel_created",
"linear.issue",
"linear.issue_comment",
"sentry.event_alert",
"sentry.metric_alert",
"user.message"
],
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"customer_id",
"created_at",
"updated_at",
"harness",
"source",
"cost_tokens",
"tokens_model",
"resolved_budget_cents",
"resolved_budget_source",
"status",
"prompting"
],
"type": "object"
}Request
A saved config to replay against. By default the original run's frozen config snapshot is reused.
Optional partial-config override merged onto the chosen config and re-validated — e.g. {"claude": {"model": "claude-opus-4-8"}} to replay the run on a different model, or {"limits": {"run": 5.0}} to raise its budget. Mutually exclusive with config_override_yaml.
The same partial-config override as a YAML/JSON string (e.g. read from a file). Mutually exclusive with config_override.
Per-run instructions. Omit to inherit the original run's prompt (a bare replay re-runs the same instructions); pass "" to clear it.
Responses
stopped_by is recorded only when the caller's credential maps to a GitHub account.
curl -X POST "https://api.ellipsis.dev/sessions/{session_id}/stop" \
-H "Authorization: Bearer $ELLIPSIS_API_KEY"{
"agent_config_id": "string",
"attributed_user": {
"avatar_url": "string",
"id": 0,
"login": "string",
"type": "User"
},
"attribution_id": "string",
"attribution_type": "github_user",
"client_version": "string",
"config_override": {},
"context_repository": "string",
"cost_fee": 0,
"cost_sandbox_cpu": 0,
"cost_sandbox_memory": 0,
"cost_tokens": 0,
"created_at": "2026-01-01T00:00:00Z",
"customer_id": "string",
"default_resolution": "repo_default",
"exit_status": "completed",
"harness": "claude_code",
"id": "string",
"last_activity_at": "2026-01-01T00:00:00Z",
"last_message_at": "2026-01-01T00:00:00Z",
"live_summary": "string",
"metadata": {},
"output_prs": [
{
"gh_pr_id": 0,
"number": 0,
"repo_full_name": "string",
"title": "string",
"url": "string"
}
],
"parent_agent_session_id": "string",
"parent_kind": "continuation",
"prompt": "string",
"prompting": {
"blocked_reason": "mention_surface",
"detail": "string",
"enabled": false,
"surface_name": "string"
},
"replayed_from_session_id": "string",
"resolved_budget_cents": 0,
"resolved_budget_source": "system",
"sandbox_id": "string",
"session_key": "string",
"session_state": "idle",
"source": "react",
"status": "scheduled",
"status_reason": "string",
"stopped_at": "2026-01-01T00:00:00Z",
"stopped_by": 0,
"stopped_by_user": {
"avatar_url": "string",
"id": 0,
"login": "string",
"type": "User"
},
"surface": {
"run": "scheduled",
"session": "alive",
"status": "string"
},
"tokens_cache_creation": 0,
"tokens_cache_read": 0,
"tokens_input": 0,
"tokens_model": "string",
"tokens_output": 0,
"tokens_total": 0,
"updated_at": "2026-01-01T00:00:00Z",
"webhook_id": "string",
"webhook_type": "github.issue"
}{
"properties": {
"agent_config_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"attributed_user": {
"anyOf": [
{
"properties": {
"avatar_url": {
"type": "string"
},
"id": {
"type": "integer"
},
"login": {
"type": "string"
},
"type": {
"enum": [
"User",
"Organization",
"Bot",
"Mannequin"
],
"type": "string"
}
},
"required": [
"id",
"login",
"type",
"avatar_url"
],
"type": "object"
},
{
"type": "null"
}
]
},
"attribution_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"attribution_type": {
"anyOf": [
{
"enum": [
"github_user",
"linear_user",
"slack_user",
"api_key"
],
"type": "string"
},
{
"type": "null"
}
]
},
"client_version": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"config_override": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
]
},
"context_repository": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"cost_fee": {
"default": 0,
"type": "integer"
},
"cost_sandbox_cpu": {
"default": 0,
"type": "integer"
},
"cost_sandbox_memory": {
"default": 0,
"type": "integer"
},
"cost_tokens": {
"type": "integer"
},
"created_at": {
"format": "date-time",
"type": "string"
},
"customer_id": {
"type": "string"
},
"default_resolution": {
"anyOf": [
{
"enum": [
"repo_default",
"account_default",
"none"
],
"type": "string"
},
{
"type": "null"
}
]
},
"exit_status": {
"anyOf": [
{
"enum": [
"completed",
"budget_hit",
"payment_required",
"tool_call_failed",
"lifecycle_hook_failed",
"missing_repo_access",
"missing_token_permissions",
"missing_sandbox_variables",
"cancelled",
"interrupted",
"error",
"stopped"
],
"type": "string"
},
{
"type": "null"
}
]
},
"harness": {
"enum": [
"claude_code",
"codex"
],
"type": "string"
},
"id": {
"type": "string"
},
"last_activity_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"last_message_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"live_summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"additionalProperties": {
"type": "string"
},
"default": {},
"type": "object"
},
"output_prs": {
"anyOf": [
{
"items": {
"properties": {
"gh_pr_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"number": {
"type": "integer"
},
"repo_full_name": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"type": "string"
}
},
"required": [
"repo_full_name",
"number",
"url"
],
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
]
},
"parent_agent_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"parent_kind": {
"anyOf": [
{
"enum": [
"continuation",
"handoff",
"resume"
],
"type": "string"
},
{
"type": "null"
}
]
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"prompting": {
"properties": {
"blocked_reason": {
"anyOf": [
{
"enum": [
"mention_surface",
"ephemeral_trigger",
"non_interactive",
"harness_single_turn",
"closed",
"laptop"
],
"type": "string"
},
{
"type": "null"
}
]
},
"detail": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"enabled": {
"type": "boolean"
},
"surface_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"enabled"
],
"type": "object"
},
"replayed_from_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"resolved_budget_cents": {
"type": "integer"
},
"resolved_budget_source": {
"enum": [
"system",
"account",
"config",
"run"
],
"type": "string"
},
"sandbox_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"session_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"session_state": {
"anyOf": [
{
"enum": [
"idle",
"running",
"closed"
],
"type": "string"
},
{
"type": "null"
}
]
},
"source": {
"enum": [
"react",
"manual",
"api",
"cli",
"mention",
"cron",
"laptop"
],
"type": "string"
},
"status": {
"enum": [
"scheduled",
"creating_sandbox",
"running",
"retrying",
"completed",
"error",
"cancelled",
"stopped"
],
"type": "string"
},
"status_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"stopped_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"stopped_by": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"stopped_by_user": {
"anyOf": [
{
"properties": {
"avatar_url": {
"type": "string"
},
"id": {
"type": "integer"
},
"login": {
"type": "string"
},
"type": {
"enum": [
"User",
"Organization",
"Bot",
"Mannequin"
],
"type": "string"
}
},
"required": [
"id",
"login",
"type",
"avatar_url"
],
"type": "object"
},
{
"type": "null"
}
]
},
"surface": {
"anyOf": [
{
"properties": {
"run": {
"anyOf": [
{
"enum": [
"scheduled",
"starting",
"working",
"waiting",
"done",
"failed",
"stopped",
"cancelled",
"retrying"
],
"type": "string"
},
{
"type": "null"
}
]
},
"session": {
"anyOf": [
{
"enum": [
"alive",
"sleeping",
"closed"
],
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"session",
"run",
"status"
],
"type": "object"
},
{
"type": "null"
}
]
},
"tokens_cache_creation": {
"default": 0,
"type": "integer"
},
"tokens_cache_read": {
"default": 0,
"type": "integer"
},
"tokens_input": {
"default": 0,
"type": "integer"
},
"tokens_model": {
"type": "string"
},
"tokens_output": {
"default": 0,
"type": "integer"
},
"tokens_total": {
"default": 0,
"type": "integer"
},
"updated_at": {
"format": "date-time",
"type": "string"
},
"webhook_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"webhook_type": {
"anyOf": [
{
"enum": [
"github.issue",
"github.issue_comment",
"github.push",
"github.pull_request",
"github.pull_request_comment",
"github.pull_request_review",
"github.pull_request_review_comment",
"slack.app_mention",
"slack.message",
"slack.channel_created",
"linear.issue",
"linear.issue_comment",
"sentry.event_alert",
"sentry.metric_alert",
"user.message"
],
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"customer_id",
"created_at",
"updated_at",
"harness",
"source",
"cost_tokens",
"tokens_model",
"resolved_budget_cents",
"resolved_budget_source",
"status",
"prompting"
],
"type": "object"
}Request
Responses
The in-sandbox tailer for interactive sessions. A sandbox token may only push its own session's transcript. Idempotent by transcript line uuid; tolerant of malformed lines.
curl -X POST "https://api.ellipsis.dev/sessions/{session_id}/transcript" \
-H "Authorization: Bearer $ELLIPSIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"lines":[]}'{
"completed_turns": 0,
"ingested": 0,
"next_offset": 0,
"skipped": 0
}{
"properties": {
"lines": {
"items": {
"type": "string"
},
"type": "array"
},
"offset": {
"default": 0,
"type": "integer"
}
},
"required": [
"lines"
],
"type": "object"
}{
"properties": {
"completed_turns": {
"type": "integer"
},
"ingested": {
"type": "integer"
},
"next_offset": {
"type": "integer"
},
"skipped": {
"type": "integer"
}
},
"required": [
"ingested",
"skipped",
"next_offset",
"completed_turns"
],
"type": "object"
}Request
Raw on-disk transcript lines starting at `offset`.
0integerThe line offset the batch starts at.
Responses
The conversation structure, for durable (keyed) sessions; empty lists for single-shot sessions. The session's per-conversation state (idle | running | closed) rides on the session object itself (session_state).
curl "https://api.ellipsis.dev/sessions/{session_id}/turns" \
-H "Authorization: Bearer $ELLIPSIS_API_KEY"{
"messages": [
{
"agent_session_id": "string",
"author": "string",
"body": "string",
"closes_session": false,
"created_at": "2026-01-01T00:00:00Z",
"delivered_at": "2026-01-01T00:00:00Z",
"delivered_turn_id": "string",
"feed_seq": 0,
"id": "string",
"idempotency_key": "string",
"platform_ts": "string",
"sender_attribution_id": "string",
"sender_attribution_type": "github_user",
"status": "pending",
"webhook_id": "string",
"webhook_type": "github.issue"
}
],
"turns": [
{
"agent_session_id": "string",
"completed_at": "2026-01-01T00:00:00Z",
"cost_fee": 0,
"cost_sandbox_cpu": 0,
"cost_sandbox_memory": 0,
"cost_tokens": 0,
"created_at": "2026-01-01T00:00:00Z",
"exit_status": "completed",
"id": "string",
"react_action": "string",
"sandbox_id": "string",
"session_execution_id": "string",
"started_at": "2026-01-01T00:00:00Z",
"status": "scheduled",
"status_reason": "string",
"tokens_cache_creation": 0,
"tokens_cache_read": 0,
"tokens_input": 0,
"tokens_model": "string",
"tokens_output": 0,
"tokens_total": 0,
"turn_index": 0,
"updated_at": "2026-01-01T00:00:00Z",
"webhook_id": "string",
"webhook_type": "github.issue"
}
]
}{
"properties": {
"messages": {
"items": {
"properties": {
"agent_session_id": {
"type": "string"
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"body": {
"type": "string"
},
"closes_session": {
"default": false,
"type": "boolean"
},
"created_at": {
"format": "date-time",
"type": "string"
},
"delivered_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"delivered_turn_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"feed_seq": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"id": {
"type": "string"
},
"idempotency_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"platform_ts": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"sender_attribution_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"sender_attribution_type": {
"anyOf": [
{
"enum": [
"github_user",
"linear_user",
"slack_user",
"api_key"
],
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"enum": [
"pending",
"delivered"
],
"type": "string"
},
"webhook_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"webhook_type": {
"anyOf": [
{
"enum": [
"github.issue",
"github.issue_comment",
"github.push",
"github.pull_request",
"github.pull_request_comment",
"github.pull_request_review",
"github.pull_request_review_comment",
"slack.app_mention",
"slack.message",
"slack.channel_created",
"linear.issue",
"linear.issue_comment",
"sentry.event_alert",
"sentry.metric_alert",
"user.message"
],
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"agent_session_id",
"body",
"status",
"created_at"
],
"type": "object"
},
"type": "array"
},
"turns": {
"items": {
"properties": {
"agent_session_id": {
"type": "string"
},
"completed_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"cost_fee": {
"default": 0,
"type": "integer"
},
"cost_sandbox_cpu": {
"default": 0,
"type": "integer"
},
"cost_sandbox_memory": {
"default": 0,
"type": "integer"
},
"cost_tokens": {
"default": 0,
"type": "integer"
},
"created_at": {
"format": "date-time",
"type": "string"
},
"exit_status": {
"anyOf": [
{
"enum": [
"completed",
"budget_hit",
"payment_required",
"tool_call_failed",
"lifecycle_hook_failed",
"missing_repo_access",
"missing_token_permissions",
"missing_sandbox_variables",
"cancelled",
"interrupted",
"error",
"stopped"
],
"type": "string"
},
{
"type": "null"
}
]
},
"id": {
"type": "string"
},
"react_action": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"sandbox_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"session_execution_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"started_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"enum": [
"scheduled",
"running",
"completed",
"error",
"cancelled"
],
"type": "string"
},
"status_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"tokens_cache_creation": {
"default": 0,
"type": "integer"
},
"tokens_cache_read": {
"default": 0,
"type": "integer"
},
"tokens_input": {
"default": 0,
"type": "integer"
},
"tokens_model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"tokens_output": {
"default": 0,
"type": "integer"
},
"tokens_total": {
"default": 0,
"type": "integer"
},
"turn_index": {
"type": "integer"
},
"updated_at": {
"format": "date-time",
"type": "string"
},
"webhook_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"webhook_type": {
"anyOf": [
{
"enum": [
"github.issue",
"github.issue_comment",
"github.push",
"github.pull_request",
"github.pull_request_comment",
"github.pull_request_review",
"github.pull_request_review_comment",
"slack.app_mention",
"slack.message",
"slack.channel_created",
"linear.issue",
"linear.issue_comment",
"sentry.event_alert",
"sentry.metric_alert",
"user.message"
],
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"agent_session_id",
"turn_index",
"created_at",
"updated_at",
"status"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"turns",
"messages"
],
"type": "object"
}