3.1.02.0.0The Elicit API provides programmatic access to Elicit's research capabilities, including semantic search over 138 million+ academic papers and automated report generation.
All API requests require a Bearer token in the Authorization header:
Authorization: Bearer elk_live_your_key_here
API keys can be created and managed from your Elicit account settings.
API access requires a Pro plan or above. Search requests are rate-limited based on your plan tier — see the Search endpoint for details.
Manage your plan in account settings.
Working examples in curl, Python, and JavaScript, plus integrations (CLI tool, Slack bot, Claude Code skill):
github.com/elicit/api-examples
All errors return a consistent JSON structure with an error object containing a machine-readable code and a human-readable message.
All API functionality is also available via MCP (Model Context Protocol) server, enabling use from Claude Desktop, Claude Code, and other MCP-compatible clients. Authentication is via OAuth 2.0.
claude mcp add --transport http elicit https://elicit.com/api/mcp
Then run /mcp, select the elicit server, and choose Authenticate to open a browser for login.
Via the UI: Click the icon next to your name > Settings > Connectors > Add custom connector. Enter Elicit for the name and https://elicit.com/api/mcp for the URL.
Or via config file — add to claude_desktop_config.json:
{
"mcpServers": {
"elicit": {
"type": "url",
"url": "https://elicit.com/api/mcp"
}
}
}
Connect any MCP client using HTTP transport to https://elicit.com/api/mcp. OAuth discovery is available at https://elicit.com/api/mcp/.well-known/oauth-protected-resource.
For MCP setup guides, tool reference, and usage examples, see github.com/elicit/api-examples/tree/main/integrations/mcp.
https://elicit.com/api/v2POST/search/papersSearch Elicit's database of over 138 million academic papers using natural language queries.
Semantic search uses natural language understanding to find relevant papers even when the exact terms don't match.
Set corpus to pubmed to restrict results to PubMed, or leave it as the default elicit for the full paper index. Set searchMode to "keyword" to interpret the query as a Lucene-style boolean expression instead of natural language.
Filters and searchMode: "keyword" are mutually exclusive — put any filter expressions directly into the query string when using keyword search. Mixing them returns a 400.
To search clinical trials instead, use POST /api/v2/search/trials.
Each plan caps how many results a single search request may return:
| Plan | Results per request |
|---|---|
| Basic | No access |
| Plus | No access |
| Pro | 300 |
| Scale | 500 |
| Enterprise | 10,000 |
Search is rate-limited only by the global limit of 100 requests per minute per IP address, applied across all endpoints and all plans. Exceeding it returns a 429 and blocks the IP for 5 minutes.
Upgrade your plan in account settings for higher per-request result caps.
curl -X POST https://elicit.com/api/v2/search/papers \
-H "Authorization: Bearer elk_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"query": "effects of sleep deprivation on cognitive performance"}'
query (required)string — The search query string
corpusstring, possible values: "elicit", "pubmed", default: "elicit" — Paper corpus to search. `elicit` (default) searches Elicit's full paper index; `pubmed` restricts to PubMed.
filtersobject — Filters to narrow search results
excludeKeywordsarray — Keywords to exclude from results
string
hasPdfboolean — Only include papers with available PDFs
includeKeywordsarray — Keywords that must appear in the paper
string
maxEpochSinteger — Maximum publication date as Unix epoch seconds
maxQuartileinteger — Maximum journal quartile (1 = top 25%)
maxYearinteger — Maximum publication year
minEpochSinteger — Minimum publication date as Unix epoch seconds
minYearinteger — Minimum publication year
pubmedOnlyboolean — Only include papers from PubMed
retractedstring, possible values: "exclude_retracted", "include_retracted", "only_retracted" — How to handle retracted papers. Defaults to exclude_retracted.
typeTagsarray — Filter by study type
string, possible values: "Review", "Meta-Analysis", "Systematic Review", "RCT", "Longitudinal"
maxResultsinteger, default: 10 — Maximum number of results to return (1-10000)
searchModestring, possible values: "semantic", "keyword", default: "semantic" — How to interpret `query`. `semantic` (default) runs Elicit's semantic search. `keyword` sends the query as a Lucene-style boolean expression directly to the corpus search API. Mutually exclusive with `filters` / `trialFilters` — put filter expressions into the query string in keyword mode.
Example:
{
"query": "GLP-1 receptor agonists for weight loss",
"searchMode": "semantic",
"maxResults": 10,
"corpus": "elicit",
"filters": {
"minYear": 2020,
"maxYear": 2025,
"minEpochS": 1672531200,
"maxEpochS": 1785979765,
"maxQuartile": 2,
"includeKeywords": [
"semaglutide",
"liraglutide"
],
"excludeKeywords": [
"rodent",
"mouse model"
],
"typeTags": [
"RCT",
"Meta-Analysis"
],
"hasPdf": false,
"pubmedOnly": false,
"retracted": "exclude_retracted"
}
}papers (required)array — Papers matching the query
abstract (required)string | null — Paper abstract
authors (required)array — List of author names
string
citedByCount (required)integer | null — Number of citations this paper has received
doi (required)string | null — Digital Object Identifier
elicitId (required)string | null — Elicit internal paper identifier
pmid (required)string | null — PubMed identifier
title (required)string — Paper title
urls (required)array — URLs for the paper
string
venue (required)string | null — Publication venue
year (required)integer | null — Publication year
warningsarray — Non-fatal warnings emitted while executing the search (e.g. phrases ignored by the PubMed parser).
corpus (required)string, possible values: "elicit", "pubmed", "clinical_trials" — Corpus that emitted the warning
message (required)string — Human-readable warning message
searchMode (required)string, possible values: "semantic", "keyword" — Search mode in effect when the warning was emitted
warningDetails (required)object
messages (required)array — Underlying warning messages
string
type (required)string — Warning category
Example:
{
"papers": [
{
"elicitId": null,
"title": "",
"authors": [
""
],
"year": null,
"abstract": null,
"doi": null,
"pmid": null,
"venue": null,
"citedByCount": null,
"urls": [
""
]
}
],
"warnings": [
{
"corpus": "elicit",
"searchMode": "semantic",
"message": "",
"warningDetails": {
"type": "",
"messages": [
""
]
}
}
]
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)string — Error label. Always `Rate limit exceeded` for the burst limit.
message (required)string — Human-readable detail.
Example:
{
"error": "Rate limit exceeded",
"message": "Too many requests. Please try again later."
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}POST/search/trialsSearch for clinical trials. Trial records come from ClinicalTrials.gov.
Pass trialFilters to narrow by phase, recruitment status, or whether the trial has posted results. Set searchMode to "keyword" to send the query as a Lucene-style boolean expression directly to the underlying advanced-filter API.
Filters and searchMode: "keyword" are mutually exclusive — put filter expressions directly into the query when using keyword search. Mixing them returns a 400.
To search academic papers instead, use POST /api/v2/search/papers.
Each plan caps how many results a single search request may return:
| Plan | Results per request |
|---|---|
| Basic | No access |
| Plus | No access |
| Pro | 300 |
| Scale | 500 |
| Enterprise | 10,000 |
Search is rate-limited only by the global limit of 100 requests per minute per IP address, applied across all endpoints and all plans. Exceeding it returns a 429 and blocks the IP for 5 minutes.
Upgrade your plan in account settings for higher per-request result caps.
curl -X POST https://elicit.com/api/v2/search/trials \
-H "Authorization: Bearer elk_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"query": "semaglutide obesity", "trialFilters": {"phase": ["PHASE3"]}}'
query (required)string — The search query string
maxResultsinteger, default: 10 — Maximum number of results to return (1-10000)
searchModestring, possible values: "semantic", "keyword", default: "semantic" — How to interpret `query`. `semantic` (default) runs Elicit's semantic search. `keyword` sends the query as a Lucene-style boolean expression directly to the corpus search API. Mutually exclusive with `filters` / `trialFilters` — put filter expressions into the query string in keyword mode.
trialFiltersobject — Clinical-trials filters (phase, recruitment status, results)
hasResultsboolean — Only include trials that have posted results
phasearray — Clinical trial phases to include
string, possible values: "NA", "EARLY_PHASE1", "PHASE1", "PHASE2", "PHASE3", "PHASE4"
recruitmentStatusarray — Trial recruitment statuses to include
string, possible values: "ACTIVE_NOT_RECRUITING", "COMPLETED", "ENROLLING_BY_INVITATION", "NOT_YET_RECRUITING", "RECRUITING", "SUSPENDED", "TERMINATED", "WITHDRAWN", "AVAILABLE"
Example:
{
"query": "GLP-1 receptor agonists for weight loss",
"searchMode": "semantic",
"maxResults": 10,
"trialFilters": {
"phase": [
"PHASE2",
"PHASE3"
],
"recruitmentStatus": [
"RECRUITING",
"ACTIVE_NOT_RECRUITING"
],
"hasResults": true
}
}trials (required)array — Clinical trials matching the query
completionDate (required)string | null — Completion date (ISO `YYYY-MM-DD` or partial).
conditions (required)array — Conditions / diseases being studied.
string
enrollmentCount (required)integer | null — Actual or anticipated enrollment count.
hasResults (required)boolean | null — Whether the trial has posted results.
interventions (required)array — Intervention names.
string
lastUpdatedYear (required)integer | null — Year the trial record was last updated.
leadSponsor (required)string | null — Lead sponsor name.
nctId (required)string — NCT identifier for the trial
overallStatus (required)string | null — Overall recruitment status (RECRUITING, COMPLETED, TERMINATED, etc.). Null when the trial has no status posted.
phase (required)array — Trial phases (may list multiple, e.g. PHASE2 + PHASE3). Empty for N/A.
string
primaryCompletionDate (required)string | null — Primary completion date (ISO `YYYY-MM-DD` or partial).
startDate (required)string | null — Trial start date (ISO `YYYY-MM-DD` or partial).
studyType (required)string | null — Study type (INTERVENTIONAL, OBSERVATIONAL, EXPANDED_ACCESS).
summary (required)string | null — Plain-text trial description / brief summary
title (required)string — Trial title
url (required)string — Link to the trial's public record
warningsarray — Non-fatal warnings emitted while executing the search.
corpus (required)string, possible values: "elicit", "pubmed", "clinical_trials" — Corpus that emitted the warning
message (required)string — Human-readable warning message
searchMode (required)string, possible values: "semantic", "keyword" — Search mode in effect when the warning was emitted
warningDetails (required)object
messages (required)array — Underlying warning messages
string
type (required)string — Warning category
Example:
{
"trials": [
{
"nctId": "NCT05646706",
"title": "",
"summary": null,
"url": "https://clinicaltrials.gov/study/NCT05646706",
"overallStatus": null,
"phase": [
""
],
"studyType": null,
"enrollmentCount": null,
"conditions": [
""
],
"interventions": [
""
],
"leadSponsor": null,
"startDate": null,
"primaryCompletionDate": null,
"completionDate": null,
"hasResults": null,
"lastUpdatedYear": null
}
],
"warnings": [
{
"corpus": "elicit",
"searchMode": "semantic",
"message": "",
"warningDetails": {
"type": "",
"messages": [
""
]
}
}
]
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)string — Error label. Always `Rate limit exceeded` for the burst limit.
message (required)string — Human-readable detail.
Example:
{
"error": "Rate limit exceeded",
"message": "Too many requests. Please try again later."
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}POST/sessions/reportsStart an asynchronous report generation job. Elicit will search for relevant papers, screen them for relevance, extract structured data, and produce a full research report.
Reports are long-running operations (typically 5–15 minutes). The response includes a sessionId and a links.self URL that you poll for status.
The report is also visible at the url returned in the response, where you can watch it progress in real time.
sessionId)links.self (/api/v2/sessions/reports/:sessionId) — poll until status is completed or failedpdfUrl and docxUrl fields on the completed response to download the report, and txtUrl, bibUrl, and risUrl to download its reference list (APA text, BibTeX, and RIS)# 1. Create the report
curl -X POST https://elicit.com/api/v2/sessions/reports \
-H "Authorization: Bearer elk_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"researchQuestion": "What are the effects of GLP-1 receptor agonists on cardiovascular outcomes?"}'
# 2. Poll for completion (repeat until status is "completed" or "failed")
curl https://elicit.com/api/v2/sessions/reports/{sessionId} \
-H "Authorization: Bearer elk_live_your_key_here"
researchQuestion (required)string — The research question to investigate. Elicit will search for relevant papers, screen them, and extract data to produce a structured report.
isPublicboolean, default: false — Whether the report should be publicly accessible via its URL without authentication. Defaults to false.
maxExtractPapersinteger, default: 10 — Maximum number of papers to include in the final extraction table. Papers are screened for relevance before extraction. Defaults to 10.
maxSearchPapersinteger, default: 50 — Maximum number of papers to retrieve during the search phase. More papers means a more comprehensive but slower report. Defaults to 50.
titlestring — Optional title for the report. If provided, Elicit will use this as the report title instead of generating one automatically from the research question.
Example:
{
"researchQuestion": "What are the effects of GLP-1 receptor agonists on cardiovascular outcomes?",
"title": "GLP-1 Receptor Agonists and Cardiovascular Outcomes",
"maxSearchPapers": 50,
"maxExtractPapers": 10,
"isPublic": false
}isPublic (required)boolean — Whether the report is publicly accessible via its URL without authentication
links (required)object
self (required)string — API URL for this session's full status and results (the typed get endpoint for its type)
resumestring — API URL to resume this session. Present only while the session is paused for insufficient quota.
sessionId (required)string, format: uuid — The session ID (UUID) returned by the create endpoints and `GET /sessions`
status (required)string — Initial status is always processing
type (required)string
url (required)string — URL to view the report in the Elicit web interface as it progresses
Example:
{
"type": "report",
"sessionId": "5ad08bfb-cbe0-4911-a8c3-309760d33029",
"status": "processing",
"url": "https://elicit.com/review/5ad08bfb-cbe0-4911-a8c3-309760d33029",
"isPublic": false,
"links": {
"self": "https://elicit.com/api/v2/sessions/reports/5ad08bfb-cbe0-4911-a8c3-309760d33029",
"resume": "https://elicit.com/api/v2/sessions/5ad08bfb-cbe0-4911-a8c3-309760d33029/resume"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}GET/sessions/reports/{sessionId}Poll the status of a report created via POST /api/v2/sessions/reports.
url.links.resume URL (or the Elicit web interface) once the limit is resolved.result field contains the report content.error field contains details.Poll every 30–60 seconds. Reports typically complete in 5–15 minutes depending on the number of papers.
By default, the reportBody and abstract fields are omitted to keep polling responses lightweight. To include them, add ?include=reportBody to the request.
# Poll for status
curl https://elicit.com/api/v2/sessions/reports/{sessionId} \
-H "Authorization: Bearer elk_live_your_key_here"
# Fetch with full report body
curl "https://elicit.com/api/v2/sessions/reports/{sessionId}?include=reportBody" \
-H "Authorization: Bearer elk_live_your_key_here"
executionStage (required)string | null, possible values: "gathering_sources", "screening_abstract", "screening_fulltext", "extracting_data", "generating_report", "done", null — Current pipeline stage. Advances through gathering_sources → screening_abstract → extracting_data → generating_report → done. Null for reports created before this field was introduced or when the stage isn't known.
isPublic (required)boolean — Whether the report is publicly accessible via its URL without authentication
links (required)object
self (required)string — API URL for this session's full status and results (the typed get endpoint for its type)
resumestring — API URL to resume this session. Present only while the session is paused for insufficient quota.
sessionId (required)string, format: uuid — The session ID (UUID) returned by the create endpoints and `GET /sessions`
status (required)string, possible values: "processing", "pausedForInsufficientQuota", "completed", "failed", "unknown" — Current status of the report. Transitions: processing ⇄ pausedForInsufficientQuota (paused when the account exceeds its usage limit; stays paused until explicitly resumed via the resume endpoint or the Elicit web interface), processing → completed/failed. Poll until completed or failed.
type (required)string
url (required)string — URL to view the report in the Elicit web interface
bibUrlstring | null — Pre-signed URL to download the report's references as a BibTeX (.bib) file. Only present when status is completed and the report has a non-empty bibliography. Expires after 7 days — re-fetch the report for a fresh URL.
docxUrlstring | null — Pre-signed URL to download the report as DOCX. Only present when status is completed and assets have been generated. Expires after 7 days — re-fetch the report for a fresh URL.
errorobject — Error details, only present when status is failed
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
pdfUrlstring | null — Pre-signed URL to download the report as PDF. Only present when status is completed and assets have been generated. Expires after 7 days — re-fetch the report for a fresh URL.
resultobject — Report output, only present when status is completed
summary (required)string — AI-generated executive summary of the findings
title (required)string — Auto-generated title for the report
abstractstring | null — Report abstract in markdown format. Only included when ?include=reportBody is specified.
reportBodystring | null — Full report content in markdown format. Only included when ?include=reportBody is specified.
risUrlstring | null — Pre-signed URL to download the report's references as an RIS (.ris) file. Only present when status is completed and the report has a non-empty bibliography. Expires after 7 days — re-fetch the report for a fresh URL.
txtUrlstring | null — Pre-signed URL to download the report's reference list as a plain-text (APA) file. Only present when status is completed and the report has a non-empty bibliography. Expires after 7 days — re-fetch the report for a fresh URL.
Example:
{
"type": "report",
"sessionId": "5ad08bfb-cbe0-4911-a8c3-309760d33029",
"status": "processing",
"executionStage": "gathering_sources",
"url": "https://elicit.com/review/5ad08bfb-cbe0-4911-a8c3-309760d33029",
"isPublic": false,
"result": {
"title": "GLP-1 Receptor Agonists and Cardiovascular Outcomes: A Systematic Review",
"summary": "This review analyzed 42 studies examining the cardiovascular effects of GLP-1 receptor agonists. The evidence suggests significant reductions in major adverse cardiovascular events (MACE), with semaglutide showing the strongest effect (HR 0.74, 95% CI 0.58-0.95)...",
"reportBody": "# Introduction\n\nGLP-1 receptor agonists have emerged as...",
"abstract": "This systematic review examines the cardiovascular effects of..."
},
"error": {
"code": "",
"message": ""
},
"pdfUrl": "https://s3.amazonaws.com/...",
"docxUrl": "https://s3.amazonaws.com/...",
"txtUrl": "https://s3.amazonaws.com/...",
"bibUrl": "https://s3.amazonaws.com/...",
"risUrl": "https://s3.amazonaws.com/...",
"links": {
"self": "https://elicit.com/api/v2/sessions/reports/5ad08bfb-cbe0-4911-a8c3-309760d33029",
"resume": "https://elicit.com/api/v2/sessions/5ad08bfb-cbe0-4911-a8c3-309760d33029/resume"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}POST/sessions/systematic-reviewsStart a systematic review. Elicit runs the stages you configure — searches, abstract screening, fulltext screening, extraction, and a report. Each stage runs only when you include it; omit a stage to skip it. The default example below runs a complete review end-to-end.
Systematic reviews are long-running operations. The response includes a sessionId and a links.self URL (/api/v2/sessions/systematic-reviews/:sessionId) that you poll for status. You can also watch progress live at the url in the response.
| Plan | Max columns | Max results per query | Max total results | Figure extraction |
|---|---|---|---|---|
| Pro | 20 | 1,000 | 5,000 | No |
| Scale | 30 | 5,000 | 20,000 | Yes |
| Enterprise | 40 | 10,000 | 40,000 | Yes |
curl -X POST https://elicit.com/api/v2/sessions/systematic-reviews \
-H "Authorization: Bearer elk_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"researchQuestion": "Do GLP-1 receptor agonists reduce MACE in T2D patients?",
"searches": [{ "query": "GLP-1 cardiovascular outcomes", "maxResults": 200 }],
"abstractScreening": { "generate": true },
"fulltextScreening": { "reuseAbstractCriteria": true },
"extraction": { "generate": true, "useFigures": false },
"generateReport": true
}'
researchQuestion (required)string — The research question the review is investigating.
abstractScreeningobject — Abstract-stage screening. Supply `criteria`, `generate: true`, or both. Omit the field to skip.
criteriaarray — Explicit screening criteria.
instructions (required)string — Plain-language instructions used to judge whether a paper meets this criterion
name (required)string — Short name for the criterion
generateboolean, default: false — When true, Elicit generates additional screening criteria.
extractionobject — Extraction stage. Supply `questions`, `generate`, or both. Omit to skip extraction entirely.
generateboolean, default: false — When true, Elicit generates additional extraction columns.
questionsarray — Explicit extraction columns.
instructions (required)string — Plain-language instructions describing what to extract
name (required)string — Column header for this extraction question
choicesarray — Optional fixed list of allowed answers. Omit for free-text extraction. When set, the model is constrained to one of these values.
string
useFiguresboolean, default: false — When true, model may consult figures (higher quality, slower). Subject to plan availability.
fulltextScreeningobject — Fulltext-stage screening. Supply `criteria`, `reuseAbstractCriteria: true`, or both. Requires `abstractScreening` to be present. Omit to skip.
criteriaarray — Explicit fulltext-stage criteria.
instructions (required)string — Plain-language instructions used to judge whether a paper meets this criterion
name (required)string — Short name for the criterion
reuseAbstractCriteriaboolean, default: false — When true, the abstract-stage criteria are also applied at the fulltext stage.
generateReportboolean, default: false — Generate a full report at the end of the review. Requires `extraction`.
isPublicboolean, default: false — Whether the review should be publicly accessible via its URL without authentication. Defaults to false.
protocolDetailsstring — Free-form context (PICO, methodology, inclusion/exclusion rationale) used when Elicit generates screening criteria, extraction columns, or the final report.
searchesarray, default: [] — Searches that feed the review pipeline. If omitted or empty, Elicit runs a semantic search using `researchQuestion` as the query. Total search results are subject to plan-specific limits.
query (required)string — Search query
corpusstring, possible values: "elicit", "pubmed", "clinical_trials", default: "elicit" — Corpus to search. `elicit` covers ~138M papers across most domains and is the default. `pubmed` filters on literature from Pubmed only. `clinical_trials` is registered trials only.
maxResultsinteger, default: 200 — Maximum number of papers to retrieve from this search. Plan-specific caps apply.
searchModestring, possible values: "semantic", "keyword", default: "semantic" — `semantic` (default) uses vector-similarity retrieval; `keyword` uses literal keyword matching.
titlestring — Optional title for the review.
Example:
{
"researchQuestion": "Do GLP-1 receptor agonists reduce MACE in T2D patients?",
"protocolDetails": "",
"searches": [],
"abstractScreening": {
"criteria": [
{
"name": "Human study",
"instructions": "The study must be conducted in human subjects (not in vitro or animal-only)."
}
],
"generate": false
},
"fulltextScreening": {
"criteria": [
{
"name": "Human study",
"instructions": "The study must be conducted in human subjects (not in vitro or animal-only)."
}
],
"reuseAbstractCriteria": false
},
"extraction": {
"questions": [
{
"name": "MACE hazard ratio",
"instructions": "Extract the hazard ratio and 95% confidence interval for 3-point MACE.",
"choices": [
"yes",
"no",
"maybe"
]
}
],
"generate": false,
"useFigures": false
},
"generateReport": true,
"title": "",
"isPublic": false
}isPublic (required)boolean — Whether the review is publicly accessible via its URL without authentication
links (required)object
self (required)string — API URL for this session's full status and results (the typed get endpoint for its type)
resumestring — API URL to resume this session. Present only while the session is paused for insufficient quota.
sessionId (required)string, format: uuid — The session ID (UUID) returned by the create endpoints and `GET /sessions`
status (required)string — Initial status is always processing
type (required)string
url (required)string — URL to view the review in the Elicit web interface
Example:
{
"type": "systematicReview",
"sessionId": "5ad08bfb-cbe0-4911-a8c3-309760d33029",
"status": "processing",
"url": "",
"isPublic": true,
"links": {
"self": "https://elicit.com/api/v2/sessions/reports/5ad08bfb-cbe0-4911-a8c3-309760d33029",
"resume": "https://elicit.com/api/v2/sessions/5ad08bfb-cbe0-4911-a8c3-309760d33029/resume"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}GET/sessions/systematic-reviews/{sessionId}Poll the status of a systematic review created via POST /api/v2/sessions/systematic-reviews.
url.links.resume URL (or the Elicit web interface) once the limit is resolved.data. Only stages that actually ran are included.error field contains details. data may still contain exports for stages that completed before the failure.data is populated as soon as each stage's outputs land — you don't need to wait for status: completed. Stages that haven't produced data yet (or that aren't part of this review's config) are simply omitted.
data.search.{csv,xlsx} — gather-stage paper list.data.screen.{csv,xlsx} — abstract-screening results.data.fulltext.{csv,xlsx} — fulltext-screening results (only when fulltext screening is configured).data.extract.{csv,xlsx} — extraction-stage results.data.report — structured content under result, plus optional pdf / docx / txt (APA reference list) / bib (BibTeX) / ris presigned download URLs.All stage URLs are presigned for 7 days and serve with Content-Disposition: attachment so browser downloads land with the canonical filename.
dataFreshness is the ISO timestamp when the cached exports were last regenerated, or null when nothing has been generated yet.
By default, data.report.result.reportBody and data.report.result.abstract are omitted to keep responses light. Append ?include=reportBody to include them.
dataFreshness (required)string | null — ISO timestamp when the exports in `data` were last written to S3. null when no exports have been generated yet.
executionStage (required)string | null, possible values: "gathering_sources", "screening_abstract", "screening_fulltext", "extracting_data", "generating_report", "done", null — Current pipeline stage. Advances through gathering_sources → screening_abstract → screening_fulltext → extracting_data → generating_report → done. Null for reviews created before this field was introduced or when the stage isn't known.
isPublic (required)boolean — Whether the review is publicly accessible via its URL without authentication
links (required)object
self (required)string — API URL for this session's full status and results (the typed get endpoint for its type)
resumestring — API URL to resume this session. Present only while the session is paused for insufficient quota.
sessionId (required)string, format: uuid — The session ID (UUID) returned by the create endpoints and `GET /sessions`
status (required)string, possible values: "processing", "pausedForInsufficientQuota", "completed", "failed", "unknown" — Current status. Transitions: processing ⇄ pausedForInsufficientQuota (paused when the account exceeds its usage limit; stays paused until explicitly resumed via the resume endpoint or the Elicit web interface), processing → completed/failed. Poll until completed or failed.
type (required)string
url (required)string — URL to view the review in the Elicit web interface
dataobject — Stage-organized content and export URLs. Stages that did not run are omitted.
extractobject — Extraction-stage results exports.
csv (required)string, format: uri — Presigned URL for the CSV export. Expires in 7 days.
xlsx (required)string, format: uri — Presigned URL for the XLSX export. Expires in 7 days.
fulltextobject — Fulltext-screening results exports.
csv (required)string, format: uri — Presigned URL for the CSV export. Expires in 7 days.
xlsx (required)string, format: uri — Presigned URL for the XLSX export. Expires in 7 days.
reportobject — Report-stage content and exports.
result (required)object — Structured report content (title, summary, optional body + abstract).
summary (required)string — AI-generated executive summary of the findings
title (required)string — Auto-generated title
abstractstring | null — Report abstract in markdown format. Only included when ?include=reportBody is specified.
reportBodystring | null — Full report content in markdown format. Only included when ?include=reportBody is specified.
bibstring, format: uri — Presigned URL for the BibTeX bibliography. Expires in 7 days.
docxstring, format: uri — Presigned URL for the report DOCX. Expires in 7 days.
pdfstring, format: uri — Presigned URL for the report PDF. Expires in 7 days.
risstring, format: uri — Presigned URL for the RIS bibliography. Expires in 7 days.
txtstring, format: uri — Presigned URL for an APA-style plain-text reference list. Expires in 7 days.
screenobject — Abstract-screening results exports.
csv (required)string, format: uri — Presigned URL for the CSV export. Expires in 7 days.
xlsx (required)string, format: uri — Presigned URL for the XLSX export. Expires in 7 days.
searchobject — Gather-stage paper list exports.
csv (required)string, format: uri — Presigned URL for the CSV export. Expires in 7 days.
xlsx (required)string, format: uri — Presigned URL for the XLSX export. Expires in 7 days.
errorobject — Error details, only present when status is failed
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"type": "systematicReview",
"sessionId": "5ad08bfb-cbe0-4911-a8c3-309760d33029",
"status": "processing",
"executionStage": "gathering_sources",
"url": "",
"isPublic": true,
"error": {
"code": "",
"message": ""
},
"data": {
"search": {
"csv": "",
"xlsx": ""
},
"screen": {
"csv": "",
"xlsx": ""
},
"fulltext": {
"csv": "",
"xlsx": ""
},
"extract": {
"csv": "",
"xlsx": ""
},
"report": {
"result": {
"title": "",
"summary": "",
"reportBody": null,
"abstract": null
},
"pdf": "",
"docx": "",
"txt": "",
"bib": "",
"ris": ""
}
},
"dataFreshness": null,
"links": {
"self": "https://elicit.com/api/v2/sessions/reports/5ad08bfb-cbe0-4911-a8c3-309760d33029",
"resume": "https://elicit.com/api/v2/sessions/5ad08bfb-cbe0-4911-a8c3-309760d33029/resume"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}GET/sessionsList all sessions — reports, systematic reviews, and research-agent sessions — for the authenticated user in a single feed, ordered by creation date (newest first).
Each item carries its sessionId, a type field (report, systematicReview, or agent), and a links object with the URLs for the item's follow-up requests: links.self is the typed get endpoint for its full status and results, and links.resume appears only while the session is paused for insufficient quota. Agent items omit executionStage (agent sessions have no pipeline stages); for them status: "completed" means idle and awaiting input rather than terminally finished.
Results are paginated using cursor-based pagination. Use the nextCursor value from the response to fetch the next page. Filters apply to all session types; pass type to list a single kind.
# First page
curl https://elicit.com/api/v2/sessions?limit=10 \
-H "Authorization: Bearer elk_live_your_key_here"
# Next page
curl "https://elicit.com/api/v2/sessions?limit=10&cursor=2025-06-15T14:30:00.000Z_5ad08bfb-cbe0-4911-a8c3-309760d33029" \
-H "Authorization: Bearer elk_live_your_key_here"
# Only reports created via the API
curl "https://elicit.com/api/v2/sessions?type=report&source=api" \
-H "Authorization: Bearer elk_live_your_key_here"
nextCursor (required)string | null — Opaque cursor for the next page; pass it back as `cursor`. Null if there are no more results.
sessions (required)array — Reports, systematic reviews, and research-agent sessions interleaved, ordered by creation date (newest first)
createdAt (required)string — ISO 8601 timestamp of when the report was created
isPublic (required)boolean — Whether the report is publicly accessible via its URL without authentication
links (required)object
self (required)string — API URL for this session's full status and results (the typed get endpoint for its type)
resumestring — API URL to resume this session. Present only while the session is paused for insufficient quota.
sessionId (required)string, format: uuid — The session ID (UUID) returned by the create endpoints and `GET /sessions`
source (required)string, possible values: "user", "api", "mcp", "agent_session" — How the report was created
status (required)string, possible values: "processing", "pausedForInsufficientQuota", "completed", "failed", "unknown" — Current status of the report
title (required)string — Report title (the research question)
type (required)string, possible values: "report", "systematicReview", "agent" — Which kind of session this is; use it to pick the matching typed get endpoint
url (required)string — URL to view the report in the Elicit web interface
executionStagestring | null, possible values: "gathering_sources", "screening_abstract", "screening_fulltext", "extracting_data", "generating_report", "done", null — Current pipeline stage, or null when not yet known. Omitted entirely for agent sessions, which have no pipeline stages.
rolestring, possible values: "owner", "shared" — The caller's relationship to this session: "owner" for a session the caller created, or "shared" for an agent session another user shared with them read-only. Reports and systematic reviews are always "owner".
Example:
{
"sessions": [
{
"type": "report",
"sessionId": "5ad08bfb-cbe0-4911-a8c3-309760d33029",
"status": "processing",
"executionStage": "gathering_sources",
"title": "What are the effects of GLP-1 receptor agonists on cardiovascular outcomes?",
"url": "https://elicit.com/review/5ad08bfb-cbe0-4911-a8c3-309760d33029",
"source": "api",
"createdAt": "2025-06-15T14:30:00.000Z",
"isPublic": false,
"role": "owner",
"links": {
"self": "https://elicit.com/api/v2/sessions/reports/5ad08bfb-cbe0-4911-a8c3-309760d33029",
"resume": "https://elicit.com/api/v2/sessions/5ad08bfb-cbe0-4911-a8c3-309760d33029/resume"
}
}
],
"nextCursor": "2025-06-15T14:30:00.000Z_5ad08bfb-cbe0-4911-a8c3-309760d33029"
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}POST/sessions/{sessionId}/resumeResume a report, systematic review, or research-agent session that was automatically paused because your account was over its usage limit (status: "pausedForInsufficientQuota" from the get endpoints).
Pass the sessionId from the create response or GET /api/v2/sessions — the session type is resolved automatically. Paused sessions also carry a ready-made links.resume URL for this endpoint.
A paused session stays paused until it is explicitly resumed. Once the usage limit is resolved (for example after upgrading or when a new billing period starts), call this endpoint — or use the resume banner in the Elicit web interface — to continue the run.
curl -X POST https://elicit.com/api/v2/sessions/{sessionId}/resume \
-H "Authorization: Bearer elk_live_your_key_here"
executionStage (required)string | null, possible values: "gathering_sources", "screening_abstract", "screening_fulltext", "extracting_data", "generating_report", "done", null — The stage the session resumed at
isPublic (required)boolean
links (required)object
self (required)string — API URL for this session's full status and results (the typed get endpoint for its type)
resumestring — API URL to resume this session. Present only while the session is paused for insufficient quota.
sessionId (required)string, format: uuid — The session ID (UUID) returned by the create endpoints and `GET /sessions`
status (required)string, possible values: "processing", "pausedForInsufficientQuota", "completed", "failed", "unknown" — Status after the resume — normally processing; completed or failed if the run finished while the resume was in flight.
type (required)string, possible values: "report", "systematicReview", "agent" — Which kind of session was resumed
url (required)string — URL to view this session in the Elicit web interface
Example:
{
"type": "report",
"sessionId": "5ad08bfb-cbe0-4911-a8c3-309760d33029",
"status": "processing",
"executionStage": "screening_abstract",
"url": "",
"isPublic": true,
"links": {
"self": "https://elicit.com/api/v2/sessions/reports/5ad08bfb-cbe0-4911-a8c3-309760d33029",
"resume": "https://elicit.com/api/v2/sessions/5ad08bfb-cbe0-4911-a8c3-309760d33029/resume"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}POST/sessions/{sessionId}/sharesShare a session read-only with another person by email. Works for every session type — reports, systematic reviews, and Research Agent sessions. Sessions are shared read-only: the recipient can view the session but cannot modify, resume, stop, or re-share it (agent sessions are read-only by design; report and systematic-review shares are read-only through the API).
If the email belongs to an existing Elicit account the share takes effect immediately (status: "registered"). Otherwise a pending invitation is created and an email is sent (status: "invited"); the share activates when they create an account.
Only the session owner can manage shares. A recipient of a shared agent session sees it in GET /api/v2/sessions with role: "shared"; a recipient of a shared report or systematic review opens it via the returned web-app url — it will not appear in their GET /api/v2/sessions list, which stays owner-only for review sessions.
curl -X POST https://elicit.com/api/v2/sessions/{sessionId}/shares \
-H "Authorization: Bearer elk_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"email":"colleague@example.com"}'
email (required)string, format: email — Email address to share the session with, as a read-only recipient.
Example:
{
"email": "colleague@example.com"
}sessionId (required)string — Unique identifier for the session.
share (required)object
email (required)string — Email address the session is shared with.
role (required)string — Access level of the share. Sessions are always shared read-only.
status (required)string, possible values: "registered", "invited" — "registered" when the recipient already has an Elicit account and can read the session now; "invited" when a pending invitation was created for an email without an account.
url (required)string — URL to view and continue the session in the Elicit web interface.
Example:
{
"sessionId": "",
"share": {
"email": "colleague@example.com",
"status": "registered",
"role": "reader"
},
"url": ""
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)string — Error label. Always `Rate limit exceeded` for the burst limit.
message (required)string — Human-readable detail.
Example:
{
"error": "Rate limit exceeded",
"message": "Too many requests. Please try again later."
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}GET/sessions/{sessionId}/sharesList everyone a session is shared with read-only — both registered recipients and pending email invitations. Reports and systematic reviews can also have editors or reviewers added in the Elicit web app; those higher-permission collaborators are managed there and are not returned here. Only the session owner can list shares.
curl https://elicit.com/api/v2/sessions/{sessionId}/shares \
-H "Authorization: Bearer elk_live_your_key_here"
sessionId (required)string — Unique identifier for the session.
shares (required)array — Everyone the session is currently shared with — both registered recipients and pending email invitations.
email (required)string — Email address the session is shared with.
role (required)string — Access level of the share. Sessions are always shared read-only.
status (required)string, possible values: "registered", "invited" — "registered" when the recipient already has an Elicit account and can read the session now; "invited" when a pending invitation was created for an email without an account.
url (required)string — URL to view and continue the session in the Elicit web interface.
Example:
{
"sessionId": "",
"shares": [
{
"email": "colleague@example.com",
"status": "registered",
"role": "reader"
}
],
"url": ""
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)string — Error label. Always `Rate limit exceeded` for the burst limit.
message (required)string — Human-readable detail.
Example:
{
"error": "Rate limit exceeded",
"message": "Too many requests. Please try again later."
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}DELETE/sessions/{sessionId}/sharesRevoke a read-only share by email. Removes either an active share (for a registered recipient) or a pending invitation. Only the session owner can revoke shares.
The operation is idempotent: revoking an email that isn't currently shared returns revoked: false with 200 OK.
curl -X DELETE https://elicit.com/api/v2/sessions/{sessionId}/shares \
-H "Authorization: Bearer elk_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"email":"colleague@example.com"}'
email (required)string, format: email — Email address whose share (or pending invite) should be revoked.
Example:
{
"email": "colleague@example.com"
}email (required)string — Email address whose share was revoked.
revoked (required)boolean — Whether an existing share or pending invite was removed. False when there was nothing to revoke (the call is idempotent either way).
sessionId (required)string — Unique identifier for the session.
Example:
{
"sessionId": "",
"email": "",
"revoked": true
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)string — Error label. Always `Rate limit exceeded` for the burst limit.
message (required)string — Human-readable detail.
Example:
{
"error": "Rate limit exceeded",
"message": "Too many requests. Please try again later."
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}GET/usageReport the authenticated account's current usage against its plan.
Returns whether the account still has usage available (hasUsageRemaining), the percentage of plan usage consumed this billing period, the billing-period bounds, and — only when extra usage is enabled — the extra-usage spend and limit in USD cents.
curl https://elicit.com/api/v2/usage \
-H "Authorization: Bearer elk_live_your_key_here"
extraUsage (required)object — Extra-usage amount and limit in USD cents. Null when extra usage is not enabled.
hasUsageRemaining (required)boolean — Whether the account still has usage available this billing period. False once both the plan limit and (if enabled) the extra-usage limit are exhausted.
percentUsed (required)number — Percentage of plan usage consumed this billing period.
periodEnd (required)string — ISO 8601 end of the current billing period. Monthly usage limits reset at this time.
periodStart (required)string — ISO 8601 start of the current billing period.
Example:
{
"hasUsageRemaining": true,
"percentUsed": 1,
"periodStart": "",
"periodEnd": "",
"extraUsage": {
"limitUsdCents": null,
"spentUsdCents": 1
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}POST/filesStage a file so it can be attached to a Research Agent turn. This is a two-step, presigned upload:
file_id and a short-lived presigned upload_url.upload_url with the same Content-Type and a Content-Length matching size_bytes. Do not send an Authorization header on the PUT — the URL is already signed.Then pass { "file_id": "..." } in the attachments array of a create-session or send-message request. Attached files are made available to the agent exactly as uploads made in the web interface are.
The request/response fields for this endpoint are deliberately snake_case (content_type, size_bytes, file_id, upload_url, expires_at), unlike the camelCase used elsewhere in the v2 surface. Files are capped at 30 MB, and a session accepts a bounded number of attachments; the upload_url and file_id expire at expires_at.
This endpoint is in early access. It returns 404 not_found unless the Research Agent API has been enabled for the authenticated account or organization.
# 1. Register the upload
curl -X POST https://elicit.com/api/v2/files \
-H "Authorization: Bearer elk_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"filename":"trial-results.pdf","content_type":"application/pdf","size_bytes":245678}'
# 2. Upload the bytes to the returned upload_url
curl -X PUT "{upload_url}" \
-H "Content-Type: application/pdf" \
--data-binary @trial-results.pdf
# 3. Attach {"file_id": "..."} to a create-session or /messages request
content_type (required)string — MIME type of the file.
filename (required)string — Original filename of the upload. Used as the display name in the session.
size_bytes (required)integer — Exact size of the file in bytes. Must match the uploaded object exactly. Maximum 31457280 bytes (30 MB).
Example:
{
"filename": "trial-results.pdf",
"content_type": "application/pdf",
"size_bytes": 245678
}expires_at (required)string — ISO 8601 timestamp after which the upload URL and the staged file_id are no longer valid.
file_id (required)string — Opaque identifier for the staged upload. Pass it in the `attachments` array of a create-session or send-message request to attach the file to that turn.
upload_url (required)string — Short-lived presigned S3 PUT URL. Upload the file bytes directly to it with the same Content-Type and Content-Length declared here.
Example:
{
"file_id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
"upload_url": "",
"expires_at": "2026-07-23T15:00:00.000Z"
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)string — Error label. Always `Rate limit exceeded` for the burst limit.
message (required)string — Human-readable detail.
Example:
{
"error": "Rate limit exceeded",
"message": "Too many requests. Please try again later."
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}POST/sessions/agentsStart a stateful Research Agent session. Elicit investigates the query asynchronously, reports its activity as structured events, and may produce downloadable artifacts.
The response returns immediately with a sessionId. Use the events endpoint to follow the research, then send messages to refine or continue it. The session is also available at the returned url.
This endpoint is in early access. It returns 404 not_found unless the Research Agent API has been enabled for the authenticated account or organization.
A full research task may involve several requests against a single session. To drive it end to end:
file_id (see the Upload endpoint).query and any attachments. The response is immediate with status: "processing" and a sessionId.cursor unchanged on each subsequent poll to receive immutable event occurrences not observed at that checkpoint. Append them in response order and deduplicate retries by eventId. Poll every 3–10 seconds while the top-level status is processing.session_idle event appears and the top-level status returns to completed. For a Research Agent session, completed means idle and awaiting input — not that the session is permanently closed. Watch for these events along the way:
question — the agent needs input; answer it with a follow-up message.error — the agent encountered an error; retryable indicates whether resending is worthwhile.session_paused — the account hit its usage limit; the status becomes pausedForInsufficientQuota. Resolve the limit, then resume the session via POST /api/v2/sessions/:sessionId/resume (or the Elicit web interface) before continuing.attachments). Correlate the returned messageId with the matching user_message event, then return to step 3.artifacts (GET .../artifacts/:artifactId/download for a short-lived presigned download URL — treat it as a credential), and interactive outputs (tables, prose, presentations, figures) appear under deliveredOutputs (GET .../artifacts/:artifactId/content for their contents).session_stopped event.The list, detail, and events endpoints all report the same top-level status:
processing — the agent is working (or the session has not started yet).completed — idle and awaiting input; the latest work finished successfully.failed — the latest work ended with an error.pausedForInsufficientQuota — paused at the account usage limit; resume once the limit clears.unknown — status could not be determined (legacy sessions only).All errors return the standard { "error": { "code", "message" } } envelope.
# Minimal
curl -X POST https://elicit.com/api/v2/sessions/agents \
-H "Authorization: Bearer elk_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"query":"What are the effects of GLP-1 receptor agonists on cardiovascular outcomes?"}'
# With an uploaded file attached to the initial turn
curl -X POST https://elicit.com/api/v2/sessions/agents \
-H "Authorization: Bearer elk_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"query":"Summarize the attached trial and compare it to the current literature.","attachments":[{"file_id":"a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d"}]}'
query (required)string — The initial query for the research agent. Elicit creates a stateful research session that investigates the query. The session is continuable in the Elicit web interface.
attachmentsarray — Files to attach to this turn, each referencing a file_id from POST /api/v2/files. Attached files are made available to the research agent exactly as uploads made in the web interface are.
file_id (required)string, format: uuid — The file_id returned by POST /api/v2/files for a previously uploaded file.
Example:
{
"query": "What are the effects of GLP-1 receptor agonists on cardiovascular outcomes?",
"attachments": [
{
"file_id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d"
}
]
}sessionId (required)string — Unique identifier for the research agent session.
status (required)string — Initial status is always processing.
url (required)string — URL to view and continue the session in the Elicit web interface.
Example:
{
"sessionId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
"status": "processing",
"url": "https://elicit.com/agent/a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d"
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)string — Error label. Always `Rate limit exceeded` for the burst limit.
message (required)string — Human-readable detail.
Example:
{
"error": "Rate limit exceeded",
"message": "Too many requests. Please try again later."
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}GET/sessions/agents/{sessionId}Fetch the status and basic metadata of a research-agent session — the typed detail endpoint that an agent item's links.self in GET /api/v2/sessions points to.
links.resume URL (or the Elicit web interface).No event payload is returned here; use the session's events endpoint for the reduced activity stream.
curl https://elicit.com/api/v2/sessions/agents/{sessionId} \
-H "Authorization: Bearer elk_live_your_key_here"
createdAt (required)string — ISO 8601 timestamp of when the session was created.
isPublic (required)boolean — Whether the session is publicly accessible via its URL without authentication.
links (required)object
self (required)string — API URL for this session's full status and results (the typed get endpoint for its type)
resumestring — API URL to resume this session. Present only while the session is paused for insufficient quota.
sessionId (required)string, format: uuid — The session ID (UUID) returned by the create endpoints and `GET /sessions`
source (required)string, possible values: "user", "api", "mcp", "agent_session" — How the session was created.
status (required)string, possible values: "processing", "pausedForInsufficientQuota", "completed", "failed", "unknown" — Current status of the session: "processing" (running, or not yet started), "completed" (idle and awaiting input — not terminally finished), "failed" (the last turn ended with an error), or "pausedForInsufficientQuota" (paused at the account usage limit; resume once the limit clears).
title (required)string — Human-readable title of the session.
type (required)string — Discriminator identifying this as a research-agent session.
url (required)string — URL to view and continue the session in the Elicit web interface.
Example:
{
"type": "agent",
"sessionId": "5ad08bfb-cbe0-4911-a8c3-309760d33029",
"status": "processing",
"title": "",
"url": "",
"source": "api",
"createdAt": "2025-06-15T14:30:00.000Z",
"isPublic": true,
"links": {
"self": "https://elicit.com/api/v2/sessions/reports/5ad08bfb-cbe0-4911-a8c3-309760d33029",
"resume": "https://elicit.com/api/v2/sessions/5ad08bfb-cbe0-4911-a8c3-309760d33029/resume"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)string — Error label. Always `Rate limit exceeded` for the burst limit.
message (required)string — Human-readable detail.
Example:
{
"error": "Rate limit exceeded",
"message": "Too many requests. Please try again later."
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}GET/sessions/agents/{sessionId}/eventsGet a reduced view of a Research Agent session's activity.
Streaming text, thinking, and tool-input deltas are collapsed into complete typed entries. With no cursor, the response contains the full reduced history. Pass the returned cursor unchanged on the next poll to receive immutable event occurrences not observed at that checkpoint.
The public event kinds are user_message, agent_message, question, activity, artifacts_delivered, delivered_outputs, error, session_idle, session_paused, session_resumed, stop_requested, and session_stopped. Internal tool names, sandbox paths, raw tool results, and candidate counters are never returned.
Every event includes a stable eventId and an ISO 8601 createdAt timestamp when available. Events are immutable and append-only. A resource can have several snapshots: for example, an activity may first be started and later completed. Those occurrences share an activityId but have distinct eventId values. Append incremental responses in response order and deduplicate retries by eventId.
The top-level status has exactly the same meaning and value as the list and detail endpoints. Lifecycle facts that are not part of the shared session status vocabulary are represented by explicit events: the agent becomes ready for more input with session_idle, a stop completes with session_stopped, and pause/resume use session_paused/session_resumed.
# Full history
curl https://elicit.com/api/v2/sessions/agents/{sessionId}/events \
-H "Authorization: Bearer elk_live_your_key_here"
# Only event occurrences not observed at the cursor checkpoint
curl "https://elicit.com/api/v2/sessions/agents/{sessionId}/events?cursor={cursor}" \
-H "Authorization: Bearer elk_live_your_key_here"
Poll every 3–10 seconds while status is processing. The agent is ready for another request when a session_idle event appears and the status returns to completed (idle, awaiting input). A question event indicates that the agent needs input. A session_stopped event confirms that a stop request was processed. If a cursor is rejected, refetch once without a cursor and rebuild local event state.
cursor (required)string — Opaque session-bound checkpoint. Always present. Pass it unchanged as the `cursor` query param on the next poll to receive later event occurrences.
events (required)array — Append-only view of the session's activity. Streaming deltas are collapsed into immutable resource snapshots; raw stream events are never returned. Later snapshots retain the same resource ID and receive a new eventId. With no cursor this is the full history; with a cursor it contains only later occurrences.
createdAt (required)string | null — ISO 8601 timestamp for the event. Null for historical events without one.
eventId (required)string — Stable opaque identifier for this immutable public event occurrence.
isInitial (required)boolean
kind (required)string
messageId (required)string
text (required)string
citations (required)array
citationId (required)string — Identifier for this citation within the agent message.
quote (required)string — The passage from the source that supports the message.
source (required)object
authors (required)array — Authors of the cited work, in display order.
string
doi (required)string | null — Digital Object Identifier (DOI), when available.
title (required)string | null — Title of the cited work.
url (required)string | null — Best available URL for the cited work.
venue (required)string | null — Journal, conference, repository, or other publication venue.
year (required)integer | null — Publication year.
createdAt (required)string | null — ISO 8601 timestamp for the event. Null for historical events without one.
eventId (required)string — Stable opaque identifier for this immutable public event occurrence.
kind (required)string
messageId (required)string
suggestedFollowUps (required)array
string
text (required)string
createdAt (required)string | null — ISO 8601 timestamp for the event. Null for historical events without one.
eventId (required)string — Stable opaque identifier for this immutable public event occurrence.
kind (required)string
options (required)array | null
prefilledText (required)string | null
questionId (required)string
responseFormat (required)string, possible values: "text", "single_select", "multi_select"
text (required)string
activityId (required)string
createdAt (required)string | null — ISO 8601 timestamp for the event. Null for historical events without one.
eventId (required)string — Stable opaque identifier for this immutable public event occurrence.
kind (required)string
status (required)string, possible values: "started", "completed", "failed"
summary (required)string | null
title (required)string
artifacts (required)array
artifactId (required)string — Opaque identifier for the artifact, stable within a session. Pass it to the download endpoint to retrieve the file. Never a raw storage key.
contentType (required)string | null — MIME type of the artifact, when known.
createdAt (required)string | null — ISO 8601 timestamp of when the artifact was produced, when known.
filename (required)string — Suggested filename for the downloaded artifact.
format (required)string | null — Subtype within the artifact (e.g. "pdf", "docx", "pptx"). For agent files it is the filename extension; null only when the filename has no extension.
kind (required)string, possible values: "agent-saved-file", "agent-delivered-file", "prose-export", "presentation-export", "figure-export", "report-asset", "report-citation" — The kind of artifact produced in the session. A delivered file lists once as "agent-delivered-file"; "agent-saved-file" denotes a file the agent saved to its workspace but did not deliver.
sizeBytes (required)number | null — Size of the artifact in bytes, when known.
createdAt (required)string | null — ISO 8601 timestamp for the event. Null for historical events without one.
eventId (required)string — Stable opaque identifier for this immutable public event occurrence.
kind (required)string
createdAt (required)string | null — ISO 8601 timestamp for the event. Null for historical events without one.
deliveredOutputs (required)array — Artifacts delivered by this source-history occurrence. This is an immutable metadata snapshot; query the artifacts resource for currently supported download formats.
artifactId (required)string — Opaque identifier for the interactive artifact, stable within a session. Pass it to the artifact content endpoint to retrieve its contents. Never a raw storage key or entity hash.
caption (required)string | null — Optional caption describing the artifact.
createdAt (required)string | null — ISO 8601 timestamp of when the artifact was delivered, when known.
kind (required)string, possible values: "table", "prose", "presentation", "figure" — The kind of interactive artifact: table, prose, presentation, or figure.
rowCount (required)integer | null — Number of rows for a table artifact; null for non-table kinds.
title (required)string — Human-readable title of the artifact.
eventId (required)string — Stable opaque identifier for this immutable public event occurrence.
kind (required)string
code (required)string, possible values: "agent_timed_out", "agent_api_error", "agent_failed"
createdAt (required)string | null — ISO 8601 timestamp for the event. Null for historical events without one.
eventId (required)string — Stable opaque identifier for this immutable public event occurrence.
kind (required)string
message (required)string
retryable (required)boolean
createdAt (required)string | null — ISO 8601 timestamp for the event. Null for historical events without one.
eventId (required)string — Stable opaque identifier for this immutable public event occurrence.
kind (required)string
createdAt (required)string | null — ISO 8601 timestamp for the event. Null for historical events without one.
eventId (required)string — Stable opaque identifier for this immutable public event occurrence.
kind (required)string
createdAt (required)string | null — ISO 8601 timestamp for the event. Null for historical events without one.
eventId (required)string — Stable opaque identifier for this immutable public event occurrence.
kind (required)string
createdAt (required)string | null — ISO 8601 timestamp for the event. Null for historical events without one.
eventId (required)string — Stable opaque identifier for this immutable public event occurrence.
kind (required)string
createdAt (required)string | null — ISO 8601 timestamp for the event. Null for historical events without one.
eventId (required)string — Stable opaque identifier for this immutable public event occurrence.
kind (required)string
sessionId (required)string — Unique identifier for the research agent session.
status (required)string, possible values: "processing", "pausedForInsufficientQuota", "completed", "failed", "unknown" — Current status of the session. Uses exactly the same value and semantics as the list and detail endpoints.
url (required)string — URL to view and continue the session in the Elicit web interface.
Example:
{
"sessionId": "",
"status": "processing",
"events": [
{
"eventId": "",
"createdAt": null,
"kind": "user_message",
"messageId": "",
"text": "",
"isInitial": true
}
],
"cursor": "",
"url": ""
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)string — Error label. Always `Rate limit exceeded` for the burst limit.
message (required)string — Human-readable detail.
Example:
{
"error": "Rate limit exceeded",
"message": "Too many requests. Please try again later."
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}POST/sessions/agents/{sessionId}/messagesInsert a follow-up message and start another asynchronous turn. Use messages to refine a result, answer the agent, redirect the research, or request another artifact.
The response includes a messageId. The corresponding user_message event carries the same value, allowing the client to confirm delivery.
Attach previously uploaded files by including their file_ids in the attachments array (see the Upload endpoint).
If the session is paused for insufficient quota, resolve the usage limit and resume it via POST /api/v2/sessions/:sessionId/resume (or the Elicit web interface) before sending another message.
curl -X POST https://elicit.com/api/v2/sessions/agents/{sessionId}/messages \
-H "Authorization: Bearer elk_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"message":"Focus on randomized controlled trials only."}'
message (required)string — The message to insert into the running research agent session.
attachmentsarray — Files to attach to this turn, each referencing a file_id from POST /api/v2/files. Attached files are made available to the research agent exactly as uploads made in the web interface are.
file_id (required)string, format: uuid — The file_id returned by POST /api/v2/files for a previously uploaded file.
Example:
{
"message": "Focus on randomized controlled trials only.",
"attachments": [
{
"file_id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d"
}
]
}messageId (required)string — Identifier of the inserted message. Correlate it with the messageId on the matching user_message event.
sessionId (required)string — Unique identifier for the research agent session.
status (required)string — The session is processing the inserted message.
url (required)string — URL to view and continue the session in the Elicit web interface.
Example:
{
"sessionId": "",
"status": "processing",
"messageId": "",
"url": ""
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)string — Error label. Always `Rate limit exceeded` for the burst limit.
message (required)string — Human-readable detail.
Example:
{
"error": "Rate limit exceeded",
"message": "Too many requests. Please try again later."
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}POST/sessions/agents/{sessionId}/stopRequest an asynchronous interrupt using the same stop action as the Elicit web interface.
Stopping does not delete or permanently close the session. The session remains visible and may be continued later. When the response status is stopping, poll the events endpoint until a session_stopped event appears.
The operation is idempotent. If the session is already stopped or failed, it returns the existing state with 200 OK.
curl -X POST https://elicit.com/api/v2/sessions/agents/{sessionId}/stop \
-H "Authorization: Bearer elk_live_your_key_here"
sessionId (required)string — Unique identifier for the research agent session.
status (required)string, possible values: "stopping", "stopped", "failed" — "stopping" when a stop was queued (the session halts asynchronously; poll the events endpoint for the session_stopped event). "stopped" or "failed" when the session had already ended and no stop was needed.
url (required)string — URL to view and continue the session in the Elicit web interface.
Example:
{
"sessionId": "",
"status": "stopping",
"url": ""
}sessionId (required)string — Unique identifier for the research agent session.
status (required)string, possible values: "stopping", "stopped", "failed" — "stopping" when a stop was queued (the session halts asynchronously; poll the events endpoint for the session_stopped event). "stopped" or "failed" when the session had already ended and no stop was needed.
url (required)string — URL to view and continue the session in the Elicit web interface.
Example:
{
"sessionId": "",
"status": "stopping",
"url": ""
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)string — Error label. Always `Rate limit exceeded` for the burst limit.
message (required)string — Human-readable detail.
Example:
{
"error": "Rate limit exceeded",
"message": "Too many requests. Please try again later."
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}GET/sessions/agents/{sessionId}/artifactsList files and interactive outputs produced in a Research Agent session.
File-backed artifacts are listed under artifacts. Only the latest version of each is listed. A delivered file appears once as agent-delivered-file; agent-saved-file denotes a workspace file that the agent saved but did not deliver.
Interactive outputs delivered as session outputs (tables, prose, presentations, figures) are listed under deliveredOutputs; retrieve their contents from the artifact content endpoint.
Use the opaque, session-scoped artifactId with the download endpoint (for artifacts) or the content endpoint (for deliveredOutputs). Do not construct or decode artifact IDs.
curl https://elicit.com/api/v2/sessions/agents/{sessionId}/artifacts \
-H "Authorization: Bearer elk_live_your_key_here"
artifacts (required)array — File-backed artifacts produced in the session. Only the latest version of each artifact is listed. Retrieve contents via the download endpoint.
artifactId (required)string — Opaque identifier for the artifact, stable within a session. Pass it to the download endpoint to retrieve the file. Never a raw storage key.
contentType (required)string | null — MIME type of the artifact, when known.
createdAt (required)string | null — ISO 8601 timestamp of when the artifact was produced, when known.
filename (required)string — Suggested filename for the downloaded artifact.
format (required)string | null — Subtype within the artifact (e.g. "pdf", "docx", "pptx"). For agent files it is the filename extension; null only when the filename has no extension.
kind (required)string, possible values: "agent-saved-file", "agent-delivered-file", "prose-export", "presentation-export", "figure-export", "report-asset", "report-citation" — The kind of artifact produced in the session. A delivered file lists once as "agent-delivered-file"; "agent-saved-file" denotes a file the agent saved to its workspace but did not deliver.
sizeBytes (required)number | null — Size of the artifact in bytes, when known.
deliveredOutputs (required)array — Interactive outputs (tables, prose, presentations, figures) delivered as session outputs. Only the latest delivery of each is listed. Retrieve contents via the artifact content endpoint.
artifactId (required)string — Opaque identifier for the interactive artifact, stable within a session. Pass it to the artifact content endpoint to retrieve its contents. Never a raw storage key or entity hash.
caption (required)string | null — Optional caption describing the artifact.
createdAt (required)string | null — ISO 8601 timestamp of when the artifact was delivered, when known.
downloadFormats (required)array — File formats this artifact can be downloaded as from the content endpoint via ?format=<fmt> (tables: csv/xlsx; prose: md; empty for other kinds). The JSON body is returned when no format is given.
string, possible values: "csv", "xlsx", "md"
kind (required)string, possible values: "table", "prose", "presentation", "figure" — The kind of interactive artifact: table, prose, presentation, or figure.
rowCount (required)integer | null — Number of rows for a table artifact; null for non-table kinds.
title (required)string — Human-readable title of the artifact.
sessionId (required)string — Unique identifier for the research agent session.
url (required)string — URL to view and continue the session in the Elicit web interface.
Example:
{
"sessionId": "",
"artifacts": [
{
"artifactId": "",
"kind": "agent-saved-file",
"format": null,
"filename": "",
"contentType": null,
"sizeBytes": null,
"createdAt": "2025-06-15T14:30:00.000Z"
}
],
"deliveredOutputs": [
{
"artifactId": "",
"kind": "table",
"title": "",
"caption": null,
"rowCount": null,
"createdAt": "2025-06-15T14:30:00.000Z",
"downloadFormats": [
"csv"
]
}
],
"url": ""
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)string — Error label. Always `Rate limit exceeded` for the burst limit.
message (required)string — Human-readable detail.
Example:
{
"error": "Rate limit exceeded",
"message": "Too many requests. Please try again later."
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}GET/sessions/agents/{sessionId}/artifacts/{artifactId}/downloadCreate a short-lived presigned URL for an artifact returned by the list-artifacts endpoint.
The URL expires after 30 minutes. Call this endpoint again to issue a fresh URL. Treat the URL as a credential while it is valid: do not log it or store it as a permanent share link.
curl https://elicit.com/api/v2/sessions/agents/{sessionId}/artifacts/{artifactId}/download \
-H "Authorization: Bearer elk_live_your_key_here"
contentType (required)string | null — MIME type of the artifact, when known.
downloadUrl (required)string — Short-lived presigned URL to download the artifact contents.
expiresAt (required)string — ISO 8601 timestamp after which the download URL is no longer valid.
filename (required)string — Suggested filename for the downloaded artifact.
Example:
{
"downloadUrl": "",
"expiresAt": "2025-06-15T15:00:00.000Z",
"filename": "",
"contentType": null
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)string — Error label. Always `Rate limit exceeded` for the burst limit.
message (required)string — Human-readable detail.
Example:
{
"error": "Rate limit exceeded",
"message": "Too many requests. Please try again later."
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}GET/sessions/agents/{sessionId}/artifacts/{artifactId}/contentMaterialize the contents of an interactive artifact listed under deliveredOutputs on the list-artifacts endpoint.
The response is structured JSON discriminated on kind: tables carry columns and rows; prose and figures carry supported content (cleaned text, the original markdown, and resolved citations); presentations carry slides. The default format is json (omitting the parameter is equivalent to ?format=json). Tables can also be downloaded with ?format=csv or ?format=xlsx, and prose with ?format=md. File responses are served with Content-Disposition: attachment, not as JSON. Unsupported kind/format combinations return 400 download_not_available.
# Structured JSON
curl https://elicit.com/api/v2/sessions/agents/{sessionId}/artifacts/{artifactId}/content \
-H "Authorization: Bearer elk_live_your_key_here"
# Table as CSV
curl "https://elicit.com/api/v2/sessions/agents/{sessionId}/artifacts/{artifactId}/content?format=csv" \
-H "Authorization: Bearer elk_live_your_key_here" \
-O -J
# Prose as portable Markdown
curl "https://elicit.com/api/v2/sessions/agents/{sessionId}/artifacts/{artifactId}/content?format=md" \
-H "Authorization: Bearer elk_live_your_key_here" \
-O -J
artifactId (required)string — Opaque identifier for the interactive artifact, echoing the request. Can also be re-requested with ?format=<fmt> to download as a file (tables: csv/xlsx, prose: md).
caption (required)string | null — Optional caption describing the artifact.
columns (required)array — Ordered column keys for the table, in first-seen order across the rows.
string
kind (required)string
rows (required)array — Table rows, each a mapping from column key to cell.
title (required)string — Human-readable title of the artifact.
url (required)string — URL to view and continue the session in the Elicit web interface.
artifactId (required)string — Opaque identifier for the interactive artifact, echoing the request. Can also be re-requested with ?format=<fmt> to download as a file (tables: csv/xlsx, prose: md).
caption (required)string | null — Optional caption describing the artifact.
content (required)object
citations (required)array — Citations backing this content, resolved to the same shape as message citations.
citationId (required)string — Identifier for this citation within the agent message.
quote (required)string — The passage from the source that supports the message.
source (required)object
authors (required)array — Authors of the cited work, in display order.
string
doi (required)string | null — Digital Object Identifier (DOI), when available.
title (required)string | null — Title of the cited work.
url (required)string | null — Best available URL for the cited work.
venue (required)string | null — Journal, conference, repository, or other publication venue.
year (required)integer | null — Publication year.
markdown (required)string — The original markdown content, including inline citation markup.
text (required)string — Human-readable content with inline citation markup removed.
kind (required)string
title (required)string — Human-readable title of the artifact.
url (required)string — URL to view and continue the session in the Elicit web interface.
artifactId (required)string — Opaque identifier for the interactive artifact, echoing the request. Can also be re-requested with ?format=<fmt> to download as a file (tables: csv/xlsx, prose: md).
caption (required)string | null — Optional caption describing the artifact.
kind (required)string
slides (required)array — Ordered slides, each with a title and supported content.
content (required)object
citations (required)array — Citations backing this content, resolved to the same shape as message citations.
citationId (required)string — Identifier for this citation within the agent message.
quote (required)string — The passage from the source that supports the message.
source (required)object
authors (required)array — Authors of the cited work, in display order.
string
doi (required)string | null — Digital Object Identifier (DOI), when available.
title (required)string | null — Title of the cited work.
url (required)string | null — Best available URL for the cited work.
venue (required)string | null — Journal, conference, repository, or other publication venue.
year (required)integer | null — Publication year.
markdown (required)string — The original markdown content, including inline citation markup.
text (required)string — Human-readable content with inline citation markup removed.
speakerNotes (required)string | null — Speaker notes, when present.
title (required)string — Slide title.
title (required)string — Human-readable title of the artifact.
url (required)string — URL to view and continue the session in the Elicit web interface.
artifactId (required)string — Opaque identifier for the interactive artifact, echoing the request. Can also be re-requested with ?format=<fmt> to download as a file (tables: csv/xlsx, prose: md).
caption (required)string | null — Optional caption describing the artifact.
description (required)object
citations (required)array — Citations backing this content, resolved to the same shape as message citations.
citationId (required)string — Identifier for this citation within the agent message.
quote (required)string — The passage from the source that supports the message.
source (required)object
authors (required)array — Authors of the cited work, in display order.
string
doi (required)string | null — Digital Object Identifier (DOI), when available.
title (required)string | null — Title of the cited work.
url (required)string | null — Best available URL for the cited work.
venue (required)string | null — Journal, conference, repository, or other publication venue.
year (required)integer | null — Publication year.
markdown (required)string — The original markdown content, including inline citation markup.
text (required)string — Human-readable content with inline citation markup removed.
kind (required)string
renderer (required)string | null — Figure renderer, when known.
spec (required)string | null — Figure spec, when known.
title (required)string — Human-readable title of the artifact.
url (required)string — URL to view and continue the session in the Elicit web interface.
Example:
{
"artifactId": "",
"title": "",
"caption": null,
"url": "",
"kind": "table",
"columns": [
""
],
"rows": [
{
"additionalProperty": {
"text": null,
"citations": [
{
"citationId": "",
"quote": "",
"source": {
"title": null,
"authors": [
""
],
"year": null,
"doi": null,
"url": null,
"venue": null
}
}
],
"source": {
"title": null,
"authors": [
""
],
"year": null,
"doi": null,
"url": null,
"venue": null
}
}
}
]
}string, format: binary
Example:
{}string, format: binary
Example:
<?xml version="1.0" encoding="UTF-8"?>string, format: binary
Example:
{}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}error (required)string — Error label. Always `Rate limit exceeded` for the burst limit.
message (required)string — Human-readable detail.
Example:
{
"error": "Rate limit exceeded",
"message": "Too many requests. Please try again later."
}error (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}objectquery (required)string — The search query string
corpusstring, possible values: "elicit", "pubmed", default: "elicit" — Paper corpus to search. `elicit` (default) searches Elicit's full paper index; `pubmed` restricts to PubMed.
filtersobject — Filters to narrow search results
excludeKeywordsarray — Keywords to exclude from results
string
hasPdfboolean — Only include papers with available PDFs
includeKeywordsarray — Keywords that must appear in the paper
string
maxEpochSinteger — Maximum publication date as Unix epoch seconds
maxQuartileinteger — Maximum journal quartile (1 = top 25%)
maxYearinteger — Maximum publication year
minEpochSinteger — Minimum publication date as Unix epoch seconds
minYearinteger — Minimum publication year
pubmedOnlyboolean — Only include papers from PubMed
retractedstring, possible values: "exclude_retracted", "include_retracted", "only_retracted" — How to handle retracted papers. Defaults to exclude_retracted.
typeTagsarray — Filter by study type
string, possible values: "Review", "Meta-Analysis", "Systematic Review", "RCT", "Longitudinal"
maxResultsinteger, default: 10 — Maximum number of results to return (1-10000)
searchModestring, possible values: "semantic", "keyword", default: "semantic" — How to interpret `query`. `semantic` (default) runs Elicit's semantic search. `keyword` sends the query as a Lucene-style boolean expression directly to the corpus search API. Mutually exclusive with `filters` / `trialFilters` — put filter expressions into the query string in keyword mode.
Example:
{
"query": "GLP-1 receptor agonists for weight loss",
"searchMode": "semantic",
"maxResults": 10,
"corpus": "elicit",
"filters": {
"minYear": 2020,
"maxYear": 2025,
"minEpochS": 1672531200,
"maxEpochS": 1785979765,
"maxQuartile": 2,
"includeKeywords": [
"semaglutide",
"liraglutide"
],
"excludeKeywords": [
"rodent",
"mouse model"
],
"typeTags": [
"RCT",
"Meta-Analysis"
],
"hasPdf": false,
"pubmedOnly": false,
"retracted": "exclude_retracted"
}
}objectexcludeKeywordsarray — Keywords to exclude from results
string
hasPdfboolean — Only include papers with available PDFs
includeKeywordsarray — Keywords that must appear in the paper
string
maxEpochSinteger — Maximum publication date as Unix epoch seconds
maxQuartileinteger — Maximum journal quartile (1 = top 25%)
maxYearinteger — Maximum publication year
minEpochSinteger — Minimum publication date as Unix epoch seconds
minYearinteger — Minimum publication year
pubmedOnlyboolean — Only include papers from PubMed
retractedstring, possible values: "exclude_retracted", "include_retracted", "only_retracted" — How to handle retracted papers. Defaults to exclude_retracted.
typeTagsarray — Filter by study type
string, possible values: "Review", "Meta-Analysis", "Systematic Review", "RCT", "Longitudinal"
Example:
{
"minYear": 2020,
"maxYear": 2025,
"minEpochS": 1672531200,
"maxEpochS": 1785979765,
"maxQuartile": 2,
"includeKeywords": [
"semaglutide",
"liraglutide"
],
"excludeKeywords": [
"rodent",
"mouse model"
],
"typeTags": [
"RCT",
"Meta-Analysis"
],
"hasPdf": false,
"pubmedOnly": false,
"retracted": "exclude_retracted"
}objectpapers (required)array — Papers matching the query
abstract (required)string | null — Paper abstract
authors (required)array — List of author names
string
citedByCount (required)integer | null — Number of citations this paper has received
doi (required)string | null — Digital Object Identifier
elicitId (required)string | null — Elicit internal paper identifier
pmid (required)string | null — PubMed identifier
title (required)string — Paper title
urls (required)array — URLs for the paper
string
venue (required)string | null — Publication venue
year (required)integer | null — Publication year
warningsarray — Non-fatal warnings emitted while executing the search (e.g. phrases ignored by the PubMed parser).
corpus (required)string, possible values: "elicit", "pubmed", "clinical_trials" — Corpus that emitted the warning
message (required)string — Human-readable warning message
searchMode (required)string, possible values: "semantic", "keyword" — Search mode in effect when the warning was emitted
warningDetails (required)object
messages (required)array — Underlying warning messages
string
type (required)string — Warning category
Example:
{
"papers": [
{
"elicitId": null,
"title": "",
"authors": [
""
],
"year": null,
"abstract": null,
"doi": null,
"pmid": null,
"venue": null,
"citedByCount": null,
"urls": [
""
]
}
],
"warnings": [
{
"corpus": "elicit",
"searchMode": "semantic",
"message": "",
"warningDetails": {
"type": "",
"messages": [
""
]
}
}
]
}objectabstract (required)string | null — Paper abstract
authors (required)array — List of author names
string
citedByCount (required)integer | null — Number of citations this paper has received
doi (required)string | null — Digital Object Identifier
elicitId (required)string | null — Elicit internal paper identifier
pmid (required)string | null — PubMed identifier
title (required)string — Paper title
urls (required)array — URLs for the paper
string
venue (required)string | null — Publication venue
year (required)integer | null — Publication year
Example:
{
"elicitId": null,
"title": "",
"authors": [
""
],
"year": null,
"abstract": null,
"doi": null,
"pmid": null,
"venue": null,
"citedByCount": null,
"urls": [
""
]
}objectcorpus (required)string, possible values: "elicit", "pubmed", "clinical_trials" — Corpus that emitted the warning
message (required)string — Human-readable warning message
searchMode (required)string, possible values: "semantic", "keyword" — Search mode in effect when the warning was emitted
warningDetails (required)object
messages (required)array — Underlying warning messages
string
type (required)string — Warning category
Example:
{
"corpus": "elicit",
"searchMode": "semantic",
"message": "",
"warningDetails": {
"type": "",
"messages": [
""
]
}
}objectmessages (required)array — Underlying warning messages
string
type (required)string — Warning category
Example:
{
"type": "",
"messages": [
""
]
}objecterror (required)object
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"error": {
"code": "invalid_request",
"message": "Invalid search request"
}
}objecterror (required)string — Error label. Always `Rate limit exceeded` for the burst limit.
message (required)string — Human-readable detail.
Example:
{
"error": "Rate limit exceeded",
"message": "Too many requests. Please try again later."
}objectquery (required)string — The search query string
maxResultsinteger, default: 10 — Maximum number of results to return (1-10000)
searchModestring, possible values: "semantic", "keyword", default: "semantic" — How to interpret `query`. `semantic` (default) runs Elicit's semantic search. `keyword` sends the query as a Lucene-style boolean expression directly to the corpus search API. Mutually exclusive with `filters` / `trialFilters` — put filter expressions into the query string in keyword mode.
trialFiltersobject — Clinical-trials filters (phase, recruitment status, results)
hasResultsboolean — Only include trials that have posted results
phasearray — Clinical trial phases to include
string, possible values: "NA", "EARLY_PHASE1", "PHASE1", "PHASE2", "PHASE3", "PHASE4"
recruitmentStatusarray — Trial recruitment statuses to include
string, possible values: "ACTIVE_NOT_RECRUITING", "COMPLETED", "ENROLLING_BY_INVITATION", "NOT_YET_RECRUITING", "RECRUITING", "SUSPENDED", "TERMINATED", "WITHDRAWN", "AVAILABLE"
Example:
{
"query": "GLP-1 receptor agonists for weight loss",
"searchMode": "semantic",
"maxResults": 10,
"trialFilters": {
"phase": [
"PHASE2",
"PHASE3"
],
"recruitmentStatus": [
"RECRUITING",
"ACTIVE_NOT_RECRUITING"
],
"hasResults": true
}
}objecthasResultsboolean — Only include trials that have posted results
phasearray — Clinical trial phases to include
string, possible values: "NA", "EARLY_PHASE1", "PHASE1", "PHASE2", "PHASE3", "PHASE4"
recruitmentStatusarray — Trial recruitment statuses to include
string, possible values: "ACTIVE_NOT_RECRUITING", "COMPLETED", "ENROLLING_BY_INVITATION", "NOT_YET_RECRUITING", "RECRUITING", "SUSPENDED", "TERMINATED", "WITHDRAWN", "AVAILABLE"
Example:
{
"phase": [
"PHASE2",
"PHASE3"
],
"recruitmentStatus": [
"RECRUITING",
"ACTIVE_NOT_RECRUITING"
],
"hasResults": true
}objecttrials (required)array — Clinical trials matching the query
completionDate (required)string | null — Completion date (ISO `YYYY-MM-DD` or partial).
conditions (required)array — Conditions / diseases being studied.
string
enrollmentCount (required)integer | null — Actual or anticipated enrollment count.
hasResults (required)boolean | null — Whether the trial has posted results.
interventions (required)array — Intervention names.
string
lastUpdatedYear (required)integer | null — Year the trial record was last updated.
leadSponsor (required)string | null — Lead sponsor name.
nctId (required)string — NCT identifier for the trial
overallStatus (required)string | null — Overall recruitment status (RECRUITING, COMPLETED, TERMINATED, etc.). Null when the trial has no status posted.
phase (required)array — Trial phases (may list multiple, e.g. PHASE2 + PHASE3). Empty for N/A.
string
primaryCompletionDate (required)string | null — Primary completion date (ISO `YYYY-MM-DD` or partial).
startDate (required)string | null — Trial start date (ISO `YYYY-MM-DD` or partial).
studyType (required)string | null — Study type (INTERVENTIONAL, OBSERVATIONAL, EXPANDED_ACCESS).
summary (required)string | null — Plain-text trial description / brief summary
title (required)string — Trial title
url (required)string — Link to the trial's public record
warningsarray — Non-fatal warnings emitted while executing the search.
corpus (required)string, possible values: "elicit", "pubmed", "clinical_trials" — Corpus that emitted the warning
message (required)string — Human-readable warning message
searchMode (required)string, possible values: "semantic", "keyword" — Search mode in effect when the warning was emitted
warningDetails (required)object
messages (required)array — Underlying warning messages
string
type (required)string — Warning category
Example:
{
"trials": [
{
"nctId": "NCT05646706",
"title": "",
"summary": null,
"url": "https://clinicaltrials.gov/study/NCT05646706",
"overallStatus": null,
"phase": [
""
],
"studyType": null,
"enrollmentCount": null,
"conditions": [
""
],
"interventions": [
""
],
"leadSponsor": null,
"startDate": null,
"primaryCompletionDate": null,
"completionDate": null,
"hasResults": null,
"lastUpdatedYear": null
}
],
"warnings": [
{
"corpus": "elicit",
"searchMode": "semantic",
"message": "",
"warningDetails": {
"type": "",
"messages": [
""
]
}
}
]
}objectcompletionDate (required)string | null — Completion date (ISO `YYYY-MM-DD` or partial).
conditions (required)array — Conditions / diseases being studied.
string
enrollmentCount (required)integer | null — Actual or anticipated enrollment count.
hasResults (required)boolean | null — Whether the trial has posted results.
interventions (required)array — Intervention names.
string
lastUpdatedYear (required)integer | null — Year the trial record was last updated.
leadSponsor (required)string | null — Lead sponsor name.
nctId (required)string — NCT identifier for the trial
overallStatus (required)string | null — Overall recruitment status (RECRUITING, COMPLETED, TERMINATED, etc.). Null when the trial has no status posted.
phase (required)array — Trial phases (may list multiple, e.g. PHASE2 + PHASE3). Empty for N/A.
string
primaryCompletionDate (required)string | null — Primary completion date (ISO `YYYY-MM-DD` or partial).
startDate (required)string | null — Trial start date (ISO `YYYY-MM-DD` or partial).
studyType (required)string | null — Study type (INTERVENTIONAL, OBSERVATIONAL, EXPANDED_ACCESS).
summary (required)string | null — Plain-text trial description / brief summary
title (required)string — Trial title
url (required)string — Link to the trial's public record
Example:
{
"nctId": "NCT05646706",
"title": "",
"summary": null,
"url": "https://clinicaltrials.gov/study/NCT05646706",
"overallStatus": null,
"phase": [
""
],
"studyType": null,
"enrollmentCount": null,
"conditions": [
""
],
"interventions": [
""
],
"leadSponsor": null,
"startDate": null,
"primaryCompletionDate": null,
"completionDate": null,
"hasResults": null,
"lastUpdatedYear": null
}objectisPublic (required)boolean — Whether the report is publicly accessible via its URL without authentication
links (required)object
self (required)string — API URL for this session's full status and results (the typed get endpoint for its type)
resumestring — API URL to resume this session. Present only while the session is paused for insufficient quota.
sessionId (required)string, format: uuid — The session ID (UUID) returned by the create endpoints and `GET /sessions`
status (required)string — Initial status is always processing
type (required)string
url (required)string — URL to view the report in the Elicit web interface as it progresses
Example:
{
"type": "report",
"sessionId": "5ad08bfb-cbe0-4911-a8c3-309760d33029",
"status": "processing",
"url": "https://elicit.com/review/5ad08bfb-cbe0-4911-a8c3-309760d33029",
"isPublic": false,
"links": {
"self": "https://elicit.com/api/v2/sessions/reports/5ad08bfb-cbe0-4911-a8c3-309760d33029",
"resume": "https://elicit.com/api/v2/sessions/5ad08bfb-cbe0-4911-a8c3-309760d33029/resume"
}
}objectself (required)string — API URL for this session's full status and results (the typed get endpoint for its type)
resumestring — API URL to resume this session. Present only while the session is paused for insufficient quota.
Example:
{
"self": "https://elicit.com/api/v2/sessions/reports/5ad08bfb-cbe0-4911-a8c3-309760d33029",
"resume": "https://elicit.com/api/v2/sessions/5ad08bfb-cbe0-4911-a8c3-309760d33029/resume"
}objectexecutionStage (required)string | null, possible values: "gathering_sources", "screening_abstract", "screening_fulltext", "extracting_data", "generating_report", "done", null — Current pipeline stage. Advances through gathering_sources → screening_abstract → extracting_data → generating_report → done. Null for reports created before this field was introduced or when the stage isn't known.
isPublic (required)boolean — Whether the report is publicly accessible via its URL without authentication
links (required)object
self (required)string — API URL for this session's full status and results (the typed get endpoint for its type)
resumestring — API URL to resume this session. Present only while the session is paused for insufficient quota.
sessionId (required)string, format: uuid — The session ID (UUID) returned by the create endpoints and `GET /sessions`
status (required)string, possible values: "processing", "pausedForInsufficientQuota", "completed", "failed", "unknown" — Current status of the report. Transitions: processing ⇄ pausedForInsufficientQuota (paused when the account exceeds its usage limit; stays paused until explicitly resumed via the resume endpoint or the Elicit web interface), processing → completed/failed. Poll until completed or failed.
type (required)string
url (required)string — URL to view the report in the Elicit web interface
bibUrlstring | null — Pre-signed URL to download the report's references as a BibTeX (.bib) file. Only present when status is completed and the report has a non-empty bibliography. Expires after 7 days — re-fetch the report for a fresh URL.
docxUrlstring | null — Pre-signed URL to download the report as DOCX. Only present when status is completed and assets have been generated. Expires after 7 days — re-fetch the report for a fresh URL.
errorobject — Error details, only present when status is failed
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
pdfUrlstring | null — Pre-signed URL to download the report as PDF. Only present when status is completed and assets have been generated. Expires after 7 days — re-fetch the report for a fresh URL.
resultobject — Report output, only present when status is completed
summary (required)string — AI-generated executive summary of the findings
title (required)string — Auto-generated title for the report
abstractstring | null — Report abstract in markdown format. Only included when ?include=reportBody is specified.
reportBodystring | null — Full report content in markdown format. Only included when ?include=reportBody is specified.
risUrlstring | null — Pre-signed URL to download the report's references as an RIS (.ris) file. Only present when status is completed and the report has a non-empty bibliography. Expires after 7 days — re-fetch the report for a fresh URL.
txtUrlstring | null — Pre-signed URL to download the report's reference list as a plain-text (APA) file. Only present when status is completed and the report has a non-empty bibliography. Expires after 7 days — re-fetch the report for a fresh URL.
Example:
{
"type": "report",
"sessionId": "5ad08bfb-cbe0-4911-a8c3-309760d33029",
"status": "processing",
"executionStage": "gathering_sources",
"url": "https://elicit.com/review/5ad08bfb-cbe0-4911-a8c3-309760d33029",
"isPublic": false,
"result": {
"title": "GLP-1 Receptor Agonists and Cardiovascular Outcomes: A Systematic Review",
"summary": "This review analyzed 42 studies examining the cardiovascular effects of GLP-1 receptor agonists. The evidence suggests significant reductions in major adverse cardiovascular events (MACE), with semaglutide showing the strongest effect (HR 0.74, 95% CI 0.58-0.95)...",
"reportBody": "# Introduction\n\nGLP-1 receptor agonists have emerged as...",
"abstract": "This systematic review examines the cardiovascular effects of..."
},
"error": {
"code": "",
"message": ""
},
"pdfUrl": "https://s3.amazonaws.com/...",
"docxUrl": "https://s3.amazonaws.com/...",
"txtUrl": "https://s3.amazonaws.com/...",
"bibUrl": "https://s3.amazonaws.com/...",
"risUrl": "https://s3.amazonaws.com/...",
"links": {
"self": "https://elicit.com/api/v2/sessions/reports/5ad08bfb-cbe0-4911-a8c3-309760d33029",
"resume": "https://elicit.com/api/v2/sessions/5ad08bfb-cbe0-4911-a8c3-309760d33029/resume"
}
}objectsummary (required)string — AI-generated executive summary of the findings
title (required)string — Auto-generated title for the report
abstractstring | null — Report abstract in markdown format. Only included when ?include=reportBody is specified.
reportBodystring | null — Full report content in markdown format. Only included when ?include=reportBody is specified.
Example:
{
"title": "GLP-1 Receptor Agonists and Cardiovascular Outcomes: A Systematic Review",
"summary": "This review analyzed 42 studies examining the cardiovascular effects of GLP-1 receptor agonists. The evidence suggests significant reductions in major adverse cardiovascular events (MACE), with semaglutide showing the strongest effect (HR 0.74, 95% CI 0.58-0.95)...",
"reportBody": "# Introduction\n\nGLP-1 receptor agonists have emerged as...",
"abstract": "This systematic review examines the cardiovascular effects of..."
}objectisPublic (required)boolean — Whether the review is publicly accessible via its URL without authentication
links (required)object
self (required)string — API URL for this session's full status and results (the typed get endpoint for its type)
resumestring — API URL to resume this session. Present only while the session is paused for insufficient quota.
sessionId (required)string, format: uuid — The session ID (UUID) returned by the create endpoints and `GET /sessions`
status (required)string — Initial status is always processing
type (required)string
url (required)string — URL to view the review in the Elicit web interface
Example:
{
"type": "systematicReview",
"sessionId": "5ad08bfb-cbe0-4911-a8c3-309760d33029",
"status": "processing",
"url": "",
"isPublic": true,
"links": {
"self": "https://elicit.com/api/v2/sessions/reports/5ad08bfb-cbe0-4911-a8c3-309760d33029",
"resume": "https://elicit.com/api/v2/sessions/5ad08bfb-cbe0-4911-a8c3-309760d33029/resume"
}
}objectdataFreshness (required)string | null — ISO timestamp when the exports in `data` were last written to S3. null when no exports have been generated yet.
executionStage (required)string | null, possible values: "gathering_sources", "screening_abstract", "screening_fulltext", "extracting_data", "generating_report", "done", null — Current pipeline stage. Advances through gathering_sources → screening_abstract → screening_fulltext → extracting_data → generating_report → done. Null for reviews created before this field was introduced or when the stage isn't known.
isPublic (required)boolean — Whether the review is publicly accessible via its URL without authentication
links (required)object
self (required)string — API URL for this session's full status and results (the typed get endpoint for its type)
resumestring — API URL to resume this session. Present only while the session is paused for insufficient quota.
sessionId (required)string, format: uuid — The session ID (UUID) returned by the create endpoints and `GET /sessions`
status (required)string, possible values: "processing", "pausedForInsufficientQuota", "completed", "failed", "unknown" — Current status. Transitions: processing ⇄ pausedForInsufficientQuota (paused when the account exceeds its usage limit; stays paused until explicitly resumed via the resume endpoint or the Elicit web interface), processing → completed/failed. Poll until completed or failed.
type (required)string
url (required)string — URL to view the review in the Elicit web interface
dataobject — Stage-organized content and export URLs. Stages that did not run are omitted.
extractobject — Extraction-stage results exports.
csv (required)string, format: uri — Presigned URL for the CSV export. Expires in 7 days.
xlsx (required)string, format: uri — Presigned URL for the XLSX export. Expires in 7 days.
fulltextobject — Fulltext-screening results exports.
csv (required)string, format: uri — Presigned URL for the CSV export. Expires in 7 days.
xlsx (required)string, format: uri — Presigned URL for the XLSX export. Expires in 7 days.
reportobject — Report-stage content and exports.
result (required)object — Structured report content (title, summary, optional body + abstract).
summary (required)string — AI-generated executive summary of the findings
title (required)string — Auto-generated title
abstractstring | null — Report abstract in markdown format. Only included when ?include=reportBody is specified.
reportBodystring | null — Full report content in markdown format. Only included when ?include=reportBody is specified.
bibstring, format: uri — Presigned URL for the BibTeX bibliography. Expires in 7 days.
docxstring, format: uri — Presigned URL for the report DOCX. Expires in 7 days.
pdfstring, format: uri — Presigned URL for the report PDF. Expires in 7 days.
risstring, format: uri — Presigned URL for the RIS bibliography. Expires in 7 days.
txtstring, format: uri — Presigned URL for an APA-style plain-text reference list. Expires in 7 days.
screenobject — Abstract-screening results exports.
csv (required)string, format: uri — Presigned URL for the CSV export. Expires in 7 days.
xlsx (required)string, format: uri — Presigned URL for the XLSX export. Expires in 7 days.
searchobject — Gather-stage paper list exports.
csv (required)string, format: uri — Presigned URL for the CSV export. Expires in 7 days.
xlsx (required)string, format: uri — Presigned URL for the XLSX export. Expires in 7 days.
errorobject — Error details, only present when status is failed
code (required)string — Machine-readable error code
message (required)string — Human-readable error message
Example:
{
"type": "systematicReview",
"sessionId": "5ad08bfb-cbe0-4911-a8c3-309760d33029",
"status": "processing",
"executionStage": "gathering_sources",
"url": "",
"isPublic": true,
"error": {
"code": "",
"message": ""
},
"data": {
"search": {
"csv": "",
"xlsx": ""
},
"screen": {
"csv": "",
"xlsx": ""
},
"fulltext": {
"csv": "",
"xlsx": ""
},
"extract": {
"csv": "",
"xlsx": ""
},
"report": {
"result": {
"title": "",
"summary": "",
"reportBody": null,
"abstract": null
},
"pdf": "",
"docx": "",
"txt": "",
"bib": "",
"ris": ""
}
},
"dataFreshness": null,
"links": {
"self": "https://elicit.com/api/v2/sessions/reports/5ad08bfb-cbe0-4911-a8c3-309760d33029",
"resume": "https://elicit.com/api/v2/sessions/5ad08bfb-cbe0-4911-a8c3-309760d33029/resume"
}
}objectextractobject — Extraction-stage results exports.
csv (required)string, format: uri — Presigned URL for the CSV export. Expires in 7 days.
xlsx (required)string, format: uri — Presigned URL for the XLSX export. Expires in 7 days.
fulltextobject — Fulltext-screening results exports.
csv (required)string, format: uri — Presigned URL for the CSV export. Expires in 7 days.
xlsx (required)string, format: uri — Presigned URL for the XLSX export. Expires in 7 days.
reportobject — Report-stage content and exports.
result (required)object — Structured report content (title, summary, optional body + abstract).
summary (required)string — AI-generated executive summary of the findings
title (required)string — Auto-generated title
abstractstring | null — Report abstract in markdown format. Only included when ?include=reportBody is specified.
reportBodystring | null — Full report content in markdown format. Only included when ?include=reportBody is specified.
bibstring, format: uri — Presigned URL for the BibTeX bibliography. Expires in 7 days.
docxstring, format: uri — Presigned URL for the report DOCX. Expires in 7 days.
pdfstring, format: uri — Presigned URL for the report PDF. Expires in 7 days.
risstring, format: uri — Presigned URL for the RIS bibliography. Expires in 7 days.
txtstring, format: uri — Presigned URL for an APA-style plain-text reference list. Expires in 7 days.
screenobject — Abstract-screening results exports.
csv (required)string, format: uri — Presigned URL for the CSV export. Expires in 7 days.
xlsx (required)string, format: uri — Presigned URL for the XLSX export. Expires in 7 days.
searchobject — Gather-stage paper list exports.
csv (required)string, format: uri — Presigned URL for the CSV export. Expires in 7 days.
xlsx (required)string, format: uri — Presigned URL for the XLSX export. Expires in 7 days.
Example:
{
"search": {
"csv": "",
"xlsx": ""
},
"screen": {
"csv": "",
"xlsx": ""
},
"fulltext": {
"csv": "",
"xlsx": ""
},
"extract": {
"csv": "",
"xlsx": ""
},
"report": {
"result": {
"title": "",
"summary": "",
"reportBody": null,
"abstract": null
},
"pdf": "",
"docx": "",
"txt": "",
"bib": "",
"ris": ""
}
}objectcsv (required)string, format: uri — Presigned URL for the CSV export. Expires in 7 days.
xlsx (required)string, format: uri — Presigned URL for the XLSX export. Expires in 7 days.
Example:
{
"csv": "",
"xlsx": ""
}objectresult (required)object — Structured report content (title, summary, optional body + abstract).
summary (required)string — AI-generated executive summary of the findings
title (required)string — Auto-generated title
abstractstring | null — Report abstract in markdown format. Only included when ?include=reportBody is specified.
reportBodystring | null — Full report content in markdown format. Only included when ?include=reportBody is specified.
bibstring, format: uri — Presigned URL for the BibTeX bibliography. Expires in 7 days.
docxstring, format: uri — Presigned URL for the report DOCX. Expires in 7 days.
pdfstring, format: uri — Presigned URL for the report PDF. Expires in 7 days.
risstring, format: uri — Presigned URL for the RIS bibliography. Expires in 7 days.
txtstring, format: uri — Presigned URL for an APA-style plain-text reference list. Expires in 7 days.
Example:
{
"result": {
"title": "",
"summary": "",
"reportBody": null,
"abstract": null
},
"pdf": "",
"docx": "",
"txt": "",
"bib": "",
"ris": ""
}objectsummary (required)string — AI-generated executive summary of the findings
title (required)string — Auto-generated title
abstractstring | null — Report abstract in markdown format. Only included when ?include=reportBody is specified.
reportBodystring | null — Full report content in markdown format. Only included when ?include=reportBody is specified.
Example:
{
"title": "",
"summary": "",
"reportBody": null,
"abstract": null
}objectnextCursor (required)string | null — Opaque cursor for the next page; pass it back as `cursor`. Null if there are no more results.
sessions (required)array — Reports, systematic reviews, and research-agent sessions interleaved, ordered by creation date (newest first)
createdAt (required)string — ISO 8601 timestamp of when the report was created
isPublic (required)boolean — Whether the report is publicly accessible via its URL without authentication
links (required)object
self (required)string — API URL for this session's full status and results (the typed get endpoint for its type)
resumestring — API URL to resume this session. Present only while the session is paused for insufficient quota.
sessionId (required)string, format: uuid — The session ID (UUID) returned by the create endpoints and `GET /sessions`
source (required)string, possible values: "user", "api", "mcp", "agent_session" — How the report was created
status (required)string, possible values: "processing", "pausedForInsufficientQuota", "completed", "failed", "unknown" — Current status of the report
title (required)string — Report title (the research question)
type (required)string, possible values: "report", "systematicReview", "agent" — Which kind of session this is; use it to pick the matching typed get endpoint
url (required)string — URL to view the report in the Elicit web interface
executionStagestring | null, possible values: "gathering_sources", "screening_abstract", "screening_fulltext", "extracting_data", "generating_report", "done", null — Current pipeline stage, or null when not yet known. Omitted entirely for agent sessions, which have no pipeline stages.
rolestring, possible values: "owner", "shared" — The caller's relationship to this session: "owner" for a session the caller created, or "shared" for an agent session another user shared with them read-only. Reports and systematic reviews are always "owner".
Example:
{
"sessions": [
{
"type": "report",
"sessionId": "5ad08bfb-cbe0-4911-a8c3-309760d33029",
"status": "processing",
"executionStage": "gathering_sources",
"title": "What are the effects of GLP-1 receptor agonists on cardiovascular outcomes?",
"url": "https://elicit.com/review/5ad08bfb-cbe0-4911-a8c3-309760d33029",
"source": "api",
"createdAt": "2025-06-15T14:30:00.000Z",
"isPublic": false,
"role": "owner",
"links": {
"self": "https://elicit.com/api/v2/sessions/reports/5ad08bfb-cbe0-4911-a8c3-309760d33029",
"resume": "https://elicit.com/api/v2/sessions/5ad08bfb-cbe0-4911-a8c3-309760d33029/resume"
}
}
],
"nextCursor": "2025-06-15T14:30:00.000Z_5ad08bfb-cbe0-4911-a8c3-309760d33029"
}objectcreatedAt (required)string — ISO 8601 timestamp of when the report was created
isPublic (required)boolean — Whether the report is publicly accessible via its URL without authentication
links (required)object
self (required)string — API URL for this session's full status and results (the typed get endpoint for its type)
resumestring — API URL to resume this session. Present only while the session is paused for insufficient quota.
sessionId (required)string, format: uuid — The session ID (UUID) returned by the create endpoints and `GET /sessions`
source (required)string, possible values: "user", "api", "mcp", "agent_session" — How the report was created
status (required)string, possible values: "processing", "pausedForInsufficientQuota", "completed", "failed", "unknown" — Current status of the report
title (required)string — Report title (the research question)
type (required)string, possible values: "report", "systematicReview", "agent" — Which kind of session this is; use it to pick the matching typed get endpoint
url (required)string — URL to view the report in the Elicit web interface
executionStagestring | null, possible values: "gathering_sources", "screening_abstract", "screening_fulltext", "extracting_data", "generating_report", "done", null — Current pipeline stage, or null when not yet known. Omitted entirely for agent sessions, which have no pipeline stages.
rolestring, possible values: "owner", "shared" — The caller's relationship to this session: "owner" for a session the caller created, or "shared" for an agent session another user shared with them read-only. Reports and systematic reviews are always "owner".
Example:
{
"type": "report",
"sessionId": "5ad08bfb-cbe0-4911-a8c3-309760d33029",
"status": "processing",
"executionStage": "gathering_sources",
"title": "What are the effects of GLP-1 receptor agonists on cardiovascular outcomes?",
"url": "https://elicit.com/review/5ad08bfb-cbe0-4911-a8c3-309760d33029",
"source": "api",
"createdAt": "2025-06-15T14:30:00.000Z",
"isPublic": false,
"role": "owner",
"links": {
"self": "https://elicit.com/api/v2/sessions/reports/5ad08bfb-cbe0-4911-a8c3-309760d33029",
"resume": "https://elicit.com/api/v2/sessions/5ad08bfb-cbe0-4911-a8c3-309760d33029/resume"
}
}objectexecutionStage (required)string | null, possible values: "gathering_sources", "screening_abstract", "screening_fulltext", "extracting_data", "generating_report", "done", null — The stage the session resumed at
isPublic (required)boolean
links (required)object
self (required)string — API URL for this session's full status and results (the typed get endpoint for its type)
resumestring — API URL to resume this session. Present only while the session is paused for insufficient quota.
sessionId (required)string, format: uuid — The session ID (UUID) returned by the create endpoints and `GET /sessions`
status (required)string, possible values: "processing", "pausedForInsufficientQuota", "completed", "failed", "unknown" — Status after the resume — normally processing; completed or failed if the run finished while the resume was in flight.
type (required)string, possible values: "report", "systematicReview", "agent" — Which kind of session was resumed
url (required)string — URL to view this session in the Elicit web interface
Example:
{
"type": "report",
"sessionId": "5ad08bfb-cbe0-4911-a8c3-309760d33029",
"status": "processing",
"executionStage": "screening_abstract",
"url": "",
"isPublic": true,
"links": {
"self": "https://elicit.com/api/v2/sessions/reports/5ad08bfb-cbe0-4911-a8c3-309760d33029",
"resume": "https://elicit.com/api/v2/sessions/5ad08bfb-cbe0-4911-a8c3-309760d33029/resume"
}
}objectsessionId (required)string — Unique identifier for the session.
share (required)object
email (required)string — Email address the session is shared with.
role (required)string — Access level of the share. Sessions are always shared read-only.
status (required)string, possible values: "registered", "invited" — "registered" when the recipient already has an Elicit account and can read the session now; "invited" when a pending invitation was created for an email without an account.
url (required)string — URL to view and continue the session in the Elicit web interface.
Example:
{
"sessionId": "",
"share": {
"email": "colleague@example.com",
"status": "registered",
"role": "reader"
},
"url": ""
}objectemail (required)string — Email address the session is shared with.
role (required)string — Access level of the share. Sessions are always shared read-only.
status (required)string, possible values: "registered", "invited" — "registered" when the recipient already has an Elicit account and can read the session now; "invited" when a pending invitation was created for an email without an account.
Example:
{
"email": "colleague@example.com",
"status": "registered",
"role": "reader"
}objectsessionId (required)string — Unique identifier for the session.
shares (required)array — Everyone the session is currently shared with — both registered recipients and pending email invitations.
email (required)string — Email address the session is shared with.
role (required)string — Access level of the share. Sessions are always shared read-only.
status (required)string, possible values: "registered", "invited" — "registered" when the recipient already has an Elicit account and can read the session now; "invited" when a pending invitation was created for an email without an account.
url (required)string — URL to view and continue the session in the Elicit web interface.
Example:
{
"sessionId": "",
"shares": [
{
"email": "colleague@example.com",
"status": "registered",
"role": "reader"
}
],
"url": ""
}objectemail (required)string — Email address whose share was revoked.
revoked (required)boolean — Whether an existing share or pending invite was removed. False when there was nothing to revoke (the call is idempotent either way).
sessionId (required)string — Unique identifier for the session.
Example:
{
"sessionId": "",
"email": "",
"revoked": true
}objectextraUsage (required)object — Extra-usage amount and limit in USD cents. Null when extra usage is not enabled.
hasUsageRemaining (required)boolean — Whether the account still has usage available this billing period. False once both the plan limit and (if enabled) the extra-usage limit are exhausted.
percentUsed (required)number — Percentage of plan usage consumed this billing period.
periodEnd (required)string — ISO 8601 end of the current billing period. Monthly usage limits reset at this time.
periodStart (required)string — ISO 8601 start of the current billing period.
Example:
{
"hasUsageRemaining": true,
"percentUsed": 1,
"periodStart": "",
"periodEnd": "",
"extraUsage": {
"limitUsdCents": null,
"spentUsdCents": 1
}
}objectlimitUsdCents (required)integer | null — The extra-usage spending limit in USD cents, or null when extra usage is uncapped.
spentUsdCents (required)integer — Extra-usage spend so far this billing period, in USD cents.
Example:
{
"limitUsdCents": null,
"spentUsdCents": 1
}objectexpires_at (required)string — ISO 8601 timestamp after which the upload URL and the staged file_id are no longer valid.
file_id (required)string — Opaque identifier for the staged upload. Pass it in the `attachments` array of a create-session or send-message request to attach the file to that turn.
upload_url (required)string — Short-lived presigned S3 PUT URL. Upload the file bytes directly to it with the same Content-Type and Content-Length declared here.
Example:
{
"file_id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
"upload_url": "",
"expires_at": "2026-07-23T15:00:00.000Z"
}objectsessionId (required)string — Unique identifier for the research agent session.
status (required)string — Initial status is always processing.
url (required)string — URL to view and continue the session in the Elicit web interface.
Example:
{
"sessionId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
"status": "processing",
"url": "https://elicit.com/agent/a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d"
}objectcreatedAt (required)string — ISO 8601 timestamp of when the session was created.
isPublic (required)boolean — Whether the session is publicly accessible via its URL without authentication.
links (required)object
self (required)string — API URL for this session's full status and results (the typed get endpoint for its type)
resumestring — API URL to resume this session. Present only while the session is paused for insufficient quota.
sessionId (required)string, format: uuid — The session ID (UUID) returned by the create endpoints and `GET /sessions`
source (required)string, possible values: "user", "api", "mcp", "agent_session" — How the session was created.
status (required)string, possible values: "processing", "pausedForInsufficientQuota", "completed", "failed", "unknown" — Current status of the session: "processing" (running, or not yet started), "completed" (idle and awaiting input — not terminally finished), "failed" (the last turn ended with an error), or "pausedForInsufficientQuota" (paused at the account usage limit; resume once the limit clears).
title (required)string — Human-readable title of the session.
type (required)string — Discriminator identifying this as a research-agent session.
url (required)string — URL to view and continue the session in the Elicit web interface.
Example:
{
"type": "agent",
"sessionId": "5ad08bfb-cbe0-4911-a8c3-309760d33029",
"status": "processing",
"title": "",
"url": "",
"source": "api",
"createdAt": "2025-06-15T14:30:00.000Z",
"isPublic": true,
"links": {
"self": "https://elicit.com/api/v2/sessions/reports/5ad08bfb-cbe0-4911-a8c3-309760d33029",
"resume": "https://elicit.com/api/v2/sessions/5ad08bfb-cbe0-4911-a8c3-309760d33029/resume"
}
}objectcursor (required)string — Opaque session-bound checkpoint. Always present. Pass it unchanged as the `cursor` query param on the next poll to receive later event occurrences.
events (required)array — Append-only view of the session's activity. Streaming deltas are collapsed into immutable resource snapshots; raw stream events are never returned. Later snapshots retain the same resource ID and receive a new eventId. With no cursor this is the full history; with a cursor it contains only later occurrences.
createdAt (required)string | null — ISO 8601 timestamp for the event. Null for historical events without one.
eventId (required)string — Stable opaque identifier for this immutable public event occurrence.
isInitial (required)boolean
kind (required)string
messageId (required)string
text (required)string
citations (required)array
citationId (required)string — Identifier for this citation within the agent message.
quote (required)string — The passage from the source that supports the message.
source (required)object
authors (required)array — Authors of the cited work, in display order.
string
doi (required)string | null — Digital Object Identifier (DOI), when available.
title (required)string | null — Title of the cited work.
url (required)string | null — Best available URL for the cited work.
venue (required)string | null — Journal, conference, repository, or other publication venue.
year (required)integer | null — Publication year.
createdAt (required)string | null — ISO 8601 timestamp for the event. Null for historical events without one.
eventId (required)string — Stable opaque identifier for this immutable public event occurrence.
kind (required)string
messageId (required)string
suggestedFollowUps (required)array
string
text (required)string
createdAt (required)string | null — ISO 8601 timestamp for the event. Null for historical events without one.
eventId (required)string — Stable opaque identifier for this immutable public event occurrence.
kind (required)string
options (required)array | null
prefilledText (required)string | null
questionId (required)string
responseFormat (required)string, possible values: "text", "single_select", "multi_select"
text (required)string
activityId (required)string
createdAt (required)string | null — ISO 8601 timestamp for the event. Null for historical events without one.
eventId (required)string — Stable opaque identifier for this immutable public event occurrence.
kind (required)string
status (required)string, possible values: "started", "completed", "failed"
summary (required)string | null
title (required)string
artifacts (required)array
artifactId (required)string — Opaque identifier for the artifact, stable within a session. Pass it to the download endpoint to retrieve the file. Never a raw storage key.
contentType (required)string | null — MIME type of the artifact, when known.
createdAt (required)string | null — ISO 8601 timestamp of when the artifact was produced, when known.
filename (required)string — Suggested filename for the downloaded artifact.
format (required)string | null — Subtype within the artifact (e.g. "pdf", "docx", "pptx"). For agent files it is the filename extension; null only when the filename has no extension.
kind (required)string, possible values: "agent-saved-file", "agent-delivered-file", "prose-export", "presentation-export", "figure-export", "report-asset", "report-citation" — The kind of artifact produced in the session. A delivered file lists once as "agent-delivered-file"; "agent-saved-file" denotes a file the agent saved to its workspace but did not deliver.
sizeBytes (required)number | null — Size of the artifact in bytes, when known.
createdAt (required)string | null — ISO 8601 timestamp for the event. Null for historical events without one.
eventId (required)string — Stable opaque identifier for this immutable public event occurrence.
kind (required)string
createdAt (required)string | null — ISO 8601 timestamp for the event. Null for historical events without one.
deliveredOutputs (required)array — Artifacts delivered by this source-history occurrence. This is an immutable metadata snapshot; query the artifacts resource for currently supported download formats.
artifactId (required)string — Opaque identifier for the interactive artifact, stable within a session. Pass it to the artifact content endpoint to retrieve its contents. Never a raw storage key or entity hash.
caption (required)string | null — Optional caption describing the artifact.
createdAt (required)string | null — ISO 8601 timestamp of when the artifact was delivered, when known.
kind (required)string, possible values: "table", "prose", "presentation", "figure" — The kind of interactive artifact: table, prose, presentation, or figure.
rowCount (required)integer | null — Number of rows for a table artifact; null for non-table kinds.
title (required)string — Human-readable title of the artifact.
eventId (required)string — Stable opaque identifier for this immutable public event occurrence.
kind (required)string
code (required)string, possible values: "agent_timed_out", "agent_api_error", "agent_failed"
createdAt (required)string | null — ISO 8601 timestamp for the event. Null for historical events without one.
eventId (required)string — Stable opaque identifier for this immutable public event occurrence.
kind (required)string
message (required)string
retryable (required)boolean
createdAt (required)string | null — ISO 8601 timestamp for the event. Null for historical events without one.
eventId (required)string — Stable opaque identifier for this immutable public event occurrence.
kind (required)string
createdAt (required)string | null — ISO 8601 timestamp for the event. Null for historical events without one.
eventId (required)string — Stable opaque identifier for this immutable public event occurrence.
kind (required)string
createdAt (required)string | null — ISO 8601 timestamp for the event. Null for historical events without one.
eventId (required)string — Stable opaque identifier for this immutable public event occurrence.
kind (required)string
createdAt (required)string | null — ISO 8601 timestamp for the event. Null for historical events without one.
eventId (required)string — Stable opaque identifier for this immutable public event occurrence.
kind (required)string
createdAt (required)string | null — ISO 8601 timestamp for the event. Null for historical events without one.
eventId (required)string — Stable opaque identifier for this immutable public event occurrence.
kind (required)string
sessionId (required)string — Unique identifier for the research agent session.
status (required)string, possible values: "processing", "pausedForInsufficientQuota", "completed", "failed", "unknown" — Current status of the session. Uses exactly the same value and semantics as the list and detail endpoints.
url (required)string — URL to view and continue the session in the Elicit web interface.
Example:
{
"sessionId": "",
"status": "processing",
"events": [
{
"eventId": "",
"createdAt": null,
"kind": "user_message",
"messageId": "",
"text": "",
"isInitial": true
}
],
"cursor": "",
"url": ""
}Example:
objectartifactId (required)string — Opaque identifier for the artifact, stable within a session. Pass it to the download endpoint to retrieve the file. Never a raw storage key.
contentType (required)string | null — MIME type of the artifact, when known.
createdAt (required)string | null — ISO 8601 timestamp of when the artifact was produced, when known.
filename (required)string — Suggested filename for the downloaded artifact.
format (required)string | null — Subtype within the artifact (e.g. "pdf", "docx", "pptx"). For agent files it is the filename extension; null only when the filename has no extension.
kind (required)string, possible values: "agent-saved-file", "agent-delivered-file", "prose-export", "presentation-export", "figure-export", "report-asset", "report-citation" — The kind of artifact produced in the session. A delivered file lists once as "agent-delivered-file"; "agent-saved-file" denotes a file the agent saved to its workspace but did not deliver.
sizeBytes (required)number | null — Size of the artifact in bytes, when known.
Example:
{
"artifactId": "",
"kind": "agent-saved-file",
"format": null,
"filename": "",
"contentType": null,
"sizeBytes": null,
"createdAt": "2025-06-15T14:30:00.000Z"
}objectartifactId (required)string — Opaque identifier for the interactive artifact, stable within a session. Pass it to the artifact content endpoint to retrieve its contents. Never a raw storage key or entity hash.
caption (required)string | null — Optional caption describing the artifact.
createdAt (required)string | null — ISO 8601 timestamp of when the artifact was delivered, when known.
kind (required)string, possible values: "table", "prose", "presentation", "figure" — The kind of interactive artifact: table, prose, presentation, or figure.
rowCount (required)integer | null — Number of rows for a table artifact; null for non-table kinds.
title (required)string — Human-readable title of the artifact.
Example:
{
"artifactId": "",
"kind": "table",
"title": "",
"caption": null,
"rowCount": null,
"createdAt": "2025-06-15T14:30:00.000Z"
}objectmessageId (required)string — Identifier of the inserted message. Correlate it with the messageId on the matching user_message event.
sessionId (required)string — Unique identifier for the research agent session.
status (required)string — The session is processing the inserted message.
url (required)string — URL to view and continue the session in the Elicit web interface.
Example:
{
"sessionId": "",
"status": "processing",
"messageId": "",
"url": ""
}objectsessionId (required)string — Unique identifier for the research agent session.
status (required)string, possible values: "stopping", "stopped", "failed" — "stopping" when a stop was queued (the session halts asynchronously; poll the events endpoint for the session_stopped event). "stopped" or "failed" when the session had already ended and no stop was needed.
url (required)string — URL to view and continue the session in the Elicit web interface.
Example:
{
"sessionId": "",
"status": "stopping",
"url": ""
}objectartifacts (required)array — File-backed artifacts produced in the session. Only the latest version of each artifact is listed. Retrieve contents via the download endpoint.
artifactId (required)string — Opaque identifier for the artifact, stable within a session. Pass it to the download endpoint to retrieve the file. Never a raw storage key.
contentType (required)string | null — MIME type of the artifact, when known.
createdAt (required)string | null — ISO 8601 timestamp of when the artifact was produced, when known.
filename (required)string — Suggested filename for the downloaded artifact.
format (required)string | null — Subtype within the artifact (e.g. "pdf", "docx", "pptx"). For agent files it is the filename extension; null only when the filename has no extension.
kind (required)string, possible values: "agent-saved-file", "agent-delivered-file", "prose-export", "presentation-export", "figure-export", "report-asset", "report-citation" — The kind of artifact produced in the session. A delivered file lists once as "agent-delivered-file"; "agent-saved-file" denotes a file the agent saved to its workspace but did not deliver.
sizeBytes (required)number | null — Size of the artifact in bytes, when known.
deliveredOutputs (required)array — Interactive outputs (tables, prose, presentations, figures) delivered as session outputs. Only the latest delivery of each is listed. Retrieve contents via the artifact content endpoint.
artifactId (required)string — Opaque identifier for the interactive artifact, stable within a session. Pass it to the artifact content endpoint to retrieve its contents. Never a raw storage key or entity hash.
caption (required)string | null — Optional caption describing the artifact.
createdAt (required)string | null — ISO 8601 timestamp of when the artifact was delivered, when known.
downloadFormats (required)array — File formats this artifact can be downloaded as from the content endpoint via ?format=<fmt> (tables: csv/xlsx; prose: md; empty for other kinds). The JSON body is returned when no format is given.
string, possible values: "csv", "xlsx", "md"
kind (required)string, possible values: "table", "prose", "presentation", "figure" — The kind of interactive artifact: table, prose, presentation, or figure.
rowCount (required)integer | null — Number of rows for a table artifact; null for non-table kinds.
title (required)string — Human-readable title of the artifact.
sessionId (required)string — Unique identifier for the research agent session.
url (required)string — URL to view and continue the session in the Elicit web interface.
Example:
{
"sessionId": "",
"artifacts": [
{
"artifactId": "",
"kind": "agent-saved-file",
"format": null,
"filename": "",
"contentType": null,
"sizeBytes": null,
"createdAt": "2025-06-15T14:30:00.000Z"
}
],
"deliveredOutputs": [
{
"artifactId": "",
"kind": "table",
"title": "",
"caption": null,
"rowCount": null,
"createdAt": "2025-06-15T14:30:00.000Z",
"downloadFormats": [
"csv"
]
}
],
"url": ""
}objectartifactId (required)string — Opaque identifier for the interactive artifact, stable within a session. Pass it to the artifact content endpoint to retrieve its contents. Never a raw storage key or entity hash.
caption (required)string | null — Optional caption describing the artifact.
createdAt (required)string | null — ISO 8601 timestamp of when the artifact was delivered, when known.
downloadFormats (required)array — File formats this artifact can be downloaded as from the content endpoint via ?format=<fmt> (tables: csv/xlsx; prose: md; empty for other kinds). The JSON body is returned when no format is given.
string, possible values: "csv", "xlsx", "md"
kind (required)string, possible values: "table", "prose", "presentation", "figure" — The kind of interactive artifact: table, prose, presentation, or figure.
rowCount (required)integer | null — Number of rows for a table artifact; null for non-table kinds.
title (required)string — Human-readable title of the artifact.
Example:
{
"artifactId": "",
"kind": "table",
"title": "",
"caption": null,
"rowCount": null,
"createdAt": "2025-06-15T14:30:00.000Z",
"downloadFormats": [
"csv"
]
}objectcontentType (required)string | null — MIME type of the artifact, when known.
downloadUrl (required)string — Short-lived presigned URL to download the artifact contents.
expiresAt (required)string — ISO 8601 timestamp after which the download URL is no longer valid.
filename (required)string — Suggested filename for the downloaded artifact.
Example:
{
"downloadUrl": "",
"expiresAt": "2025-06-15T15:00:00.000Z",
"filename": "",
"contentType": null
}Example: