mySDRDocs

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.

GEThttps://mysdr.app/api/v1/agent-signals
View Markdown

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

  • status string — Only active or only paused signals. One of: active, paused.

Response

  • object string · required — Always list. One of: list.
  • total integer · required — Signals that match.
  • data object[] · required — The signals, as GET /agent-signals/{key} gives them.
  • dashboard_url string · required — The Signals page in mySDR.

Credits

Free. This call never uses credits.

Errors

  • 400 invalid_request — A status that is not active or paused.
  • 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"
}