Adsmom · OpenAPI Overlay 1.0.0
API Evangelist enhancements — Adsmom REST API
6 actions
6 updates
documentation
Derived by API Evangelist
Built from the contracts Adsmom publishes. Adsmom did not publish this file.
What the actions change
contacttermsOfServicex-privacy-policyx-provider-slugdescriptionx-oauth-issuerx-oauth-token-endpointx-oauth-authorization-endpoint
Targets 6
$.servers
$.info
$.tags
$.components.securitySchemes.oauth
$.paths['/api/v1/usage'].get
$
OpenAPI Overlay
overlay: 1.0.0
info:
title: API Evangelist enhancements — Adsmom REST API
version: 1.0.0
x-provenance:
generated: '2026-08-13'
method: generated
source: >-
Generated against openapi/adsmom-inc-openapi.json, harvested verbatim from
https://api.adsmom.com/api/v1/openapi.json on 2026-08-13. This overlay
records API Evangelist's enhancements WITHOUT mutating the harvested spec.
Every value below is sourced from an observed probe, a published Adsmom
document, or a sibling artifact in this repo — nothing is invented.
extends: openapi/adsmom-inc-openapi.json
note: >-
The single most consequential action here is the servers[] repair. The
published spec declares `servers: [{url: "/"}]`, a relative server naming no
host, so a generated client has no base URL. The concrete host is established
by the fact that the document is itself served from
https://api.adsmom.com/api/v1/openapi.json and every declared /api/v1/* path
resolves there.
actions:
- target: $.servers
description: >-
Replace the hostless relative server with the concrete production host.
Evidence: the spec is served from https://api.adsmom.com/api/v1/openapi.json,
and GET https://api.adsmom.com/api/v1/usage returns an RFC 9457 401 (a routed
endpoint) while GET https://api.adsmom.com/api/v1/nope returns 404.
update:
- url: https://api.adsmom.com
description: Production
- target: $.info
description: Add the contact, licence and terms Adsmom publishes on its own site but omits from the spec (info.contact is an empty object upstream).
update:
contact:
name: Adsmom Inc. (SIA Adsmom)
url: https://adsmom.com/product/api
termsOfService: https://adsmom.com/terms
x-privacy-policy: https://adsmom.com/privacy
x-provider-slug: adsmom-inc
- target: $.tags
description: >-
Populate the empty root tags[] with the 14 tag names the operations already
use, and describe each. Names are copied verbatim from the operations; the
descriptions summarise the operations grouped under them.
update:
- {name: 'Account', description: 'Plan, credit balance, tracked-advertiser count and the per-minute rate limit for the calling account.'}
- {name: 'Explore · Meta Ads', description: 'List, batch-hydrate and read Meta ads from tracked advertisers, plus daily reach timeseries.'}
- {name: 'Explore · TikTok Ads', description: 'List, batch-hydrate and read TikTok ads, their reach timeseries, and point-in-time snapshots.'}
- {name: 'Explore · Google Ads', description: 'List, batch-hydrate and read Google ads from tracked advertisers.'}
- {name: 'Explore · LinkedIn Ads', description: 'List, batch-hydrate and read LinkedIn ads, their impression-bracket timeseries, and snapshots.'}
- {name: 'Insights · Meta', description: 'Track and untrack Meta advertisers; AI insight summaries and weekly reports.'}
- {name: 'Insights · TikTok', description: 'Track and untrack TikTok advertisers; AI insight summaries and weekly reports.'}
- {name: 'Insights · Google', description: 'Track and untrack Google advertisers; AI insight summaries and weekly reports.'}
- {name: 'Insights · LinkedIn', description: 'Track and untrack LinkedIn advertisers; AI insight summaries and weekly reports.'}
- {name: 'Insights · TikTok Organic', description: 'Track and untrack TikTok organic accounts; AI summaries and weekly organic reports.'}
- {name: 'Insights · Instagram Organic', description: 'Track and untrack Instagram organic accounts; AI summaries and weekly organic reports.'}
- {name: 'Analytics · Meta', description: 'Reach over time and by region, activity counts, share of voice (Lorenz/Gini), targeting and top ads.'}
- {name: 'Analytics · TikTok', description: 'Reach, activity, regions, share of voice, runtime distribution, targeting overlap and creative mix.'}
- {name: 'Analytics · Google', description: 'Activity and impressions, regions, share of voice, runtime distribution, creative breakdown and per-advertiser stats.'}
- target: $.components.securitySchemes.oauth
description: >-
Annotate the bearer scheme with the real OAuth 2.0 endpoints and scopes the
provider publishes anonymously at
https://app.adsmom.com/.well-known/oauth-authorization-server. The upstream
scheme is a bare http/bearer with no issuer, endpoints or scopes.
update:
description: >-
OAuth 2.0 bearer JWT issued by https://app.adsmom.com. Server-to-server
clients use client_credentials; interactive MCP clients use
authorization_code with PKCE (S256). Credentials are created from the
Integrations section of a paid Adsmom account.
x-oauth-issuer: https://app.adsmom.com
x-oauth-token-endpoint: https://app.adsmom.com/oauth/token
x-oauth-authorization-endpoint: https://app.adsmom.com/oauth/authorize
x-oauth-registration-endpoint: https://app.adsmom.com/oauth/register
x-oauth-jwks-uri: https://app.adsmom.com/.well-known/jwks.json
x-oauth-scopes-supported: [mcp:invoke, api:read, api:write, billing:read]
x-protected-resource-metadata: https://app.adsmom.com/.well-known/oauth-protected-resource
- target: $.paths['/api/v1/usage'].get
description: >-
getUsage is the only operation with no security requirement in the published
spec, but it returns 401 unauthenticated in production. Apply the scheme so
generated clients send a token.
update:
security:
- oauth: []
x-observed-unauthenticated-status: 401
- target: $
description: >-
Record the runtime semantics API Evangelist observed on the wire that the
contract does not state. These are document-level annotations, not schema
changes.
update:
x-error-format: rfc9457
x-error-media-type: application/problem+json
x-error-fallback-media-type: application/json
x-error-catalog: errors/adsmom-inc-problem-types.yml
x-request-id-header: x-request-id
x-pagination-style: cursor
x-pagination-params: [cursor, limit]
x-pagination-max-limit: 25
x-pagination-response-cursor: undeclared
x-idempotency-supported: false
x-rate-limit-headers: none
x-rate-limit-discovery-operation: getUsage
x-signed-media-url-ttl: ~10 minutes (media_url and thumbnail_url expire; re-hydrate rather than cache)
x-mcp-endpoint: https://api.adsmom.com/mcp
x-conventions: conventions/adsmom-inc-conventions.yml
x-data-model: data-model/adsmom-inc-data-model.yml
x-rate-limits: rate-limits/adsmom-inc-rate-limits.yml
x-authentication: authentication/adsmom-inc-authentication.yml
x-gaps-not-fixable-by-overlay:
- No 4xx/5xx responses are declared on any of the 78 operations. An overlay could
bolt a Problem schema onto every response, but the scorer parses the ORIGINAL
spec, and inventing declared error bodies Adsmom has not published would
misrepresent the contract. This is a provider fix, not an overlay fix.
- No operation-level request/response examples exist. Schema-level `example`
values are present on many properties and are real; operation examples are not.
- The list operations return bare arrays, so a next-cursor cannot be added
without changing the response shape the API actually returns.
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/adsmom-inc-openapi-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.