API reference
API Introduction
Turn a company into leads your agent can approach. Base URL, authentication, and every endpoint.
The API turns companies into leads an agent can approach: look a company up, read a signal or its context, find the people in the roles you sell to, then enrich a contact. The worked path is From companies to leads. Keys are created under Connect assistant → API keys. Credit prices are on Credits & costs. The tools of the Signals MCP server, including preview_cost and max_credits, are on MCP.
Base URL
All requests go to:
https://mysdr.app/api/v1
Authentication
Every request must include your API key as a Bearer token in the Authorization header:
--header "Authorization: Bearer $MYSDR_API_KEY"
Create keys under Connect assistant → API keys in mySDR. Keep them secret: never put a key in client-side code or a public repository. Load the key from the environment variable MYSDR_API_KEY. A key starts with gtk_. A missing, invalid or revoked key is 401 on every route, including while an API is closed. A valid key while the Company API or the Signals API is closed for your organization answers 403 api_not_enabled on those routes, with what the key can do instead. Connecting an assistant is Connect your assistant. The assistant key is created under Connect assistant → Other → Create assistant key.
Request format
Send a JSON body with Content-Type: application/json. Field names are snake_case. Unknown fields and unknown query parameters are rejected with 400 rather than ignored, so a typo never silently drops a filter: the error names the parameter in param, says what the endpoint takes, and suggests the name you probably meant.
Response format
Every response is JSON and carries mySDR-Api-Version (2026-10-04; FounderMCP-Api-Version is a deprecated alias) and mySDR-Request-Id (FounderMCP-Request-Id is a deprecated alias). Paid endpoints add credits_used to the body and X-Credits-Used and X-Credits-Charged headers with the same number. When the wallet can be read they also send X-Credits-Remaining. GET /usage adds balance and today.credits_remaining.
Error responses
Every error has the same shape. Branch on error.type; the message is meant for people and can change.
{
"error": {
"type": "invalid_request",
"message": "`page` must be a whole number from 1 to 100."
}
}
Errors never cost credits.
HTTP status codes
- 400
invalid_request— The body is not valid JSON, a field is unknown or has the wrong type, or a value is not allowed. - 401
authentication_error— The Authorization header is missing, or the key is unknown or revoked. - 403
permission_error— API access is not part of your plan, or your account is suspended. - 403
api_not_enabled— The key is valid, but the Signals API or the Company API is not enabled for your organization yet. The error says what this key can do. - 404
not_found— The endpoint, or the object you asked for (a search, a row, a campaign), does not exist. - 405
method_not_allowed— The path exists, but not with this HTTP method. The Allow header and the error name the methods it takes. - 429
rate_limit_error— More than 60 requests per minute, or more than 3 at the same time, on one key. Wait for the Retry-After header. - 429
daily_limit_reached— The request could take your organization over its daily credit limit. The limit resets at midnight (Europe/Brussels). - 402
insufficient_credits— The credit balance is lower than this request could cost. Nothing was charged. Add credits, or send a smaller request. The error includes code, fix and a link to the credits docs. - 502
upstream_error— The data source did not answer. Retry later. - 503
service_unavailable— The API is temporarily unavailable. Retry later. - 500
internal_error— Something went wrong on our side.
Rate limits
- 60 requests per minute and 3 concurrent requests per key.
- A daily credit limit per organization — 1,000 credits unless agreed otherwise — that resets at midnight Europe/Brussels.
Both answer with 429 and a Retry-After header. Prices are on Credits & costs.
Endpoints
People search, people enrich, the technology data (a company's tech stack, companies using a technology, and finding a technology) and usage answer for every valid key. Company search and enrich, signal, monitor and lead routes answer 403 api_not_enabled for a valid key while that API is closed, and 401 when the key is missing. A method a path does not take answers 405 method_not_allowed with an Allow header, before the key is checked (on /mcp: Allow: POST); a path that does not exist answers 404. The pages below document only routes that exist.
Enrichment
Company to leads
- Find people at companies —
POST /leads - Preview company leads —
POST /leads/preview - Search People —
POST /person/search - Search Companies —
POST /company/search - Look up a company —
GET /companies/lookup - Find Companies Using a Technology —
POST /technologies/companies - Find Technologies —
GET /technologies
People enrichment
- Enrich People —
POST /person/enrich - Preview an enrichment —
POST /person/enrich/preview - Find Phone —
POST /person/phone - Reverse Email Lookup —
POST /person/reverse-email
Company enrichment
- Enrich Companies —
POST /company/enrich - Get Company Tech Stack —
POST /company/tech-stack
Signals
- Funding rounds — Companies that just raised, and who decides there.
- New in a role — People who just started a job you sell to.
- Technology — Companies that use or just adopted a tool.
- LinkedIn engagement — People reacting to a competitor's posts.
- Social listening — People posting about a topic or your brand.
- Events — People posting about a conference.
Searches
- List signal types —
GET /signals - Get a signal type —
GET /signals/{signal_type} - Start a search —
POST /searches - List searches —
GET /searches - Get a search —
GET /searches/{search_id} - List search results —
GET /searches/{search_id}/results - Cancel a search —
POST /searches/{search_id}/cancel - Preview a search —
POST /searches/preview
Monitors
- Create a monitor —
POST /monitors - List monitors —
GET /monitors - Get a monitor —
GET /monitors/{monitor_id} - Update a monitor —
PATCH /monitors/{monitor_id} - Delete a monitor —
DELETE /monitors/{monitor_id} - Preview a monitor —
POST /monitors/preview - List mentions —
GET /mentions
Webhooks
- Create a webhook endpoint —
POST /webhook_endpoints - List webhook endpoints —
GET /webhook_endpoints - Get a webhook endpoint —
GET /webhook_endpoints/{webhook_endpoint_id} - Delete a webhook endpoint —
DELETE /webhook_endpoints/{webhook_endpoint_id} - Test a webhook endpoint —
POST /webhook_endpoints/{webhook_endpoint_id}/test
Your own signals
- List your own signals —
GET /agent-signals - Register your own signal —
POST /agent-signals - Get your own signal —
GET /agent-signals/{key} - Update your own signal —
PATCH /agent-signals/{key} - Delete your own signal —
DELETE /agent-signals/{key} - Report a check of your own signal —
POST /agent-signals/{key}/hits
Outreach
A safe layer between your agent and LinkedIn
- Get LinkedIn status —
GET /outreach/linkedin - Start a LinkedIn sequence —
POST /outreach/linkedin/sequences - Get a LinkedIn campaign —
GET /outreach/linkedin/campaigns/{id} - List LinkedIn events —
GET /outreach/linkedin/events - Stop a LinkedIn sequence —
POST /outreach/linkedin/stop
Activity
- Log activity —
POST /outreach/activity - List activity —
GET /outreach/activity - Check before sending —
POST /outreach/check
Campaigns
- List campaigns —
GET /outreach/campaigns - Create a campaign —
POST /outreach/campaigns
Exclusions
- List exclusions —
GET /exclusions - Add exclusions —
POST /exclusions - Remove an exclusion —
DELETE /exclusions/{id}
Agenda and stages
- Get the agenda —
GET /agenda - List stages —
GET /stages - Set stages —
POST /stages - List the team —
GET /team
Leads table
- List the Leads table —
GET /tables/leads - Save people to the Leads table —
POST /tables/leads - Get one lead —
GET /tables/leads/{id} - Update a lead —
PATCH /tables/leads/{id} - Remove a person from the Leads table —
DELETE /tables/leads/{id}
Companies table
- List the Companies table —
GET /tables/companies - Save companies to the Companies table —
POST /tables/companies - Get one company —
GET /tables/companies/{id} - Update a company —
PATCH /tables/companies/{id} - Remove a company from the Companies table —
DELETE /tables/companies/{id}