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.

Expert help

Need help tracking this in your app?

Our team sets up analytics pipelines for mobile and web teams every day. Talk to us and get your first events flowing in under an hour.

Talk to an expert