Deep Search API
Programmatic access to Sourcegraph's agentic code search capabilities.
The Deep Search API is available in Sourcegraph version 6.7+. This API allows you to programmatically create and manage Deep Search conversations.
The Deep Search API provides programmatic access to Sourcegraph's agentic code search capabilities. Use this API to integrate Deep Search into your development workflows, build custom tools, or automate code analysis tasks.
Authentication
All API requests require authentication using a Sourcegraph access token. You can generate an access token from your user settings.
BASH# Set your access token export SRC_ACCESS_TOKEN="your-token-here"
Base URL
All Deep Search API endpoints are prefixed with /.api/deepsearch/v1
and require the X-Requested-With
header to identify the client:
BASHcurl 'https://your-sourcegraph-instance.com/.api/deepsearch/v1' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -H "Authorization: token $SRC_ACCESS_TOKEN" \ -H 'X-Requested-With: my-client 1.0.0'
The X-Requested-With
header is required and should include your client
name and version number.
Creating conversations
All Deep Search conversations are processed asynchronously. When you create a conversation, the API will return immediately with a conversation object containing the question in processing
status.
Create a new Deep Search conversation by asking a question:
BASHcurl 'https://your-sourcegraph-instance.com/.api/deepsearch/v1' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -H "Authorization: token $SRC_ACCESS_TOKEN" \ -H 'X-Requested-With: my-client 1.0.0' \ -d '{"question":"Does github.com/sourcegraph/sourcegraph have a README?"}'
The API returns a conversation object with the question initially in processing
status:
JSON{ "id": 140, "questions": [ { "id": 163, "conversation_id": 140, "question": "Does github.com/sourcegraph/sourcegraph have a README?", "created_at": "2025-09-24T08:14:06Z", "updated_at": "2025-09-24T08:14:06Z", "status": "processing", "turns": [ { "reasoning": "Does github.com/sourcegraph/sourcegraph have a README?", "timestamp": 1758701646, "role": "user" } ], "stats": { "time_millis": 0, "tool_calls": 0, "total_input_tokens": 0, "cached_tokens": 0, "cache_creation_input_tokens": 0, "prompt_tokens": 0, "completion_tokens": 0, "total_tokens": 0, "credits": 0 }, "suggested_followups": null } ], "created_at": "2025-09-24T08:14:06Z", "updated_at": "2025-09-24T08:14:06Z", "user_id": 1, "read_token": "caebeb05-7755-4f89-834f-e3ee4a6acb25", "share_url": "https://your-sourcegraph-instance.com/deepsearch/caebeb05-7755-4f89-834f-e3ee4a6acb25" }
To get the completed answer, poll the conversation endpoint:
BASHcurl 'https://your-sourcegraph-instance.com/.api/deepsearch/v1/140' \ -H 'Accept: application/json' \ -H "Authorization: token $SRC_ACCESS_TOKEN" \ -H 'X-Requested-With: my-client 1.0.0'
Once processing is complete, the response will include the answer:
JSON{ "id": 140, "questions": [ { "id": 163, "conversation_id": 140, "question": "Does github.com/sourcegraph/sourcegraph have a README?", "created_at": "2025-09-24T08:14:06Z", "updated_at": "2025-09-24T08:14:15Z", "status": "completed", "title": "GitHub README check", "answer": "Yes, [github.com/sourcegraph/sourcegraph](https://sourcegraph.test:3443/github.com/sourcegraph/sourcegraph) has a [README.md](https://sourcegraph.test:3443/github.com/sourcegraph/sourcegraph/-/blob/README.md) file in the root directory.", "sources": [ { "type": "Repository", "link": "/github.com/sourcegraph/sourcegraph", "label": "github.com/sourcegraph/sourcegraph" } ], "stats": { "time_millis": 6369, "tool_calls": 1, "total_input_tokens": 13632, "cached_tokens": 12359, "cache_creation_input_tokens": 13625, "prompt_tokens": 11, "completion_tokens": 156, "total_tokens": 13694, "credits": 2 }, "suggested_followups": [ "What information does the README.md file contain?", "Are there other important documentation files in the repository?" ] } ], "created_at": "2025-09-24T08:14:06Z", "updated_at": "2025-09-24T08:14:15Z", "user_id": 1, "read_token": "caebeb05-7755-4f89-834f-e3ee4a6acb25", "viewer": { "is_owner": true }, "quota_usage": { "total_quota": 0, "quota_limit": -1, "reset_time": "2025-10-01T00:00:00Z" }, "share_url": "https://sourcegraph.test:3443/deepsearch/caebeb05-7755-4f89-834f-e3ee4a6acb25" }
Adding follow-up questions
Continue a conversation by adding follow-up questions:
BASHcurl 'https://your-sourcegraph-instance.com/.api/deepsearch/v1/140/questions' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -H "Authorization: token $SRC_ACCESS_TOKEN" \ -H 'X-Requested-With: my-client 1.0.0' \ -d '{"question":"What does the README file contain?"}'
Listing conversations
Get all your conversations with optional filtering:
BASH# List all conversations curl 'https://your-sourcegraph-instance.com/.api/deepsearch/v1' \ -H 'Accept: application/json' \ -H "Authorization: token $SRC_ACCESS_TOKEN" \ -H 'X-Requested-With: my-client 1.0.0' # List with pagination and filtering curl 'https://your-sourcegraph-instance.com/.api/deepsearch/v1?page_first=10&sort=created_at' \ -H 'Accept: application/json' \ -H "Authorization: token $SRC_ACCESS_TOKEN" \ -H 'X-Requested-With: my-client 1.0.0'
Available query parameters:
filter_id
- Filter by conversation IDfilter_user_id
- Filter by user IDpage_first
- Number of results per pagepage_after
- Pagination cursorsort
- Sort order:created_at
,-created_at
,updated_at
,-updated_at
Managing conversations
Get a specific conversation:
BASHcurl 'https://your-sourcegraph-instance.com/.api/deepsearch/v1/140' \ -H 'Accept: application/json' \ -H "Authorization: token $SRC_ACCESS_TOKEN" \ -H 'X-Requested-With: my-client 1.0.0'
Delete a conversation:
BASHcurl 'https://your-sourcegraph-instance.com/.api/deepsearch/v1/140' \ -X DELETE \ -H "Authorization: token $SRC_ACCESS_TOKEN" \ -H 'X-Requested-With: my-client 1.0.0'
Cancel a processing question:
BASHcurl 'https://your-sourcegraph-instance.com/.api/deepsearch/v1/140/questions/163/cancel' \ -X POST \ -H 'Accept: application/json' \ -H "Authorization: token $SRC_ACCESS_TOKEN" \ -H 'X-Requested-With: my-client 1.0.0'
Response structure
Conversation object:
id
- Unique conversation identifierquestions
- Array of questions and answerscreated_at
/updated_at
- Timestampsuser_id
- Owner user IDread_token
- Token for sharing accessshare_url
- URL for sharing the conversation
Question object:
id
- Unique question identifierquestion
- The original question textstatus
- Processing status:pending
,processing
,completed
,failed
title
- Generated title for the questionanswer
- The AI-generated answer (when completed)sources
- Array of sources used to generate the answersuggested_followups
- Suggested follow-up questions
Error handling
The API returns standard HTTP status codes with descriptive error messages:
200
- Success202
- Accepted (for async requests)400
- Bad Request401
- Unauthorized404
- Not Found500
- Internal Server Error