2s · OpenAPI Overlay 1.0.0

API Evangelist overlay for the 2s OpenAPI

Enhancements API Evangelist derived while profiling 2s on 2026-09-19: tag declarations from the provider's catalog.txt, the error envelope observed live, the 429/503 throttle responses documented in the provider's changelog, discovery-document cross-links, and idempotency/reversibility markers quoted from operation descriptions. The original spec is never mutated; apply this overlay to openapi/2s-io-openapi.json.

27 actions 27 updates documentation extends openapi/2s-io-openapi.json
Generated by API Evangelist Written by API Evangelist tooling for 2s's API. It is a proposal applied on top of the contract, not a document 2s publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-reversal-ofx-idempotentx-idempotency-basisx-refundx-restoretermsOfServicex-apievangelist-notex-discovery

Targets 18 · first 16 shown; the file carries all of them

$.info
$
$.servers[0]
$.components.responses
$.components.schemas
$.components.responses.BadRequest
$.paths.*[?(@.operationId)]
$.paths['/api/lock/release'].post
$.paths['/api/watchers/cancel'].post
$.paths['/api/pubsub/create-topic'].post
$.paths['/api/store/kv-delete'].post
$.paths['/api/store/doc-delete'].post
$.paths['/api/store/vector-delete'].post
$.paths['/api/store/blob-delete'].post
$.paths['/api/text/redact'].post
$.paths['/api/schedule/cancel'].post

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist overlay for the 2s OpenAPI
  version: '2026-09-19'
  description: 'Enhancements API Evangelist derived while profiling 2s on 2026-09-19: tag declarations from the
    provider''s catalog.txt, the error envelope observed live, the 429/503 throttle responses documented in the
    provider''s changelog, discovery-document cross-links, and idempotency/reversibility markers quoted from operation
    descriptions. The original spec is never mutated; apply this overlay to openapi/2s-io-openapi.json.'
extends: openapi/2s-io-openapi.json
x-generated: '2026-09-19'
x-method: generated
x-source:
- https://2s.io/openapi.json
- https://2s.io/catalog.txt
- https://2s.io/changelog.json
- https://2s.io/.well-known/2s-attestation.json
- GET https://2s.io/api/validate/iban?trial=1 (observed 400)
actions:
- target: $.info
  update:
    termsOfService: null
    x-apievangelist-note: No terms of service or privacy policy page exists on 2s.io (all conventional paths 404,
      2026-09-19); the status page carries the only published commitments.
- target: $.info
  description: Name the discovery documents the provider publishes but the spec does not reference
  update:
    x-discovery:
      apisJson: https://2s.io/apis.json
      apiCatalog: https://2s.io/.well-known/api-catalog
      llmsTxt: https://2s.io/llms.txt
      mcp: https://2s.io/mcp
      mcpServerCard: https://2s.io/.well-known/mcp/server-card.json
      a2aAgentCard: https://2s.io/.well-known/agent-card.json
      x402Manifest: https://2s.io/.well-known/x402
      status: https://2s.io/status.json
      changelog: https://2s.io/changelog.json
      attestation: https://2s.io/.well-known/2s-attestation.json
- target: $
  description: Declare the 112 tags the operations already use, with the provider's own group descriptions from
    https://2s.io/catalog.txt
  update:
    tags:
    - name: agent
      description: Agent-native knowledge-delta primitive
    - name: agriculture
      description: Drought monitor & USDA stats
    - name: ai
      description: Summarize, translate, extract, screenshot & describe
    - name: airport
      description: Airport lookup & nearest airports
    - name: aviation
      description: METAR, TAF, SIGMET & accident records
    - name: bank
      description: Bank routing lookup
    - name: barcode
      description: Barcode generation
    - name: batch
      description: Run many endpoints in one settled call
    - name: bio
      description: Species, genes & proteins
    - name: bls
      description: BLS time-series data
    - name: book
      description: Book search
    - name: business
      description: Company registries, LEI, KYB & entity screening
    - name: calendar
      description: Business days, holidays, earnings & IPO calendars
    - name: census
      description: ACS demographics & ZIP geographies
    - name: chem
      description: Chemical compound data
    - name: chinese
      description: Chinese data & lookups
    - name: class
      description: Class data & lookups
    - name: climate
      description: Station history & nearest stations
    - name: clinical
      description: ClinicalTrials search & study detail
    - name: code
      description: Repo lookup & code tools
    - name: convert
      description: Currency & unit conversion
    - name: countdown
      description: Countdown GIF generator
    - name: country
      description: Country reference data
    - name: crypto
      description: Prices, gas, fees, DeFi, contracts & on-chain data
    - name: dev
      description: RFC lookup & deploy preflight
    - name: dns
      description: DNS record lookup
    - name: domain
      description: WHOIS, intel, CT logs & email security
    - name: earth
      description: Natural events & planetary now
    - name: econ
      description: FRED series, releases, vintages, yield curve & indicators
    - name: edi
      description: Parse, generate & acknowledge X12 / EDIFACT
    - name: edu
      description: College Scorecard & school lookup
    - name: email
      description: Email address validation
    - name: energy
      description: Prices, generation mix, utility rates & solar resource
    - name: factcheck
      description: Fact-check claim search
    - name: feedback
      description: Send a message to the 2s team
    - name: finance
      description: SEC EDGAR filings, 13F, company facts & FIGI
    - name: flight
      description: Live flight status
    - name: food
      description: UK hygiene ratings & barcode lookup
    - name: fx
      description: Foreign-exchange rates & time series
    - name: geo
      description: Geocoding, elevation, flood zones, IP & dossiers
    - name: geocode
      description: Address ↔ coordinate, forward & reverse
    - name: github
      description: Repos, users, commits, issues, PRs & code search
    - name: gov
      description: 'Federal data: Congress, FEC, FDA, SAM, FEMA & more'
    - name: hash
      description: Hash computation
    - name: health
      description: Hospitals, providers, Medicare, mortality & surveillance
    - name: html
      description: HTML → Markdown conversion
    - name: image
      description: Image compression
    - name: inflation
      description: CPI calculator, rates, expectations & HICP
    - name: ipinfo
      description: Bulk IP geolocation
    - name: iso
      description: ISO currency, language & subdivision codes
    - name: job
      description: Federal job search & occupation codes
    - name: labor
      description: BLS openings, unemployment & wages
    - name: law
      description: OFAC sanctions, case law & dockets
    - name: license
      description: Verify broker, medical, real-estate & trade licenses
    - name: lock
      description: Distributed locks/leases — one agent at a time
    - name: maritime
      description: Vessels, ports & maritime case records
    - name: markets
      description: Exchange open/closed status & market holidays
    - name: medical
      description: ICD-10, NPI, drug labels, approvals & device data
    - name: music
      description: MusicBrainz artists, releases & recordings
    - name: net
      description: ASN / BGP, MAC vendor & RPKI validity
    - name: news
      description: Hacker News items, top stories & web news search
    - name: nonprofit
      description: Nonprofit search & screening
    - name: nutrition
      description: Food & nutrition facts
    - name: occupation
      description: O*NET occupation profiles, search & relations
    - name: paper
      description: DOI metadata lookup
    - name: papers
      description: Academic paper search & citation graphs (arXiv, OpenAlex & more)
    - name: park
      description: US National Park lookup
    - name: patents
      description: USPTO patent search, detail & documents
    - name: person
      description: Cross-registry person lookup
    - name: phone
      description: Phone number normalization
    - name: poi
      description: Points of interest nearby
    - name: predict
      description: Polymarket prediction markets, prices, trades & whales
    - name: product
      description: GTIN / UPC / EAN identity
    - name: property
      description: NYC deeds, parcels, permits & violations
    - name: pubsub
      description: Topics + fan-out signed callbacks for agent coordination
    - name: quakes
      description: Recent earthquakes (USGS)
    - name: queue
      description: 'Durable task queues: enqueue, lease, ack, dead-letter'
    - name: recreation
      description: Recreation.gov facility search
    - name: registry
      description: npm & PyPI package lookups
    - name: research
      description: ORCID authors, ROR orgs & NIH funding
    - name: schedule
      description: Time-driven signed callbacks — cron for agents
    - name: search
      description: Endpoint discovery & web search
    - name: security
      description: CVEs, KEV, EPSS, IOC reputation, headers, exposure
    - name: soil
      description: Soil profiles & USDA hardiness zones
    - name: space
      description: Launches, satellites, exoplanets, sky & space weather
    - name: sports
      description: MLB & NHL schedules, scores & standings
    - name: stocks
      description: Quotes, metrics, analyst, earnings, news, gov/alt data
    - name: store
      description: 'Wallet-keyed persistence: KV, documents, vector search & private files'
    - name: sunrise
      description: Sunrise / sunset times
    - name: tax
      description: VAT validation & EU VAT-rate tables
    - name: tcg
      description: Tcg data & lookups
    - name: telecom
      description: FCC filings & telecom market areas
    - name: text
      description: Text data & lookups
    - name: tides
      description: Current tide predictions
    - name: time
      description: Time data & lookups
    - name: timezone
      description: Timezone by coordinate
    - name: tld
      description: Top-level-domain info
    - name: tls
      description: TLS certificate inspection
    - name: trade
      description: UN Comtrade flows, tariffs & LOCODE
    - name: transcribe
      description: Audio transcription
    - name: travel
      description: Travel advisories & visa requirements
    - name: treasury
      description: US Treasury cash, debt, rates & monthly statements
    - name: url
      description: Render, map, clean & unfurl any URL
    - name: validate
      description: IBAN, BIC, ISIN, CUSIP, GTIN & check-digit checks
    - name: vehicle
      description: VIN decode, recalls, complaints, safety ratings
    - name: watchers
      description: Watchers data & lookups
    - name: water
      description: USGS stream-gauge readings
    - name: weather
      description: Global conditions & forecasts, NWS alerts, marine & air quality
    - name: wikidata
      description: Wikidata entity lookup
    - name: wikipedia
      description: Wikipedia article summaries
    - name: word
      description: Definitions & related words
    - name: worldbank
      description: World Bank development indicators
- target: $
  update:
    externalDocs:
      description: 2s llms.txt — payment flow, discovery surfaces, SDKs and the full endpoint list
      url: https://2s.io/llms.txt
- target: $.servers[0]
  update:
    description: Single production origin; also hosts the MCP server (/mcp) and the A2A JSON-RPC endpoint (/a2a).
      No sandbox host — use ?trial=1 for a free real call.
- target: $.components.responses
  description: Add the two throttle responses the provider documents in changelog 1.80.1 but does not declare
  update:
    RateLimited:
      description: 429 RATE_LIMITED — 2s's own rate limiter (changelog 1.80.1). Back off client-side. No Retry-After
        header is documented.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    UpstreamRateLimit:
      description: 503 UPSTREAM_RATE_LIMIT — an upstream throttle, not the caller's limit; the provider says retry
        without client-side backoff (changelog 1.80.1).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
- target: $.components.schemas
  description: Declare the error envelope observed live on a trial 400 (2026-09-19)
  update:
    ErrorEnvelope:
      type: object
      required:
      - error
      properties:
        error:
          type: object
          required:
          - code
          - message
          properties:
            code:
              type: string
              description: UPPER_SNAKE code — BAD_REQUEST, RATE_LIMITED, UPSTREAM_RATE_LIMIT, RESULT_TOO_LARGE,
                NOT_FOUND observed or documented
              example: BAD_REQUEST
            message:
              type: string
              example: Invalid parameters.
            details:
              type: object
              description: Optional; on 400 a validation report with issues[] {code, expected, received, path[],
                message}
- target: $.components.responses.BadRequest
  update:
    content:
      application/json:
        schema:
          $ref: '#/components/schemas/ErrorEnvelope'
        example:
          error:
            code: BAD_REQUEST
            message: Invalid parameters.
            details:
              issues:
              - code: invalid_type
                expected: string
                received: undefined
                path:
                - iban
                message: Required
- target: $.paths.*[?(@.operationId)]
  description: Wire the two documented throttle responses onto every operation
  update:
    responses:
      '429':
        $ref: '#/components/responses/RateLimited'
      '503':
        $ref: '#/components/responses/UpstreamRateLimit'
- target: $.paths.*[?(@.operationId)]
  description: Name the headers the provider documents on a paid 200 and on a signed response
  update:
    x-response-headers:
      X-PAYMENT-TX: on-chain settlement transaction of the x402 payment
      X-2s-Endpoint: endpoint id (attestation descriptor)
      X-2s-Attestation-Signature: present when ?sign=1 — EIP-191 signature over the canonical message; see https://2s.io/.well-known/2s-attestation.json
- target: $.paths['/api/lock/release'].post
  update:
    x-idempotent: true
    x-idempotency-basis: stated in the operation description
- target: $.paths['/api/watchers/cancel'].post
  update:
    x-idempotent: true
    x-idempotency-basis: stated in the operation description
- target: $.paths['/api/pubsub/create-topic'].post
  update:
    x-idempotent: true
    x-idempotency-basis: stated in the operation description
- target: $.paths['/api/store/kv-delete'].post
  update:
    x-idempotent: true
    x-idempotency-basis: stated in the operation description
- target: $.paths['/api/store/doc-delete'].post
  update:
    x-idempotent: true
    x-idempotency-basis: stated in the operation description
- target: $.paths['/api/store/vector-delete'].post
  update:
    x-idempotent: true
    x-idempotency-basis: stated in the operation description
- target: $.paths['/api/store/blob-delete'].post
  update:
    x-idempotent: true
    x-idempotency-basis: stated in the operation description
- target: $.paths['/api/text/redact'].post
  update:
    x-idempotent: true
    x-idempotency-basis: stated in the operation description
- target: $.paths['/api/watchers/cancel'].post
  update:
    x-reversal-of: watchers.* arming operations
    x-refund: none — the contract states no refund of the unused window
- target: $.paths['/api/schedule/cancel'].post
  update:
    x-reversal-of: schedule.create
    x-refund: none — the contract states no refund of the unused window
- target: $.paths['/api/lock/release'].post
  update:
    x-reversal-of: lock.acquire
    x-refund: null
- target: $.paths['/api/pubsub/unsubscribe'].post
  update:
    x-reversal-of: pubsub.subscribe
    x-refund: null
- target: $.paths['/api/queue/ack'].post
  update:
    x-reversal-of: queue.lease (makes the removal permanent)
    x-refund: null
- target: $.paths['/api/store/kv-delete'].post
  update:
    x-reversal-of: store.kv-put
    x-restore: none documented; objects also expire 90 days after last touch
- target: $.paths['/api/store/doc-delete'].post
  update:
    x-reversal-of: store.doc-put
    x-restore: none documented; objects also expire 90 days after last touch
- target: $.paths['/api/store/vector-delete'].post
  update:
    x-reversal-of: store.vector-upsert
    x-restore: none documented; objects also expire 90 days after last touch
- target: $.paths['/api/store/blob-delete'].post
  update:
    x-reversal-of: store.blob-put
    x-restore: none documented; objects also expire 90 days after last touch