Work with this as data
Every API 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 apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.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 API
curl "https://apis.io/api/v1/apis/2s-io:2s-io-job-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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.
OpenAPI Specification
openapi: 3.2.0
info:
title: 2s — the (most) everything Job 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=<natural-language task> 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: Job
paths:
/api/job/federal-codes:
get:
tags:
- Job
summary: Fetch a USAJobs reference codelist (lookup tables behind
description: 'Fetch a USAJobs reference codelist (lookup tables behind every federal job posting). Pass name to pick which list: agencysubelements (every agency + sub-element), occupationalseries (2210 IT, 0301 Misc Admin, 0801 Engineer, etc.), paygrades, payplans (GS, SES, ES, WG, etc.), hiringpaths (veteran, military spouse, native American, etc.), securityclearances, locationcodes, countries, countrysubdivisions, ethnicities, racecodes, militarystatuscodes, languagecodes, positionscheduletypecodes (full-time/part-time/seasonal), travelpercentages, missioncriticalcodes, cyberworkroles, etc. (33 lists total). Use the returned codes as filter inputs to /api/job/federal-search.'
operationId: job_federal-codes
deprecated: false
security:
- x402Payment: []
responses:
'200':
description: 'Normalized envelope: items = the requested USAJobs reference codelist entries; total = entry count; meta.name + meta.dateGenerated identify the list.'
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: {}
additionalProperties: true
description: Raw USAJobs codelist entry — column set varies by list (typically Code, Value, LastModified, IsDisabled; some lists add extras like JobFamily).
total:
type: integer
nullable: true
description: Total matching rows upstream; null when unknown.
source:
$ref: '#/components/schemas/Source'
meta:
type: object
properties:
name:
type: string
enum:
- academichonors
- agencysubelements
- announcementclosingtypes
- applicantsuppliers
- cyberworkroles
- countries
- countrysubdivisions
- degreetypecodes
- documentations
- ethnicities
- federalemploymentstatuses
- geoloccodes
- hiringpaths
- languagecodes
- languageproficiencies
- locationcodes
- militarystatuscodes
- missioncriticalcodes
- occupationalseries
- paygrades
- payplans
- positionofferingtypecodes
- positionopeningstatuses
- positionscheduletypecodes
- racecodes
- refereetypecodes
- remunerationrateintervalcodes
- requiredstandarddocuments
- securityclearances
- servicetypes
- specialhirings
- travelpercentages
- whomayapply
dateGenerated:
type: string
nullable: true
required:
- name
- dateGenerated
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: job.federal-codes
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: name
in: query
required: true
description: Name to search for.
schema:
type: string
enum:
- academichonors
- agencysubelements
- announcementclosingtypes
- applicantsuppliers
- cyberworkroles
- countries
- countrysubdivisions
- degreetypecodes
- documentations
- ethnicities
- federalemploymentstatuses
- geoloccodes
- hiringpaths
- languagecodes
- languageproficiencies
- locationcodes
- militarystatuscodes
- missioncriticalcodes
- occupationalseries
- paygrades
- payplans
- positionofferingtypecodes
- positionopeningstatuses
- positionscheduletypecodes
- racecodes
- refereetypecodes
- remunerationrateintervalcodes
- requiredstandarddocuments
- securityclearances
- servicetypes
- specialhirings
- travelpercentages
- whomayapply
- $ref: '#/components/parameters/TrialMode'
/api/job/federal-search:
get:
tags:
- Job
summary: Search current US federal job postings via the USAJobs API
description: 'Search current US federal job postings via the USAJobs API. Filter by keyword, positionTitle, locationName ("Washington, DC" or city/zip), remote (telework-eligible), pay grade range (e.g. payGradeLow=GS09 + payGradeHigh=GS13), jobCategoryCode (occupational series, e.g. 2210 for IT), organization (agency sub-element code, e.g. TR40 for IRS), whoMayApply (all/public/status). Returns per-posting: control number, position ID, title, USAJobs URL + apply URL, organization + department, locations, schedule, offering type, pay scales (min/max + interval), publication start + application close, qualification summary, job category + grade. Use sortField + sortDirection to sort. Pagination via resultsPerPage + page.'
operationId: job_federal-search
deprecated: false
security:
- x402Payment: []
responses:
'200':
description: 'Normalized envelope: items = matched federal job postings; total = upstream total match count; meta.count = postings on this page.'
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:
controlNumber:
type: string
nullable: true
positionId:
type: string
nullable: true
title:
type: string
nullable: true
uri:
type: string
nullable: true
applyUri:
type: array
items:
type: string
organization:
type: string
nullable: true
department:
type: string
nullable: true
locations:
type: array
items:
type: object
additionalProperties: {}
remote:
type: boolean
schedule:
type: array
items:
type: object
additionalProperties: {}
offeringType:
type: array
items:
type: object
additionalProperties: {}
payScales:
type: array
items:
type: object
properties:
min:
type: number
nullable: true
max:
type: number
nullable: true
interval:
type: string
nullable: true
required:
- min
- max
- interval
additionalProperties: false
publicationStart:
type: string
nullable: true
applicationClose:
type: string
nullable: true
qualificationSummary:
type: string
nullable: true
jobCategory:
type: array
items:
type: object
additionalProperties: {}
jobGrade:
type: array
items:
type: object
additionalProperties: {}
required:
- controlNumber
- positionId
- title
- uri
- applyUri
- organization
- department
- locations
- remote
- schedule
- offeringType
- payScales
- publicationStart
- applicationClose
- qualificationSummary
- jobCategory
- jobGrade
additionalProperties: false
total:
type: integer
nullable: true
description: Total matching rows upstream; null when unknown.
source:
$ref: '#/components/schemas/Source'
meta:
type: object
properties:
count:
type: integer
description: Postings returned on this page.
required:
- count
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: job.federal-search
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: keyword
in: query
required: false
description: Keyword.
schema:
type: string
minLength: 1
maxLength: 120
- name: positionTitle
in: query
required: false
description: Position title.
schema:
type: string
minLength: 1
maxLength: 120
- name: locationName
in: query
required: false
description: Location name.
schema:
type: string
minLength: 1
maxLength: 120
- name: remote
in: query
required: false
description: Remote.
schema:
type: boolean
- name: payGradeLow
in: query
required: false
description: Pay grade low.
schema:
type: string
pattern: ^[A-Z]{2}\d{2}$
- name: payGradeHigh
in: query
required: false
description: Pay grade high.
schema:
type: string
pattern: ^[A-Z]{2}\d{2}$
- name: jobCategoryCode
in: query
required: false
description: Job category code.
schema:
type: string
pattern: ^\d{3,4}$
- name: organization
in: query
required: false
description: Organization.
schema:
type: string
pattern: ^[A-Z0-9]{2,6}$
- name: whoMayApply
in: query
required: false
description: Who may apply.
schema:
type: string
enum:
- all
- public
- status
- name: resultsPerPage
in: query
required: false
description: Results per page.
schema:
type: integer
minimum: 1
maximum: 500
default: 25
- name: page
in: query
required: false
description: Page number (1-based) for paginated results.
schema:
type: integer
minimum: 1
default: 1
- name: sortField
in: query
required: false
description: Sort field.
schema:
type: string
enum:
- OpenDate
- CloseDate
- PositionTitle
- Salary
- name: sortDirection
in: query
required: false
description: Sort direction.
schema:
type: string
enum:
- Asc
- Desc
- $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.'