StreetMetrics · OpenAPI Overlay 1.0.0
API Evangelist enhancements — StreetMetrics Public API
6 actions
6 updates
documentation
Derived by API Evangelist
Built from the contracts StreetMetrics publishes. StreetMetrics did not publish this file.
What the actions change
securitydescriptiontagscontacttermsOfServicex-documentation
Targets 5
$
$.paths['/auth/authenticate'].post
$.info
$.servers
$.components.schemas.ErrorResponseDto
OpenAPI Overlay
overlay: 1.0.0
info:
title: API Evangelist enhancements — StreetMetrics Public API
version: 1.0.0
x-generated: '2026-08-12'
x-method: generated
x-source: openapi/streetmetrics-public-api-openapi.json
x-extends: openapi/streetmetrics-public-api-openapi.json
x-note: >-
Non-destructive Overlay 1.0.0 capturing API Evangelist's enhancements to the StreetMetrics Public API
definition. It is never applied to the original: the harvested spec in openapi/ and
openapi/_original/ stays exactly as StreetMetrics published it. Every action below fixes something the
published contract states about itself and gets wrong or leaves out — most importantly a security
scheme that is defined but never applied, and a tag list that declares one tag while the operations
use eleven.
actions:
# 1. Apply the bearer scheme the spec defines but never uses.
- target: $
description: >-
components.securitySchemes.bearer is declared but no root-level `security` and no operation-level
`security` exists anywhere in the document, so every generated client treats all 54 operations as
anonymous. Live probing shows the opposite — GET https://dashboard.streetmetrics.io/v3/public/markets
returns 401 UNAUTHORIZED without a token. Apply the scheme globally.
update:
security:
- bearer: []
# 2. Exempt the token-minting operation from the global requirement.
- target: $.paths['/auth/authenticate'].post
description: >-
POST /auth/authenticate mints the bearer token from an api-key header plus platform email/password,
so it must not require the bearer scheme it produces.
update:
security: []
# 3. Declare the tags the operations actually use.
- target: $
description: >-
tags declares a single entry, "public", which no operation references; the 54 operations are tagged
across eleven groups. Replace the declaration with the tags in use so the reference renders and
tag-based tooling (including our own split-by-tag refinement) does not silently drop operations.
update:
tags:
- name: Authentication
description: Mint the JWT bearer token used by every other operation.
- name: Campaigns
description: Campaign records — the top of the out-of-home buy hierarchy.
- name: Ad Groups
description: Transit and stationary ad groups (flights) within a campaign, and the assets, frames
and creatives attached to them.
- name: Assets
description: Moving units (vehicles) that carry transit advertising, plus asset owners and
compatibility lookups.
- name: Frames
description: Fixed advertising faces with physical geometry and exposure characteristics.
- name: Creatives
description: Creative records attachable to stationary or transit ad groups.
- name: Media
description: Media products and product types describing the inventory a face belongs to.
- name: Markets
description: Market reference data.
- name: Attribution Studies
description: Attribution studies and their conversion rollups by date, ad group and unit.
- name: Pixels
description: Conversion pixels and their bindings to campaigns and attribution studies.
- name: Reporting
description: Impressions, demographics, affinities and uniques-and-frequency rollups.
# 4. Contact + license metadata that info leaves empty.
- target: $.info
description: >-
info.contact is an empty object and info.description is an empty string. Fill in the published
documentation and support routes so the contract can be read without the portal.
update:
description: >-
Public REST API for the StreetMetrics out-of-home advertising measurement, planning and
attribution platform. Covers campaigns, transit and stationary ad groups, assets, frames,
creatives, markets, media, attribution studies, conversion pixels, and impression, demographic,
affinity and uniques-and-frequency reporting. Authenticate with POST /auth/authenticate to
exchange StreetMetrics platform credentials (with an api-key header) for a JWT bearer token, then
send it as `Authorization: Bearer <token>` on every other operation.
contact:
name: StreetMetrics Support
url: https://streetmetrics.com/contact
termsOfService: https://streetmetrics.com/privacy-terms/terms
x-documentation: https://docs.streetmetrics.com/reference/ad-groups
# 5. Record the base-path divergence between the two published copies of this spec.
- target: $.servers
description: >-
Two copies of this definition are published and they do not agree on where the paths hang. The live
NestJS document at https://dashboard.streetmetrics.io/docs-json declares the same
servers[] entry but prefixes every path with /public/, which concatenates to
/v3/public/public/... and 404s. The ReadMe-published copy (paths without the prefix) resolves
correctly and is the one harvested here. Annotate the server so a consumer knows which copy to
trust.
update:
- url: https://dashboard.streetmetrics.io/v3/public/
description: >-
Production. Paths in this document are relative to this server. Note that the live /docs-json
copy of this spec repeats the /public/ segment in its paths; use this document's paths.
# 6. Document the rate-limit reality on the 429 responses.
- target: $.components.schemas.ErrorResponseDto
description: >-
Enrich the error schema description with the observed errorCode vocabulary — the published example
is the placeholder "ERR001", while live responses return UNAUTHORIZED and BAD_REQUEST.
update:
description: >-
Standard error envelope. Observed errorCode values include BAD_REQUEST (400) and UNAUTHORIZED
(401). Errors are served as application/json, not application/problem+json. No request/correlation
id is returned; `timestamp` and `path` are the only handles for support escalation.
Work with this as data
Every overlay here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for openapi overlays
4 MCP tools reach this
find_overlaysBrowse and filter every overlay in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This overlay
curl "https://apis.io/api/v1/overlays/streetmetrics-public-api-overlay"
All openapi overlays
curl "https://apis.io/api/v1/overlays?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.