API reference
Get your own signal
One of your own signals, as GET /agent-signals lists it. To read what it caught, filter the tables on it: GET /tables/leads?agent_signal={key} or GET /tables/companies?agent_signal={key}.
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.
Path parameters
keystring· required — The key of your signal (hiring_spike).
Response
objectstring· required — Alwaysagent_signal. One of:agent_signal.keystring· required — Your own name for it: lowercase letters, digits and_.namestring· required — As the user sees it.descriptionstring | null· required — What it watches.sourcestring | null· required — Where you look.source_urlstring | null· required — A link to that source.schedulestring | null· required — How often you check. One of:hourly,daily,weekly,monthly,once,on_demand.statusstring· required —activeorpaused. One of:active,paused.last_checked_atstring | null· required — When you last reported a check.next_check_atstring | null· required — When you said you check next.check_overdueboolean· required — True when the signal is active andnext_check_atis more than an hour ago: the user sees "Check overdue".last_check_notestring | null· required — What your last check did.caughtobject· required —leadsandcompanies: how many people and companies it caught, each counted once.last_hit_atstring | null· required — When it last caught something.viastring | null· required — The name of the key that last registered it or reported a check ("Grok Bot").created_atstring· required — When it was registered.updated_atstring· required — When it last changed.results_urlstring· required — The Leads or Companies table in mySDR on this signal (where it caught the most).dashboard_urlstring· required — The Signals page in mySDR.
Credits
Free. This call never uses credits.
Errors
- 400
invalid_request— A key that is not valid. - 404
not_found— Your organization has no signal with this key. - 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/hiring_spike" \
-H "Authorization: Bearer $MYSDR_API_KEY"
JavaScript
const response = await fetch('https://mysdr.app/api/v1/agent-signals/hiring_spike', {
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/hiring_spike",
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": "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"
}