canonical: https://jentic.com/apis/o2.cz/o2-sociodemo

# O2 Cz Socio-demo API

The O2 Socio-demo API exposes hour-aggregated counts of people present at a Czech location, broken down by age band or gender. The data is anonymised and derived from O2 Czech Republic mobile network signalling, so each query returns a profile of visitor composition rather than individual identifiers. It is suited to retail siting, public sector planning, and tourism analytics where the question is who is at a place during a particular time window.

## For AI agents

Retrieve anonymised hour-aggregated counts of people present at a Czech location, split by age or gender, derived from O2 mobile signalling.

## Scope

Does not return individual identities, GPS traces, or income or ethnicity data - use for anonymised, time-aggregated age and gender presence at Czech locations only.

## Capabilities

- Pull hour-aggregated counts of people at a Czech location split by age band
- Pull hour-aggregated counts of people at a Czech location split by gender
- Compare daytime versus evening visitor composition at a single location
- Inspect dataset and application version metadata via /info before running batch queries
- Feed anonymised demographic presence data into siting, planning, and tourism dashboards

## Use cases

### Site selection demographic profiling

Compare two candidate retail sites in the Czech Republic by querying age and gender presence at each ZSJ across trading hours. The Socio-demo API returns anonymised, hour-aggregated counts, which lets a property analyst rank sites by demographic fit without primary research. Two days of calls produces a defensible weekday-vs-weekend profile per site.

Example prompt: Pull /age and /gender for two candidate ZSJs across the last 30 days and rank them by share of the target age band during trading hours

### Public sector service planning

Plan local services such as transport, libraries, or clinics by retrieving age and gender presence at relevant ZSJs. Hour-level granularity reveals when older or younger residents are at a location, which informs scheduling. Because the data is anonymised, public sector teams can publish derived planning maps without re-identification risk.

Example prompt: Pull /age for residential ZSJs and report the share of presence in the 65+ age band by hour to inform clinic opening hours

### Tourism audience composition

Quantify who visits a tourist destination across the season by aggregating /age and /gender presence at the destination ZSJ. Tourism boards can differentiate weekday domestic visitors from weekend leisure visitors and tune marketing accordingly. The output is suitable for board reports and sponsor decks.

Example prompt: Aggregate /age and /gender at a tourist destination ZSJ across summer weekends and report the dominant age band per hour

### AI agent integration via Jentic

An analytics agent searches Jentic for Czech location demographics, loads the /age and /gender operations, and answers questions like 'what is the typical visitor age mix at this attraction on Saturday afternoons?'. Jentic returns validated operation schemas so the agent can call them with location identifiers and translate the response into a written summary.

Example prompt: Use Jentic to search 'czech location age and gender presence', load both operations, and execute them for a destination ZSJ across the last weekend

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | `/age/{location}` | Presence at a location aggregated by age band |
| GET | `/gender/{location}` | Presence at a location aggregated by gender |
| GET | `/info` | Application and data version information |

## Key resources

- **Age** — Hour-aggregated counts of people present at a location by age band
- **Gender** — Hour-aggregated counts of people present at a location by gender
- **Info** — Application and data version metadata

## Why Jentic

- **Setup:** Wiring the O2 Socio-demo API by hand means targeting the developer.o2.cz sandbox host, handling any production-access step yourself, and building your own retry and rate-limit handling. Through Jentic you install once, import the Socio-demo API from the API Directory, store any production key once, and your agent calls it.
- **Permission scoping:** This API returns anonymised, time-aggregated age and gender presence at locations through read-only GETs, so scope it by operation: limit the agent to the age, gender, and info operations it needs and nothing else. You choose which operations it may call, so no other behaviour runs unless you add it.
- **Credential handling:** Any production access key is stored once, encrypted, by your own Jentic One instance and injected at execution time, so the agent never sees the raw key. Sandbox calls that need no auth still flow through Jentic's logging and retry layer.
- **Discovery method:** Agents search Jentic by intent such as 'age and gender at a Czech location', and Jentic returns the /age and /gender operations with their input schemas so the agent calls the right endpoint without reading the underlying spec.

## Related APIs

- **O2 Mobility API** — Same O2 Liberty programme - adds origin-destination flow counts between residential units
- **HERE Maps APIs** — Global location intelligence - broader geography but without anonymised mobile-derived demographic profiles
- **Google Analytics Data API** — Web and app audience analytics rather than physical-presence demographics - different signal source

## FAQ

### What authentication does the O2 Socio-demo API use?

The published spec for the sandbox base URL declares no security schemes, so `/age/{location}`, `/gender/{location}`, and /info on the sandbox host go through unauthenticated. Production Liberty programme keys are stored in your Jentic One instance and injected at execution time when used through Jentic, never appearing in the agent's prompt.

### Can I get an age and gender breakdown for a Czech location?

Yes. GET `/age/{location}` returns hour-aggregated counts split by age band, and GET `/gender/{location}` returns hour-aggregated counts split by gender for the requested ZSJ. The values are anonymised and derived from O2 Czech Republic mobile signalling.

### Does the Socio-demo API expose individual user demographics?

No. The API only returns aggregated counts at hour resolution. There are no endpoints that link demographics to individual people, devices, or trajectories, which keeps the dataset within Czech privacy expectations.

### What are the rate limits for the O2 Socio-demo API?

The OpenAPI spec does not publish explicit rate limits for the sandbox endpoint. Treat sandbox calls as best-effort and contact libertyapi@o2.cz for production quotas. Through Jentic, the agent loop can pace calls to avoid bursts.

### How do I pull a demographic profile through Jentic?

Install the SDK with pip install jentic, search 'czech location age and gender presence', load GET `/age/{location}` and GET `/gender/{location}`, and execute them for the chosen ZSJ. Jentic returns the JSON so the agent can produce a per-hour profile without reading the swagger directly.

### How do I check that the dataset has been refreshed?

Call GET /info. It returns application and data version strings, so a pipeline can detect when a new extract is available and pin a known version for reproducible reporting.

### Can I limit what my agent is allowed to do with the O2 Socio-demo API?

Yes. Because you self-host Jentic One, your own rules decide which of this API's read-only operations the agent may call, so you can allow the age and gender presence lookups while blocking the info version check, or expose only the operations a given task needs. The API is entirely GET-based and returns anonymised, hour-aggregated counts, so scoping is per operation and no other behaviour runs unless you enable it. Any production access key stays in your own instance and is injected at call time, so the agent never handles the raw credential.
