openapi: 3.2.0 info: title: 2s — the (most) everything Business API version: '1' summary: The (most) everything API. description: 'The (most) everything API for AI agents: 575+ pay-per-call endpoints on one origin.' contact: name: 2s url: https://2s.io email: alley@2s.io x-logo: url: https://2s.io/icon-512.png altText: 2s x-guidance: 'Pay-per-call REST API for AI agents — hundreds of endpoints returning ground-truth data (US public records, company & legal identifiers, finance/SEC, crypto/web3, security & CVEs, medical codes, weather & geocoding, agriculture, energy, maritime, music, and more). Every endpoint is paid per call in USDC via x402 (Base or Solana) — no API key, no signup. Call any endpoint with no auth to get a 402 PaymentRequirements envelope, sign it (EIP-3009 on Base, partial SPL transfer on Solana), and retry with the PAYMENT-SIGNATURE header. Add ?trial=1 for one free real call per endpoint per hour to test before paying. To discover the right endpoint: GET https://2s.io/api/directory for the full catalog, or GET https://2s.io/api/search/endpoints?q= for a ranked match. Per-call price is on each operation as x-payment-info (from $0.001). Batch up to 50 calls behind one payment via POST https://2s.io/api/batch/run.' servers: - url: https://2s.io tags: - name: Business paths: /api/business/br-cnpj: get: tags: - Business summary: Brazilian company registry lookup by CNPJ (the 14-digit description: Brazilian company registry lookup by CNPJ (the 14-digit national company tax ID). Returns the legal name (razão social), trade name, registration status and reason, start date, legal nature, company size, share capital (BRL), primary economic activity (CNAE code + description), contact email/phone, full address, and the partners/officers (QSA — name + role). Free, open Brazilian government data (Receita Federal via BrasilAPI). The canonical "who is this Brazilian company" lookup for KYB, diligence, and cross-border onboarding — complements business.lei (GLEIF) and business.sos-search (US). operationId: business_br-cnpj deprecated: false security: - x402Payment: [] responses: '200': description: 'Normalized envelope: items = [one company] (or [] if not found); total = 1 or 0.' content: application/json: schema: type: object required: - data - meta properties: data: type: object properties: ok: type: boolean enum: - true items: type: array items: type: object properties: cnpj: type: string nullable: true legalName: type: string nullable: true tradeName: type: string nullable: true status: type: string nullable: true statusReason: type: string nullable: true startDate: type: string nullable: true legalNature: type: string nullable: true size: type: string nullable: true shareCapitalBRL: type: number nullable: true primaryActivityCode: type: string nullable: true primaryActivity: type: string nullable: true email: type: string nullable: true phone: type: string nullable: true address: type: object properties: street: type: string nullable: true number: type: string nullable: true district: type: string nullable: true city: type: string nullable: true state: type: string nullable: true zip: type: string nullable: true required: - street - number - district - city - state - zip additionalProperties: false partners: type: array items: type: object properties: name: type: string nullable: true role: type: string nullable: true required: - name - role additionalProperties: false required: - cnpj - legalName - tradeName - status - statusReason - startDate - legalNature - size - shareCapitalBRL - primaryActivityCode - primaryActivity - email - phone - address - partners additionalProperties: false total: type: integer nullable: true description: Total matching rows upstream; null when unknown. source: $ref: '#/components/schemas/Source' required: - ok - items - total - source additionalProperties: false meta: $ref: '#/components/schemas/CallMeta' '400': $ref: '#/components/responses/BadRequest' '402': $ref: '#/components/responses/PaymentRequired' '405': $ref: '#/components/responses/MethodNotAllowed' '500': $ref: '#/components/responses/ServerError' '502': $ref: '#/components/responses/UpstreamError' x-2s-id: business.br-cnpj x-2s-version: null x-2s-price: usd: 0.0027 x-2s-accepts: - x402 x-2s-response-shape: normalized x-payment-info: price: mode: fixed currency: USD amount: '0.002700' protocols: - x402: {} parameters: - name: cnpj in: query required: true description: 14-digit CNPJ. schema: type: string minLength: 14 maxLength: 20 - $ref: '#/components/parameters/TrialMode' /api/business/entity-match: get: tags: - Business summary: 'Fuzzy entity resolution: resolve a messy, free-text company' description: 'Fuzzy entity resolution: resolve a messy, free-text company name to its canonical GLEIF Legal Entity Identifier (LEI) with a 0-1 similarity score and a high/medium/low confidence label. Tolerant of legal-suffix noise (Inc/Ltd/GmbH/S.A.), word order, ampersands, punctuation, and former/alternate names (e.g. ''Apple Computer Inc'' resolves to Apple Inc. via GLEIF''s recorded other-names). Returns the top candidates ranked by score plus a single bestMatch (null when nothing clears medium confidence — so a low-confidence top hit is never silently treated as a match, which is the safe default for KYB). The record-linkage complement to business.lei (name search). Optional country (ISO-2) narrows to a jurisdiction. Backed by GLEIF Golden Copy (~2.6M entities, CC0).' operationId: business_entity-match deprecated: false security: - x402Payment: [] responses: '200': description: 'Normalized envelope: items = candidate LEI records ranked by fuzzy score (desc); total = size of the FTS candidate pool; meta.bestMatch = the single confident resolution (or null); meta.query echoes the search.' content: application/json: schema: type: object required: - data - meta properties: data: type: object properties: ok: type: boolean enum: - true items: type: array items: type: object properties: lei: type: string legalName: type: string nullable: true otherName: type: string nullable: true score: type: number confidence: type: string enum: - high - medium - low jurisdiction: type: string nullable: true entityStatus: type: string nullable: true registrationStatus: type: string nullable: true headquarters: type: object properties: city: type: string nullable: true region: type: string nullable: true country: type: string nullable: true required: - city - region - country additionalProperties: false required: - lei - legalName - otherName - score - confidence - jurisdiction - entityStatus - registrationStatus - headquarters additionalProperties: false total: type: integer nullable: true description: Total matching rows upstream; null when unknown. source: $ref: '#/components/schemas/Source' meta: type: object properties: query: type: object properties: name: type: string country: type: string nullable: true limit: type: integer required: - name - country - limit additionalProperties: false bestMatch: type: object properties: lei: type: string legalName: type: string nullable: true score: type: number confidence: type: string enum: - high - medium - low required: - lei - legalName - score - confidence additionalProperties: false nullable: true required: - query - bestMatch additionalProperties: false required: - ok - items - total - source additionalProperties: false meta: $ref: '#/components/schemas/CallMeta' '400': $ref: '#/components/responses/BadRequest' '402': $ref: '#/components/responses/PaymentRequired' '405': $ref: '#/components/responses/MethodNotAllowed' '500': $ref: '#/components/responses/ServerError' '502': $ref: '#/components/responses/UpstreamError' x-2s-id: business.entity-match x-2s-version: null x-2s-price: usd: 0.0072 x-2s-accepts: - x402 x-2s-response-shape: normalized x-payment-info: price: mode: fixed currency: USD amount: '0.007200' protocols: - x402: {} parameters: - name: name in: query required: true description: 'Free-text company / legal-entity name to resolve. Messy input is fine: "Apple Computer Inc.", "jp morgan chase & co".' schema: type: string minLength: 2 maxLength: 200 - name: country in: query required: false description: Optional ISO-2 country of the entity HQ to narrow the match (e.g., "US", "DE", "GB"). schema: type: string minLength: 2 maxLength: 2 - name: limit in: query required: false description: Max ranked candidates to return (1-25). Default 5. schema: type: integer minimum: 1 maximum: 25 default: 5 - $ref: '#/components/parameters/TrialMode' /api/business/entity-profile: get: tags: - Business summary: Full business-entity dossier from a state registry - master description: 'Full business-entity dossier from a state registry — master record plus officers/principals, registered agent (name, phone, email, address), and filing history — the detail layer that flat registry search omits. v1 state: CT (Connecticut). Resolve by entityId (state registry record id), accountNumber, or name (partial; most recent registration wins). Returns entity status, type, registration date, mailing address, minority/woman/veteran/disability/LGBTQI ownership flags, officers, registered agent, and recent filings. KYB, vendor due-diligence, and counterparty-verification staple, sourced from the official state open-data portal.' operationId: business_entity-profile deprecated: false security: - x402Payment: [] responses: '200': description: 'Normalized envelope: items = [entity dossier] (master + officers + registered agent + filings); total = 1; meta = {state, resolvedFrom, candidateCount, partial}. partial lists any child source that degraded.' content: application/json: schema: type: object required: - data - meta properties: data: type: object properties: ok: type: boolean enum: - true items: type: array items: type: object properties: state: type: string entityId: type: string nullable: true accountNumber: type: string nullable: true name: type: string nullable: true status: type: string nullable: true type: type: string nullable: true jurisdiction: type: string nullable: true registrationDate: type: string nullable: true mailingAddress: type: string nullable: true ownership: type: object properties: womanOwned: type: boolean nullable: true veteranOwned: type: boolean nullable: true minorityOwned: type: boolean nullable: true disabilityOwned: type: boolean nullable: true lgbtqiOwned: type: boolean nullable: true required: - womanOwned - veteranOwned - minorityOwned - disabilityOwned - lgbtqiOwned additionalProperties: false officers: type: array items: type: object properties: name: type: string nullable: true firstName: type: string nullable: true lastName: type: string nullable: true businessAddress: type: string nullable: true residenceAddress: type: string nullable: true required: - name - firstName - lastName - businessAddress - residenceAddress additionalProperties: false registeredAgent: type: object properties: name: type: string nullable: true type: type: string nullable: true phone: type: string nullable: true email: type: string nullable: true address: type: string nullable: true required: - name - type - phone - email - address additionalProperties: false nullable: true filings: type: array items: type: object properties: date: type: string nullable: true type: type: string nullable: true filingType: type: string nullable: true reportYear: type: string nullable: true required: - date - type - filingType - reportYear additionalProperties: false counts: type: object properties: officers: type: integer filings: type: integer required: - officers - filings additionalProperties: false required: - state - entityId - accountNumber - name - status - type - jurisdiction - registrationDate - mailingAddress - ownership - officers - registeredAgent - filings - counts additionalProperties: false total: type: integer nullable: true description: Total matching rows upstream; null when unknown. source: $ref: '#/components/schemas/Source' meta: type: object properties: state: type: string resolvedFrom: type: string enum: - entityId - accountNumber - name candidateCount: type: integer nullable: true partial: type: array items: type: string required: - state - resolvedFrom - candidateCount - partial additionalProperties: false required: - ok - items - total - source additionalProperties: false meta: $ref: '#/components/schemas/CallMeta' '400': $ref: '#/components/responses/BadRequest' '402': $ref: '#/components/responses/PaymentRequired' '405': $ref: '#/components/responses/MethodNotAllowed' '500': $ref: '#/components/responses/ServerError' '502': $ref: '#/components/responses/UpstreamError' x-2s-id: business.entity-profile x-2s-version: null x-2s-price: usd: 0.0075 x-2s-accepts: - x402 x-2s-response-shape: normalized x-payment-info: price: mode: fixed currency: USD amount: '0.007500' protocols: - x402: {} parameters: - name: state in: query required: true description: 'State registry to query (v1: CT only).' schema: type: string enum: - CT - name: entityId in: query required: false description: State registry record id (canonical join key). schema: type: string minLength: 2 maxLength: 40 - name: accountNumber in: query required: false description: State business account number. schema: type: string minLength: 2 maxLength: 40 - name: name in: query required: false description: Entity name, partial match. schema: type: string minLength: 2 maxLength: 120 - name: filingsLimit in: query required: false description: Max recent filings. schema: type: integer minimum: 1 maximum: 50 default: 10 - $ref: '#/components/parameters/TrialMode' /api/business/entity-screen: get: tags: - Business summary: 'KYC in one call: look up a business in a US state registry' description: 'KYC in one call: look up a business in a US state registry (NY, CO, CT) AND screen it against the OFAC sanctions list. Give a state and a name (or exact entityId). Returns the matched registered entities (id, type, status, jurisdiction, address, registered agent) and, for each, a sanctions screen of the entity name AND its registered agent against OFAC SDN — with fuzzy-match confidence and a flagged boolean. Counterparty due-diligence, vendor onboarding, AML. Composition of /api/business/sos-search + /api/law/sanctions-check (each section reports found/error independently). Note: sanctions screening is name-based and probabilistic — review flagged matches manually.' operationId: business_entity-screen deprecated: false security: - x402Payment: [] responses: '200': description: OK content: application/json: schema: type: object required: - data - meta properties: data: type: object properties: state: type: string count: type: number entities: type: array items: type: object properties: entity: type: object additionalProperties: {} sanctions: type: object properties: found: type: boolean error: type: string nullable: true flagged: type: boolean entityMatchCount: type: number agentMatchCount: type: number matches: type: array items: type: object additionalProperties: {} required: - found - error - flagged - entityMatchCount - agentMatchCount - matches additionalProperties: false required: - entity - sanctions additionalProperties: false sources: type: array items: type: object additionalProperties: {} required: - state - count - entities - sources additionalProperties: false meta: $ref: '#/components/schemas/CallMeta' '400': $ref: '#/components/responses/BadRequest' '402': $ref: '#/components/responses/PaymentRequired' '405': $ref: '#/components/responses/MethodNotAllowed' '500': $ref: '#/components/responses/ServerError' '502': $ref: '#/components/responses/UpstreamError' x-2s-id: business.entity-screen x-2s-version: null x-2s-price: usd: 0.0144 x-2s-accepts: - x402 x-2s-response-shape: legacy x-payment-info: price: mode: fixed currency: USD amount: '0.014400' protocols: - x402: {} parameters: - name: state in: query required: true description: US state — two-letter postal abbreviation (e.g. CA) or full name. schema: type: string enum: - NY - CO - CT - name: name in: query required: false description: Name to search for. schema: type: string minLength: 2 maxLength: 120 - name: entityId in: query required: false description: Entity ID. schema: type: string minLength: 2 maxLength: 30 - name: threshold in: query required: false description: Minimum score/threshold required to include a result. schema: type: number minimum: 0.1 maximum: 1 default: 0.5 - name: limit in: query required: false description: Maximum number of results to return. schema: type: integer minimum: 1 maximum: 10 default: 5 - $ref: '#/components/parameters/TrialMode' /api/business/fi-companies: get: tags: - Business summary: Official Finnish company registry search (PRH/YTJ description: 'Official Finnish company registry search (PRH/YTJ avoindata, Finnish Patent & Registration Office). Search by company name. Each result: Business ID (Y-tunnus), current name, company form, trade-register status, primary line of business, registration date, and street address — descriptions in English where available. Free, CC BY 4.0. The authoritative FI company lookup — complements business.uk-companies and business.lei.' operationId: business_fi-companies deprecated: false security: - x402Payment: [] responses: '200': description: 'Normalized: items = matching Finnish companies.' content: application/json: schema: type: object required: - data - meta properties: data: type: object properties: ok: type: boolean enum: - true items: type: array items: type: object properties: businessId: type: string nullable: true name: type: string nullable: true companyForm: type: string nullable: true status: type: string nullable: true mainBusinessLine: type: string nullable: true registrationDate: type: string nullable: true street: type: string nullable: true postCode: type: string nullable: true city: type: string nullable: true required: - businessId - name - companyForm - status - mainBusinessLine - registrationDate - street - postCode - city additionalProperties: false total: type: integer nullable: true description: Total matching rows upstream; null when unknown. source: $ref: '#/components/schemas/Source' required: - ok - items - total - source additionalProperties: false meta: $ref: '#/components/schemas/CallMeta' '400': $ref: '#/components/responses/BadRequest' '402': $ref: '#/components/responses/PaymentRequired' '405': $ref: '#/components/responses/MethodNotAllowed' '500': $ref: '#/components/responses/ServerError' '502': $ref: '#/components/responses/UpstreamError' x-2s-id: business.fi-companies x-2s-version: null x-2s-price: usd: 0.0036 x-2s-accepts: - x402 x-2s-response-shape: normalized x-payment-info: price: mode: fixed currency: USD amount: '0.003600' protocols: - x402: {} parameters: - name: name in: query required: true description: Company name to search. schema: type: string minLength: 2 maxLength: 120 - name: limit in: query required: false description: Maximum number of results to return. schema: type: integer minimum: 1 maximum: 25 - $ref: '#/components/parameters/TrialMode' /api/business/fr-companies: get: tags: - Business summary: Official French company registry search (annuaire des description: 'Official French company registry search (annuaire des entreprises / data.gouv.fr). Search by company name, SIREN, SIRET, or director. Each result: SIREN, legal name, legal-form code, primary NAF activity code, enterprise category (PME/ETI/GE), employee-count range, creation date, administrative status (active/ceased), head-office SIRET and address. Free, Licence Ouverte. The authoritative FR company lookup — complements business.uk-companies and business.lei.' operationId: business_fr-companies deprecated: false security: - x402Payment: [] responses: '200': description: 'Normalized: items = matching French companies.' content: application/json: schema: type: object required: - data - meta properties: data: type: object properties: ok: type: boolean enum: - true items: type: array items: type: object properties: siren: type: string nullable: true name: type: string nullable: true legalForm: type: string nullable: true naf: type: string nullable: true category: type: string nullable: true employeesRange: type: string nullable: true created: type: string nullable: true status: type: string nullable: true siret: type: string nullable: true address: type: string nullable: true city: type: string nullable: true postalCode: type: string nullable: true required: - siren - name - legalForm - naf - category - employeesRange - created - status - siret - address - city - postalCode additionalProperties: false total: type: integer nullable: true description: Total matching rows upstream; null when unknown. source: $ref: '#/components/schemas/Source' required: - ok - items - total - source additionalProperties: false meta: $ref: '#/components/schemas/CallMeta' '400': $ref: '#/components/responses/BadRequest' '402': $ref: '#/components/responses/PaymentRequired' '405': $ref: '#/components/responses/MethodNotAllowed' '500': $ref: '#/components/responses/ServerError' '502': $ref: '#/components/responses/UpstreamError' x-2s-id: business.fr-companies x-2s-version: null x-2s-price: usd: 0.0036 x-2s-accepts: - x402 x-2s-response-shape: normalized x-payment-info: price: mode: fixed currency: USD amount: '0.003600' protocols: - x402: {} parameters: - name: q in: query required: true description: Company name, SIREN, SIRET, or director name. schema: type: string minLength: 2 maxLength: 120 - name: limit in: query required: false description: Maximum number of results to return. schema: type: integer minimum: 1 maximum: 25 - $ref: '#/components/parameters/TrialMode' /api/business/id-resolve: get: tags: - Business summary: Resolve a legal entity across identifier systems description: 'Resolve a legal entity across identifier systems. Give exactly one of name, lei, cik, or ticker and get the others back: LEI (GLEIF), SEC CIK, ticker(s) with exchange, jurisdiction, and a canonical entity name. This is the COMPANY-ENTITY resolver: it joins the legal entity (LEI) to its SEC filer identity (CIK/ticker) and back. For SECURITIES (FIGI, ISIN, share-class identifiers) use finance.security-resolve instead -- this one deliberately stays at the legal-entity layer. Composes SEC company_tickers_exchange (public domain) + GLEIF (CC0). The SECGLEIF link is by name-match when you anchor on ticker/cik (best-effort, flagged via bridge + leiName); a supplied LEI is authoritative. Per-source status is returned so a partial resolve is explicit. No CUSIP/SEDOL.' operationId: business_id-resolve deprecated: false security: - x402Payment: [] responses: '200': description: 'Normalized envelope: items = [one resolved legal entity with cross-system identifiers + per-source status]; total = 1.' content: application/json: schema: type: object required: - data - meta properties: data: type: object properties: ok: type: boolean enum: - true items: type: array items: type: object properties: resolvedFrom: type: string enum: - name - lei - cik - ticker name: type: string nullable: true lei: type: string nullable: true leiName: type: string nullable: true cik: type: string nullable: true tickers: type: array items: type: object properties: ticker: type: string exchange: type: string nullable: true required: - ticker - exchange additionalProperties: false jurisdiction: type: string nullable: true bridge: type: string enum: - direct-lei - name-match - sec-only - gleif-only - none description: How SEC<->GLEIF were linked; name-match is best-effort -- verify leiName. sources: type: object properties: sec: type: string gleif: type: string required: - sec - gleif additionalProperties: false required: - resolvedFrom - name - lei - leiName - cik - tickers - jurisdiction - bridge - sources additionalProperties: false total: type: integer nullable: true description: Total matching rows upstream; null when unknown. source: $ref: '#/components/schemas/Source' required: - ok - items - total - source additionalProperties: false meta: $ref: '#/components/schemas/CallMeta' '400': $ref: '#/components/responses/BadRequest' '402': $ref: '#/components/responses/PaymentRequired' '405': $ref: '#/components/responses/MethodNotAllowed' '500': $ref: '#/components/responses/ServerError' '502': $ref: '#/components/responses/UpstreamError' x-2s-id: business.id-resolve x-2s-version: null x-2s-price: usd: 0.012 x-2s-accepts: - x402 x-2s-response-shape: normalized x-payment-info: price: mode: fixed currency: USD amount: '0.012000' protocols: - x402: {} parameters: - name: name in: query required: false description: Legal/common entity name to search (GLEIF). schema: type: string minLength: 2 maxLength: 200 - name: lei in: query required: false description: 20-char LEI. schema: type: string pattern: ^[A-Za-z0-9]{20}$ - name: cik in: query required: false description: SEC CIK, leading zeros optional. schema: type: string minLength: 1 maxLength: 13 - name: ticker in: query required: false description: US stock ticker. schema: type: string minLength: 1 maxLength: 12 - $ref: '#/components/parameters/TrialMode' /api/business/kyb-360: get: tags: - Business summary: Full Know-Your-Business (KYB) intelligence dossier on a description: 'Full Know-Your-Business (KYB) intelligence dossier on a company, in one call. Pass name (legal/common company name); optional state narrows federal awards, and optional ticker pulls the company''s SEC EDGAR identity + recent filings (SEC has no name search). Fans out to six authoritative sources and merges them: SAM.gov registration (UEI/CAGE, active status), SAM exclusions (federal debarment/suspension), OFAC SDN sanctions screen, GLEIF LEI (legal-entity identifier + jurisdiction), USAspending federal contract awards, and FARA foreign-agent registration (a disclosure status, not wrongdoing). Returns headline riskFlags and a cleared boolean (strictly debarment + sanctions), a summary of every signal, and a found/error block per source so one slow or empty source never fails the rest. For vendor onboarding, KYB/AML, and procurement due diligence. Probabilistic name matching — confirm with a hard identifier (UEI/LEI/CIK) before acting; public records, not legal advice.' operationId: business_kyb-360 deprecated: false security: - x402Payment: [] responses: '200': description: 'Normalized envelope: items = [KYB dossier with per-source blocks]; total = 1.' content: application/json: schema: type: object required: - data - meta properties: data: type: object properties: ok: type: boolean enum: - true items: type: array items: type: object properties: query: type: object properties: name: type: string state: type: string nullable: true ticker: type: string nullable: true required: - name - state - ticker additionalProperties: false riskFlags: type: array items: type: string cleared: type: boolean summary: type: object properties: samRegistered: type: boolean nullable: true activeRegistration: type: boolean nullable: true isDebarred: type: boolean nullable: true isSanctioned: type: boolean nullable: true hasLei: type: boolean nullable: true federalAwardCount: type: number nullable: true isForeignAgent: type: boolean nullable: true secCik: type: string nullable: true required: - samRegistered - activeRegistration - isDebarred - isSanctioned - hasLei - federalAwardCount - isForeignAgent - secCik additionalProperties: false registration: type: object properties: found: type: boolean error: type: string nullable: true data: type: object additionalProperties: {} nullable: true required: - found - error - data additionalProperties: false exclusions: type: object properties: found: type: boolean error: type: string nullable: true data: type: object additionalProperties: {} nullable: true required: - found - error - data additionalProperties: false sanctions: type: object properties: found: type: boolean error: type: string nullable: true data: type: object additionalProperties: {} nullable: true required: - found - error - data additionalProperties: false lei: type: object properties: found: type: boolean error: type: string nullable: true data: type: object additionalProperties: {} nullable: true required: - found - error - data additionalProperties: false federalAwards: type: object properties: found: type: boolean error: type: string nullable: true data: type: object additionalProperties: {} nullable: true required: - found - error - data additionalProperties: false foreignAgent: type: object properties: found: type: boolean error: type: string nullable: true data: type: object additionalProperties: {} nullable: true required: - found - error - data additionalProperties: false securities: type: object properties: found: type: boolean error: type: string nullable: true data: type: object additionalProperties: {} nullable: true required: - found - error - data additionalProperties: false sources: type: array items: $ref: '#/components/schemas/Source' note: type: string required: - query - riskFlags - cleared - summary - registration - exclusions - sanctions - lei - federalAwards - foreignAgent - securities - sources - note additionalProperties: false total: type: integer nullable: true description: Total matching rows upstream; null when unknown. source: $ref: '#/components/schemas/Source' required: - ok - items - total - source additionalProperties: false meta: $ref: '#/components/schemas/CallMeta' '400': $ref: '#/components/responses/BadRequest' '402': $ref: '#/components/responses/PaymentRequired' '405': $ref: '#/components/responses/MethodNotAllowed' '500': $ref: '#/components/responses/ServerError' '502': $ref: '#/components/responses/UpstreamError' x-2s-id: business.kyb-360 x-2s-version: null x-2s-price: usd: 0.036 x-2s-accepts: - x402 x-2s-response-shape: normalized x-payment-info: price: mode: fixed currency: USD amount: '0.036000' protocols: - x402: {} parameters: - name: name in: query required: true description: Name to search for. schema: type: string minLength: 2 maxLength: 200 - name: state in: query required: false description: US state — two-letter postal abbreviation (e.g. CA) or full name. schema: type: string minLength: 2 maxLength: 2 - name: ticker in: query required: false description: Ticker. schema: type: string minLength: 1 maxLength: 10 - name: threshold in: query required: false description: Minimum score/threshold required to include a result. schema: type: number minimum: 0 maximum: 1 - name: limit in: query required: false description: Maximum number of results to return. schema: type: integer minimum: 1 maximum: 20 - $ref: '#/components/parameters/TrialMode' /api/business/lei: get: tags: - Business summary: Look up or search the global LEI (Legal Entity Identifier) description: 'Look up or search the global LEI (Legal Entity Identifier) registry — the authoritative ISO 17442 directory of ~2.6M legal entities worldwide. Pass `lei` for an exact 20-character LEI, or `query` to search by legal/other name (ranked best-match first). Filter name search by `country` (ISO 2-letter, HQ country) and `status` (active = currently active entities only; all = default). Each result returns the LEI, legal name, an alternate/other name, legal jurisdiction, entity category (GENERAL/FUND/BRANCH/…), ISO 20275 legal-form code, entity status (ACTIVE/INACTIVE), LEI registration status (ISSUED/LAPSED/RETIRED/…), headquarters city/region/country/postal code, the initial registration + last update + next renewal dates, and the managing LOU. Use this to canonicalize a company name to its LEI, resolve a counterparty, or enrich a vendor master. Data: GLEIF Golden Copy (CC0, public domain).' operationId: business_lei deprecated: false security: - x402Payment: [] responses: '200': description: 'Normalized envelope: items = matching entities (bm25-ranked for name search; ≤1 for exact LEI lookup); total = match count; page = pagination block.' content: application/json: schema: type: object required: - data - meta properties: data: type: object properties: ok: type: boolean enum: - true items: type: array items: type: object properties: lei: type: string legalName: type: string nullable: true otherName: type: string nullable: true description: First alternate/other registered name, if any. jurisdiction: type: string nullable: true description: Legal jurisdiction (ISO country or subdivision). category: type: string nullable: true description: 'Entity category: GENERAL | FUND | BRANCH | SOLE_PROPRIETOR | …' legalForm: type: string nullable: true description: ISO 20275 Entity Legal Form (ELF) code. entityStatus: type: string nullable: true description: ACTIVE | INACTIVE. registrationStatus: type: string nullable: true description: 'LEI registration status: ISSUED | LAPSED | RETIRED | ANNULLED | …' headquarters: type: object properties: city: type: string nullable: true region: type: string nullable: true country: type: string nullable: true postalCode: type: string nullable: true required: - city - region - country - postalCode additionalProperties: false initialRegistrationDate: type: string nullable: true lastUpdateDate: type: string nullable: true nextRenewalDate: type: string nullable: true managingLou: type: string nullable: true description: LEI of the Local Operating Unit that maintains this record. required: - lei - legalName - otherName - jurisdiction - category - legalForm - entityStatus - registrationStatus - headquarters - initialRegistrationDate - lastUpdateDate - nextRenewalDate - managingLou additionalProperties: false total: type: integer nullable: true description: Total matching rows upstream; null when unknown. source: $ref: '#/components/schemas/Source' page: type: object properties: number: type: integer size: type: integer pages: type: integer nullable: true required: - number - size - pages additionalProperties: false required: - ok - items - total - source additionalProperties: false meta: $ref: '#/components/schemas/CallMeta' '400': $ref: '#/components/responses/BadRequest' '402': $ref: '#/components/responses/PaymentRequired' '405': $ref: '#/components/responses/MethodNotAllowed' '500': $ref: '#/components/responses/ServerError' '502': $ref: '#/components/responses/UpstreamError' x-2s-id: business.lei x-2s-version: null x-2s-price: usd: 0.003 x-2s-accepts: - x402 x-2s-response-shape: normalized x-payment-info: price: mode: fixed currency: USD amount: '0.003000' protocols: - x402: {} parameters: - name: lei in: query required: false description: LEI. schema: type: string pattern: ^[A-Za-z0-9]{20}$ - name: query in: query required: false description: Free-text search query. schema: type: string minLength: 1 maxLength: 200 - name: country in: query required: false description: Country name or ISO country code. schema: type: string pattern: ^[A-Za-z]{2}$ - name: status in: query required: false description: Filter results by status. schema: type: string enum: - active - all - name: limit in: query required: false description: Maximum number of results to return. schema: type: integer minimum: 1 maximum: 100 - name: offset in: query required: false description: Number of results to skip before returning (pagination offset). schema: type: integer minimum: 0 - $ref: '#/components/parameters/TrialMode' /api/business/lei-hierarchy: get: tags: - Business summary: Corporate ownership graph for a legal entity by LEI (GLEIF description: 'Corporate ownership graph for a legal entity by LEI (GLEIF Level-2 relationships, live). Returns the direct parent and ultimate parent (each: LEI, legal name, jurisdiction, country, status), the direct children (paged), and total counts of direct and ultimate children. The authoritative ''who owns whom'' lookup for KYB, beneficial-ownership, and corporate-tree mapping — complements business.lei (entity reference) and business.lei-isins.' operationId: business_lei-hierarchy deprecated: false security: - x402Payment: [] responses: '200': description: 'Normalized: items = [one ownership-graph object].' content: application/json: schema: type: object required: - data - meta properties: data: type: object properties: ok: type: boolean enum: - true items: type: array items: type: object properties: lei: type: string directParent: type: object properties: lei: nullable: true name: nullable: true jurisdiction: nullable: true country: nullable: true status: nullable: true registrationStatus: nullable: true additionalProperties: false nullable: true ultimateParent: type: object properties: lei: nullable: true name: nullable: true jurisdiction: nullable: true country: nullable: true status: nullable: true registrationStatus: nullable: true additionalProperties: false nullable: true directChildren: type: array items: type: object properties: lei: nullable: true name: nullable: true jurisdiction: nullable: true country: nullable: true status: nullable: true registrationStatus: nullable: true additionalProperties: false directChildrenCount: type: number ultimateChildrenCount: type: number nullable: true required: - lei - directParent - ultimateParent - directChildren - directChildrenCount - ultimateChildrenCount additionalProperties: false total: type: integer nullable: true description: Total matching rows upstream; null when unknown. source: $ref: '#/components/schemas/Source' required: - ok - items - total - source additionalProperties: false meta: $ref: '#/components/schemas/CallMeta' '400': $ref: '#/components/responses/BadRequest' '402': $ref: '#/components/responses/PaymentRequired' '405': $ref: '#/components/responses/MethodNotAllowed' '500': $ref: '#/components/responses/ServerError' '502': $ref: '#/components/responses/UpstreamError' x-2s-id: business.lei-hierarchy x-2s-version: null x-2s-price: usd: 0.0036 x-2s-accepts: - x402 x-2s-response-shape: normalized x-payment-info: price: mode: fixed currency: USD amount: '0.003600' protocols: - x402: {} parameters: - name: lei in: query required: true description: 20-character LEI, e.g. HWUPKR0MPOU8FGXBT394 (Apple Inc.). schema: type: string pattern: ^[A-Za-z0-9]{20}$ - name: childLimit in: query required: false description: Max direct children to return (1-50, default 10). schema: type: integer minimum: 1 maximum: 50 - $ref: '#/components/parameters/TrialMode' /api/business/lei-isins: get: tags: - Business summary: ISIN LEI mapping (GLEIF, live, CC0) description: 'ISIN ↔ LEI mapping (GLEIF, live, CC0). Two modes: pass lei to list every ISIN (security identifier) issued by that entity; or pass isin to resolve the issuer''s LEI (with legal name, jurisdiction, country). Bridges securities to their legal-entity issuers for finance, compliance, and reference-data joins — complements business.lei and business.lei-hierarchy.' operationId: business_lei-isins deprecated: false security: - x402Payment: [] responses: '200': description: 'Normalized: items = [one mapping result]; meta.total = upstream total ISIN count (lei mode).' content: application/json: schema: type: object required: - data - meta properties: data: type: object properties: ok: type: boolean enum: - true items: type: array items: type: object properties: mode: type: string enum: - lei-to-isins - isin-to-lei lei: type: string isin: type: string issuer: type: object properties: lei: nullable: true name: nullable: true jurisdiction: nullable: true country: nullable: true status: nullable: true registrationStatus: nullable: true additionalProperties: false nullable: true isins: type: array items: {} required: - mode - isins additionalProperties: false total: type: integer nullable: true description: Total matching rows upstream; null when unknown. source: $ref: '#/components/schemas/Source' meta: type: object properties: total: type: number required: - total additionalProperties: false required: - ok - items - total - source additionalProperties: false meta: $ref: '#/components/schemas/CallMeta' '400': $ref: '#/components/responses/BadRequest' '402': $ref: '#/components/responses/PaymentRequired' '405': $ref: '#/components/responses/MethodNotAllowed' '500': $ref: '#/components/responses/ServerError' '502': $ref: '#/components/responses/UpstreamError' x-2s-id: business.lei-isins x-2s-version: null x-2s-price: usd: 0.0036 x-2s-accepts: - x402 x-2s-response-shape: normalized x-payment-info: price: mode: fixed currency: USD amount: '0.003600' protocols: - x402: {} parameters: - name: lei in: query required: false description: LEI → list its ISINs. schema: type: string pattern: ^[A-Za-z0-9]{20}$ - name: isin in: query required: false description: ISIN → resolve issuer LEI, e.g. US0378331005. schema: type: string pattern: ^[A-Za-z0-9]{12}$ - name: limit in: query required: false description: Max ISINs in lei mode (1-200, default 100). schema: type: integer minimum: 1 maximum: 200 - $ref: '#/components/parameters/TrialMode' /api/business/naics: get: tags: - Business summary: Look up or search NAICS 2022 industry classification codes description: Look up or search NAICS 2022 industry classification codes (US Census Bureau, public domain). Pass `code` for an exact NAICS code — 2–6 digits or a combined sector like 31-33 — and get its official title, hierarchy path, full official description, activity index terms, and direct child codes. Or pass `query` for free-text search (e.g. 'software publishers', 'coffee shop') over titles plus the official ~20k-entry activity index → ranked candidate codes, optionally filtered by `level` (2=sector … 6=national industry). Ground truth for industry coding in KYC, business registration, government filings, and ERP vendor/customer setup. operationId: business_naics deprecated: false security: - x402Payment: [] responses: '200': description: 'Normalized envelope: items = NAICS codes (exact match first followed by its direct children, or ranked search candidates); total = match count.' content: application/json: schema: type: object required: - data - meta properties: data: type: object properties: ok: type: boolean enum: - true items: type: array items: type: object properties: code: type: string description: NAICS 2022 code (sectors may be ranges like 31-33). level: type: number description: 'Hierarchy level: 2=sector, 3=subsector, 4=industry group, 5=NAICS industry, 6=national industry.' title: type: string description: Official NAICS title. heading: type: string nullable: true description: Ancestor path (sector > subsector > …), excludes the code itself. description: type: string nullable: true description: Official Census description. Full text on the exactly-matched code; truncated elsewhere. indexTerms: type: array items: type: string nullable: true description: Official activity index entries cross-referenced to this code (6-digit codes; capped). required: - code - level - title - heading - description - indexTerms additionalProperties: false total: type: integer nullable: true description: Total matching rows upstream; null when unknown. source: $ref: '#/components/schemas/Source' page: type: object properties: number: type: integer size: type: integer pages: type: integer nullable: true required: - number - size - pages additionalProperties: false required: - ok - items - total - source additionalProperties: false meta: $ref: '#/components/schemas/CallMeta' '400': $ref: '#/components/responses/BadRequest' '402': $ref: '#/components/responses/PaymentRequired' '405': $ref: '#/components/responses/MethodNotAllowed' '500': $ref: '#/components/responses/ServerError' '502': $ref: '#/components/responses/UpstreamError' x-2s-id: business.naics x-2s-version: null x-2s-price: usd: 0.0025 x-2s-accepts: - x402 x-2s-response-shape: normalized x-payment-info: price: mode: fixed currency: USD amount: '0.002500' protocols: - x402: {} parameters: - name: code in: query required: false description: Exact NAICS code (2–6 digits, or a combined sector range like 31-33). XOR with query. schema: type: string pattern: ^(\d{2}-\d{2}|\d{2,6})$ - name: query in: query required: false description: Free-text industry or activity description to search. XOR with code. schema: type: string minLength: 2 maxLength: 120 - name: level in: query required: false description: 'Search mode only: restrict results to one hierarchy level (2=sector … 6=national industry).' schema: type: integer minimum: 2 maximum: 6 - name: limit in: query required: false description: 'Search mode only: max results, 1–50, default 20.' schema: type: integer minimum: 1 maximum: 50 - $ref: '#/components/parameters/TrialMode' /api/business/no-companies: get: tags: - Business summary: Official Norwegian company registry search (Brnnysund description: 'Official Norwegian company registry search (Brønnøysund Enhetsregisteret). Search by company name. Each result: organisation number, name, organisation form, primary industry (NACE), employee count, registration date, website, bankruptcy and dissolution flags, and business address. Free, NLOD/CC BY 4.0. The authoritative NO company lookup — complements business.uk-companies and business.lei.' operationId: business_no-companies deprecated: false security: - x402Payment: [] responses: '200': description: 'Normalized: items = matching Norwegian entities.' content: application/json: schema: type: object required: - data - meta properties: data: type: object properties: ok: type: boolean enum: - true items: type: array items: type: object properties: orgNumber: type: string nullable: true name: type: string nullable: true orgForm: type: string nullable: true industry: type: string nullable: true employees: type: number nullable: true registered: type: string nullable: true website: type: string nullable: true bankrupt: type: boolean beingDissolved: type: boolean address: type: string nullable: true country: type: string nullable: true required: - orgNumber - name - orgForm - industry - employees - registered - website - bankrupt - beingDissolved - address - country additionalProperties: false total: type: integer nullable: true description: Total matching rows upstream; null when unknown. source: $ref: '#/components/schemas/Source' required: - ok - items - total - source additionalProperties: false meta: $ref: '#/components/schemas/CallMeta' '400': $ref: '#/components/responses/BadRequest' '402': $ref: '#/components/responses/PaymentRequired' '405': $ref: '#/components/responses/MethodNotAllowed' '500': $ref: '#/components/responses/ServerError' '502': $ref: '#/components/responses/UpstreamError' x-2s-id: business.no-companies x-2s-version: null x-2s-price: usd: 0.0036 x-2s-accepts: - x402 x-2s-response-shape: normalized x-payment-info: price: mode: fixed currency: USD amount: '0.003600' protocols: - x402: {} parameters: - name: name in: query required: true description: Company name to search. schema: type: string minLength: 2 maxLength: 120 - name: limit in: query required: false description: Maximum number of results to return. schema: type: integer minimum: 1 maximum: 25 - $ref: '#/components/parameters/TrialMode' /api/business/pl-krs: get: tags: - Business summary: Official Polish company registry lookup by KRS number (KRS description: Official Polish company registry lookup by KRS number (KRS — Ministry of Justice, current extract / OdpisAktualny). Returns legal name, legal form, NIP and REGON identifiers, KRS registration date, share capital, and registered address. Register P = entrepreneurs (default); S = associations/foundations. Free, Polish public-sector open data. The authoritative PL company lookup — complements business.uk-companies and business.lei. operationId: business_pl-krs deprecated: false security: - x402Payment: [] responses: '200': description: 'Normalized: items = [one KRS entity].' content: application/json: schema: type: object required: - data - meta properties: data: type: object properties: ok: type: boolean enum: - true items: type: array items: type: object properties: krs: type: string nullable: true register: type: string name: type: string nullable: true legalForm: type: string nullable: true nip: type: string nullable: true regon: type: string nullable: true registeredDate: type: string nullable: true asOf: type: string nullable: true address: type: string nullable: true city: type: string nullable: true postalCode: type: string nullable: true country: type: string nullable: true shareCapital: type: string nullable: true required: - krs - register - name - legalForm - nip - regon - registeredDate - asOf - address - city - postalCode - country - shareCapital additionalProperties: false total: type: integer nullable: true description: Total matching rows upstream; null when unknown. source: $ref: '#/components/schemas/Source' required: - ok - items - total - source additionalProperties: false meta: $ref: '#/components/schemas/CallMeta' '400': $ref: '#/components/responses/BadRequest' '402': $ref: '#/components/responses/PaymentRequired' '405': $ref: '#/components/responses/MethodNotAllowed' '500': $ref: '#/components/responses/ServerError' '502': $ref: '#/components/responses/UpstreamError' x-2s-id: business.pl-krs x-2s-version: null x-2s-price: usd: 0.0036 x-2s-accepts: - x402 x-2s-response-shape: normalized x-payment-info: price: mode: fixed currency: USD amount: '0.003600' protocols: - x402: {} parameters: - name: krs in: query required: true description: 10-digit KRS number, e.g. 0000028860. schema: type: string pattern: ^\d{10}$ - name: register in: query required: false description: P = entrepreneurs (default), S = associations/foundations. schema: type: string enum: - P - S - $ref: '#/components/parameters/TrialMode' /api/business/sos-search: get: tags: - Business summary: Search state Secretary-of-State business registries description: 'Search state Secretary-of-State business registries, normalized to one schema across states. Currently supported: NY (active corporations + LLCs), CO (all entities incl. status), and CT (Business Registry Master incl. type, status, NAICS). Query by name (partial, case-insensitive) or exact entityId; results: state, entity id, name, type, status, formation jurisdiction, formation date, principal/registered address, registered agent. KYC, vendor due-diligence, and counterparty-verification staple. Each state sourced from its official open-data portal.' operationId: business_sos-search deprecated: false security: - x402Payment: [] responses: '200': description: 'Normalized envelope: items = matching business entities (normalized across states); total = null (capped state-portal search); meta = {state}.' content: application/json: schema: type: object required: - data - meta properties: data: type: object properties: ok: type: boolean enum: - true items: type: array items: type: object properties: state: type: string entityId: type: string nullable: true name: type: string nullable: true type: type: string nullable: true status: type: string nullable: true jurisdiction: type: string nullable: true formedDate: type: string nullable: true address: type: object properties: street: type: string nullable: true city: type: string nullable: true state: type: string nullable: true zip: type: string nullable: true required: - street - city - state - zip additionalProperties: false nullable: true agent: type: string nullable: true required: - state - entityId - name - type - status - jurisdiction - formedDate - address - agent additionalProperties: false total: type: integer nullable: true description: Total matching rows upstream; null when unknown. source: $ref: '#/components/schemas/Source' meta: type: object properties: state: type: string required: - state additionalProperties: false required: - ok - items - total - source additionalProperties: false meta: $ref: '#/components/schemas/CallMeta' '400': $ref: '#/components/responses/BadRequest' '402': $ref: '#/components/responses/PaymentRequired' '405': $ref: '#/components/responses/MethodNotAllowed' '500': $ref: '#/components/responses/ServerError' '502': $ref: '#/components/responses/UpstreamError' x-2s-id: business.sos-search x-2s-version: null x-2s-price: usd: 0.0072 x-2s-accepts: - x402 x-2s-response-shape: normalized x-payment-info: price: mode: fixed currency: USD amount: '0.007200' protocols: - x402: {} parameters: - name: state in: query required: true description: US state — two-letter postal abbreviation (e.g. CA) or full name. schema: type: string enum: - NY - CO - CT - name: name in: query required: false description: Name to search for. schema: type: string minLength: 2 maxLength: 120 - name: entityId in: query required: false description: Entity ID. schema: type: string minLength: 2 maxLength: 30 - name: limit in: query required: false description: Maximum number of results to return. schema: type: integer minimum: 1 maximum: 100 default: 10 - name: offset in: query required: false description: Number of results to skip before returning (pagination offset). schema: type: integer minimum: 0 default: 0 - $ref: '#/components/parameters/TrialMode' /api/business/uk-companies: get: tags: - Business summary: Official UK company registry (Companies House) description: 'Official UK company registry (Companies House). Two modes: pass query to search companies by name (returns company number, name, status, type, incorporation date, address), or pass companyNumber for the full registry profile — legal name, status, company type, jurisdiction, incorporation/cessation dates, SIC activity codes, registered office address, accounts (next due, last made-up-to), confirmation-statement due date, charges and insolvency flags, previous names, and the officers list (name, role, appointed/resigned dates, nationality, occupation). Free, Open Government Licence (commercial use permitted). The authoritative UK-company KYB lookup — complements business.lei (GLEIF) and business.br-cnpj (Brazil).' operationId: business_uk-companies deprecated: false security: - x402Payment: [] responses: '200': description: 'Normalized envelope: items = [one result object] (mode=profile → company populated; mode=search → results populated); total = 1.' content: application/json: schema: type: object required: - data - meta properties: data: type: object properties: ok: type: boolean enum: - true items: type: array items: type: object properties: mode: type: string enum: - profile - search query: type: object properties: query: type: string nullable: true companyNumber: type: string nullable: true limit: type: number required: - query - companyNumber - limit additionalProperties: false total: type: number company: type: object properties: companyNumber: type: string nullable: true name: type: string nullable: true status: type: string nullable: true type: type: string nullable: true jurisdiction: type: string nullable: true dateOfCreation: type: string nullable: true dateOfCessation: type: string nullable: true sicCodes: type: array items: type: string registeredOfficeAddress: type: string nullable: true accountsNextDue: type: string nullable: true accountsLastMadeUpTo: type: string nullable: true confirmationStatementNextDue: type: string nullable: true hasCharges: type: boolean nullable: true hasInsolvencyHistory: type: boolean nullable: true previousNames: type: array items: type: string officers: type: array items: type: object properties: name: type: string nullable: true role: type: string nullable: true appointedOn: type: string nullable: true resignedOn: type: string nullable: true nationality: type: string nullable: true occupation: type: string nullable: true required: - name - role - appointedOn - resignedOn - nationality - occupation additionalProperties: false required: - companyNumber - name - status - type - jurisdiction - dateOfCreation - dateOfCessation - sicCodes - registeredOfficeAddress - accountsNextDue - accountsLastMadeUpTo - confirmationStatementNextDue - hasCharges - hasInsolvencyHistory - previousNames - officers additionalProperties: false nullable: true results: type: array items: type: object properties: companyNumber: type: string nullable: true name: type: string nullable: true status: type: string nullable: true type: type: string nullable: true dateOfCreation: type: string nullable: true address: type: string nullable: true required: - companyNumber - name - status - type - dateOfCreation - address additionalProperties: false source: $ref: '#/components/schemas/Source' note: type: string required: - mode - query - total - company - results - source - note additionalProperties: false total: type: integer nullable: true description: Total matching rows upstream; null when unknown. source: $ref: '#/components/schemas/Source' required: - ok - items - total - source additionalProperties: false meta: $ref: '#/components/schemas/CallMeta' '400': $ref: '#/components/responses/BadRequest' '402': $ref: '#/components/responses/PaymentRequired' '405': $ref: '#/components/responses/MethodNotAllowed' '500': $ref: '#/components/responses/ServerError' '502': $ref: '#/components/responses/UpstreamError' x-2s-id: business.uk-companies x-2s-version: null x-2s-price: usd: 0.0036 x-2s-accepts: - x402 x-2s-response-shape: normalized x-payment-info: price: mode: fixed currency: USD amount: '0.003600' protocols: - x402: {} parameters: - name: query in: query required: false description: Free-text search query. schema: type: string minLength: 1 maxLength: 120 - name: companyNumber in: query required: false description: Company number. schema: type: string minLength: 1 maxLength: 12 - name: limit in: query required: false description: Maximum number of results to return. schema: type: integer minimum: 1 maximum: 50 - $ref: '#/components/parameters/TrialMode' components: schemas: Source: type: object description: 'Provenance of the data: upstream provider, source URL, and license.' properties: provider: type: string description: Upstream data provider. url: type: string description: Source URL or documentation link. license: type: string description: License / usage terms for the data. CallMeta: type: object description: Per-call meta envelope — endpoint id, cost, caller kind, settlement details. X402PaymentRequiredV2: type: object description: x402 v2 PaymentRequired envelope. Pick any entry from accepts[], sign for that rail, retry with the PAYMENT-SIGNATURE header. required: - x402Version - accepts properties: x402Version: type: integer const: 2 error: type: string description: Human-readable reason payment is required. resource: type: string description: The resource URL being purchased. accepts: type: array description: Payment requirement options, one per supported network (Base USDC, Solana USDC). items: type: object required: - scheme - network - amount - asset - payTo - maxTimeoutSeconds properties: scheme: type: string enum: - exact network: type: string description: CAIP-2 network id, e.g. "eip155:8453" (Base) or "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp". amount: type: string description: Price in atomic asset units (USDC has 6 decimals). asset: type: string description: Asset contract address / mint. payTo: type: string description: Treasury address to pay. maxTimeoutSeconds: type: integer extra: type: object description: 'Rail-specific extras (EVM: EIP-712 domain name/version; Solana: feePayer).' additionalProperties: true extensions: type: object description: Optional discovery metadata (e.g. bazaar input/output schemas). additionalProperties: true responses: PaymentRequired: description: Payment required. Body contains the x402 PaymentRequirements envelope with a multi-network accepts array; the per-call price is in accepts[].amount (and on the operation as x-2s-price). Sign for whichever rail you hold USDC on (EIP-3009 for Base, partial SPL transfer for Solana) and retry with the PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients). content: application/json: schema: $ref: '#/components/schemas/X402PaymentRequiredV2' UpstreamError: description: Upstream provider error. MethodNotAllowed: description: Method not allowed — see `Allow` header for the supported method. ServerError: description: Internal server error. BadRequest: description: Bad request — invalid parameters. parameters: TrialMode: name: trial in: query required: false description: 'Try before you buy. Set to 1 for one free real call per endpoint per hour — no wallet or payment needed — to verify the endpoint before paying. Equivalent to sending the "X-2s-Trial: 1" request header. Works on every endpoint.' schema: type: integer enum: - 1 securitySchemes: x402Payment: type: apiKey in: header name: PAYMENT-SIGNATURE description: 'x402 protocol v2: base64-encoded PaymentPayload. Call any paid endpoint without auth to receive a 402 with a multi-network PaymentRequirements envelope. Sign for either rail: EIP-3009 transferWithAuthorization (Base USDC) OR a partial SPL token transfer (Solana USDC). Retry with PAYMENT-SIGNATURE header. X-PAYMENT is also accepted for v1 buyer clients. See https://x402.org.'