# Query service-scoped events programmatically.

> Use the TrafficWar query API with a Bearer service key to retrieve filtered event rows without exposing object storage.

Clients never read shared Parquet objects directly. The query API applies service identity, time bounds, suppression, and retention rules before returning event rows.

## Authenticated request



```
curl "https://api.trafficwar.tech/query?from=2026-08-24T10:00:00Z&to=2026-08-24T11:00:00Z&limit=100" \
  -H "Authorization: Bearer $TRAFFICWAR_API_KEY"
```

## Service scope is fixed by the key

A public query is pinned to the Bearer key’s service. The caller cannot expand that request to another service by adding query parameters.

## Operational and client time

Time-range filtering uses received time because it drives partitions, retention, and metric windows. Responses also include client time when the original event supplied a valid timestamp.

## Related

- [Use stable event identities that stay useful at scale.](https://trafficwar.tech/docs/event-schema.md)
- [Send events over the TrafficWar ingest API.](https://trafficwar.tech/docs/ingest-api.md)
- [Move from live traffic to measurable production behavior.](https://trafficwar.tech/features/event-analytics.md)
