API reference
List your own signals
Your own signals in this organization, newest first, with when you last checked and how many people and companies each caught. Read it at the start of a session to know which signals to run, and skip the paused ones.
A signal your agent runs itself, with its own tools: hiring spikes on careers pages, posts on X, a newsletter, a list in the CRM. Register it and the user sees it on the Signals page of mySDR, next to the signals mySDR runs: what it watches, where, how often, when you last checked and what it caught. mySDR does not run, schedule or check it: it shows what you report. These routes are the tools save_agent_signal, log_signal_hits, list_agent_signals and delete_agent_signal of the assistant server.
Authentication
Send Authorization: Bearer gtk_…. Create the key under Connect assistant → API keys. Every gtk_ key can call these routes, also while the Signals API is closed. A missing, invalid or revoked key is 401.
Query parameters
statusstring— Only active or only paused signals. One of:active,paused.
Response
objectstring· required — Alwayslist. One of:list.totalinteger· required — Signals that match.dataobject[]· required — The signals, as GET /agent-signals/{key} gives them.dashboard_urlstring· required — The Signals page in mySDR.
Credits
Free. This call never uses credits.
Errors
- 400
invalid_request— Astatusthat is notactiveorpaused. - 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. - 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. - 503
service_unavailable— The API is temporarily unavailable. Retry later. - 500
internal_error— Something went wrong on our side.
Example
cURL
curl "https://mysdr.app/api/v1/agent-signals?status=active" \
-H "Authorization: Bearer $MYSDR_API_KEY"
JavaScript
const response = await fetch('https://mysdr.app/api/v1/agent-signals?status=active', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.MYSDR_API_KEY}`
}
});
const body = await response.json();
Python
import json
import os
import urllib.request
request = urllib.request.Request(
"https://mysdr.app/api/v1/agent-signals?status=active",
headers={
"Authorization": f"Bearer {os.environ['MYSDR_API_KEY']}"
},
method="GET",
)
with urllib.request.urlopen(request) as response:
body = json.load(response)
Example response
{
"object": "list",
"total": 1,
"data": [
{
"object": "agent_signal",
"key": "hiring_spike",
"name": "Hiring spike on careers pages",
"description": "Companies whose careers page lists at least 10 open roles, up from fewer than 5.",
"source": "Careers pages",
"source_url": null,
"schedule": "daily",
"status": "active",
"last_checked_at": "2026-10-25T07:00:00.000Z",
"next_check_at": "2026-10-26T08:00:00.000Z",
"check_overdue": false,
"last_check_note": "140 careers pages, 3 spikes",
"caught": {
"leads": 0,
"companies": 9
},
"last_hit_at": "2026-10-25T07:00:00.000Z",
"via": "Grok Bot",
"created_at": "2026-10-20T08:00:00.000Z",
"updated_at": "2026-10-25T07:00:00.000Z",
"results_url": "https://mysdr.app/en/gtm/companies?signal=Hiring+spike+on+careers+pages"
}
],
"dashboard_url": "https://mysdr.app/en/gtm/signals"
}