> ## 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.

# TAMradar Monitoring

> Skill file for coding agents to configure TAMradar radars and retrieval workflows.

**👤 For humans**

This is a Claude Code skill file. Save it as `.claude/skills/tamradar/SKILL.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:** <a href="https://docs.tamradar.com/agentic/tamradar-skill.md" target="_blank">[https://docs.tamradar.com/agentic/tamradar-skill.md](https://docs.tamradar.com/agentic/tamradar-skill.md)</a>

***

# TAMradar Monitoring

**Full instructions:** [https://docs.tamradar.com/agentic/tamradar-agent.md](https://docs.tamradar.com/agentic/tamradar-agent.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

## 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
```

## Endpoint reference (machine-readable)

* `https://docs.tamradar.com/api-reference/create-company-radar.md`
* `https://docs.tamradar.com/api-reference/create-contact-radar.md`
* `https://docs.tamradar.com/api-reference/create-industry-radar.md`
* `https://docs.tamradar.com/api-reference/poll-updates.md`
* `https://docs.tamradar.com/api-reference/account.md`

## Pre-flight

```bash theme={null}
curl -s "https://api.tamradar.com/v1/account" -H "x-api-key: $TAMRADAR_API_KEY"
```

```json theme={null}
{
  "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

```bash theme={null}
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",
    "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

```bash theme={null}
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

```bash theme={null}
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

```bash theme={null}
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

```bash theme={null}
# 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"
```

```json theme={null}
{
  "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

| Code  | Action                                                      |
| ----- | ----------------------------------------------------------- |
| `401` | STOP — ask user to verify API key                           |
| `402` | STOP — tell user to add funds                               |
| `409` | Extract `radar_id` from `errors[0].reason`, store, continue |
| `400` | Show `errors[].reason` verbatim, ask user to fix            |
| `429` | Wait, retry max 3×                                          |
| `5xx` | Retry 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.
```
