Docs

GET /v1/signals

Stream a live feed of every crash, slow API call, and friction signal from your apps — ready for AI agent consumption.

API

GET /v1/signals

A real-time feed of every error, slow path, and friction point — the same surface your AI agent reads.

Request

GET https://api.coolcoding.co.uk/v1/signals
GET https://api.coolcoding.co.uk/v1/signals/{app_id}

Query Parameters

Parameter Type Required Default Description
app_id string null Filter to a specific app (or pass in URL path)
type string all crash · anr · network_error · slow_render · friction
severity string all critical · warning · info
from string -1h ISO 8601 or relative (-1h, -24h, -7d)
to string now ISO 8601 or now
limit integer 50 Max results returned. Min 1, max 500
stream boolean false Set true for Server-Sent Events (SSE) stream

Example Request

curl -G https://api.coolcoding.co.uk/v1/signals \
  -H "Authorization: Bearer cc-YOUR_API_KEY" \
  --data-urlencode "app_id=my-app" \
  --data-urlencode "type=crash" \
  --data-urlencode "severity=critical" \
  --data-urlencode "from=-24h" \
  --data-urlencode "limit=20"

Python:

import requests

response = requests.get(
    "https://api.coolcoding.co.uk/v1/signals",
    headers={"Authorization": "Bearer cc-YOUR_API_KEY"},
    params={
        "app_id": "my-app",
        "type": "crash",
        "severity": "critical",
        "from": "-24h",
        "limit": 20
    }
)
print(response.json())

JavaScript:

const params = new URLSearchParams({
  app_id: "my-app",
  type: "crash",
  severity: "critical",
  from: "-24h",
  limit: 20
});

const response = await fetch(`https://api.coolcoding.co.uk/v1/signals?${params}`, {
  headers: { "Authorization": "Bearer cc-YOUR_API_KEY" }
});
console.log(await response.json());

Response

{
  "signals": [
    {
      "id": "sig_x9f2a1",
      "app_id": "my-app",
      "type": "crash",
      "severity": "critical",
      "timestamp": "2026-05-13T09:00:00Z",
      "session_id": "sess_abc123",
      "platform": "ios",
      "app_version": "2.4.1",
      "payload": {
        "exception": "NullPointerException",
        "stack_trace": "at com.myapp.Main:42",
        "fatal": true,
        "device_model": "iPhone 15",
        "os_version": "iOS 18.1"
      },
      "score": 0.97
    }
  ],
  "total": 1,
  "from": "2026-05-12T09:00:00Z",
  "to": "2026-05-13T09:00:00Z",
  "request_id": "req_8b2d4e",
  "usage": { "credits": 1 }
}

Streaming (SSE)

Set stream=true to receive a live Server-Sent Events feed:

curl -N "https://api.coolcoding.co.uk/v1/signals?app_id=my-app&stream=true" \
  -H "Authorization: Bearer cc-YOUR_API_KEY"

Each event arrives as:

data: {"id":"sig_x9f2a1","type":"crash","severity":"critical",...}

This is the primary endpoint for AI agent subscriptions. Point your agent here and let CC do the watching.

Error Responses

Code Meaning
400 Bad Request — missing or invalid parameters
401 Unauthorized — API key missing or invalid
429 Too Many Requests — rate limit exceeded
432 Plan limit exceeded — upgrade your plan
500 Internal Server Error

429 example:

{
  "error": "Rate limit exceeded. Please reduce request frequency.",
  "retry_after": 60
}

Implement retry logic that respects the retry-after header value.