Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.tamradar.com/llms.txt

Use this file to discover all available pages before exploring further.

๐Ÿ‘ค For humans This is a Claude Code skill file. Save it as .claude/skills/tamradar.md in your project. Claude Code will load it automatically when you mention TAMradar, or invoke it directly with /tamradar. Give this link to your agent: https://tamradar.readme.io/reference/claude-skillmd.md
Note for readme.io viewers: If copying from this page, --- YAML fences may render as *** โ€” replace them with --- when saving locally.

TAMradar Monitoring

Full instructions: https://tamradar.readme.io/reference/tamradar-agentmd.md Base URL: https://api.tamradar.com ยท Auth: x-api-key: $TAMRADAR_API_KEY on every request โ€” no Bearer prefix

Key Rules

  • Auth: check $TAMRADAR_API_KEY in env first โ€” if unset, ask the user
  • webhook_url: optional โ€” omit for poll-only radars (default); include only if the user provides a real webhook URL for push delivery
  • Persistence: save (domain, radar_type, radar_id) to ./tamradar-radars.jsonl after every 201
  • Idempotency: check ./tamradar-radars.jsonl before every POST โ€” skip if already exists
  • Singles vs bulk: โ‰ค10 targets โ†’ single POSTs; >10 โ†’ POST /v1/radars/bulk (async queue, max 1000 items per request)
  • 409 is not an error โ€” extract radar_id from errors[0].reason, store it, move on
  • Polling response: field is updates[] โ€” not data[]
  • Polling cap: max 10 radar_id values per call โ€” split into multiple requests if needed
  • Filters: omit = all; empty array [] = 400 error; departments + seniorities = AND across, OR within
  • Filter values: NEVER invent โ€” use only the exact values in the full doc or you get 400

Flow

1. PRE-FLIGHT  โ†’ GET  /v1/account           (check balance โ€” block if $0)
2. CREATE      โ†’ POST /v1/radars/companies  (company signals)
                 POST /v1/radars/contacts   (person signals)
                 POST /v1/radars/industry   (industry-wide signals)
                 POST /v1/radars/bulk       (>10 targets)
3. RETRIEVE    โ†’ GET  /v1/updates
4. MANAGE      โ†’ DELETE /v1/radars/:id

Pre-flight

curl -s "https://api.tamradar.com/v1/account" -H "x-api-key: $TAMRADAR_API_KEY"
{
  "data": {
    "balance_remaining_usd": 42.50,
    "account": { "active_radars": 12, "total_updates_found": 3847 },
    "usage": { "month": "2026-05", "balance_used_usd": 7.50, "updates_found": 142 }
  }
}
balance_remaining_usd == 0 โ†’ STOP ยท < 5 โ†’ WARN and confirm ยท >= 5 โ†’ proceed

Create โ€” company

curl -s -X POST "https://api.tamradar.com/v1/radars/companies" \
  -H "x-api-key: $TAMRADAR_API_KEY" -H "Content-Type: application/json" \
  -d '{
    "domain": "openai.com",
    "radar_type": "company_job_openings",
    "departments": ["Engineering"],
    "seniorities": ["Senior", "Director"],
    "custom_fields": { "crm_account_id": "001" }
  }'
Domain accepts any format (https://www.openai.com/about โ†’ normalized to openai.com). Best practice: bare domain.

Create โ€” contact

curl -s -X POST "https://api.tamradar.com/v1/radars/contacts" \
  -H "x-api-key: $TAMRADAR_API_KEY" -H "Content-Type: application/json" \
  -d '{
    "radar_type": "contact_job_changes",
    "domain": "openai.com",
    "profile_url": "https://www.linkedin.com/in/samaltman",
    "full_name": "Sam Altman",
    "custom_fields": { "crm_contact_id": "003" }
  }'

Create โ€” industry

curl -s -X POST "https://api.tamradar.com/v1/radars/industry" \
  -H "x-api-key: $TAMRADAR_API_KEY" -H "Content-Type: application/json" \
  -d '{ "radar_type": "industry_funding_rounds" }'

Persist after every 201

echo '{ "input_domain": "openai.com", "input_radar_type": "company_job_openings", "radar_id": "c70813b3-...", "created_at": "2026-05-01T09:05:00Z" }' \
  >> ./tamradar-radars.jsonl

Poll for findings

# By radar ID (max 10 IDs)
curl -s "https://api.tamradar.com/v1/updates?radar_id=id1,id2&limit=50" \
  -H "x-api-key: $TAMRADAR_API_KEY"

# Incremental โ€” store discovered_at from last result, pass as since
curl -s "https://api.tamradar.com/v1/updates?since=2026-05-01T08:00:00Z&limit=100" \
  -H "x-api-key: $TAMRADAR_API_KEY"
{
  "updates": [
    {
      "update_id": "550e8400-...",
      "update_type": "radar_finding",
      "discovered_at": "2026-05-01T08:30:00Z",
      "data": { "radar_id": "c70813b3-...", "radar_type": "company_job_openings", "domain": "openai.com" },
      "content": { }
    }
  ],
  "has_more": false,
  "next_cursor": null
}
Paginate: while has_more: true โ†’ fetch ?cursor={next_cursor}. Findings retained 60 days.

Error handling

CodeAction
401STOP โ€” ask user to verify API key
402STOP โ€” tell user to add funds
409Extract radar_id from errors[0].reason, store, continue
400Show errors[].reason verbatim, ask user to fix
429Wait, retry max 3ร—
5xxRetry once, then STOP and report error_id

Summary (always present when done)

TAMradar setup complete.

Balance: $X.XX remaining

Radars active:
  company_job_openings     ยท openai.com  ยท c70813b3-...
  contact_job_changes      ยท Sam Altman  ยท a4f28c91-...  (already existed โ€” skipped POST)
  industry_funding_rounds  ยท โ€”           ยท f9d01c55-...

Failures: None

Mapping saved to: ./tamradar-radars.jsonl

Poll now:  GET /v1/updates?radar_id=c70813b3-...,a4f28c91-...&limit=50
           (max 10 IDs per call โ€” split if needed)

Findings retained 60 days.