2s

2s Research API

The research API from 2s — 3 operation(s) for research.

Operations 3

GET /api/research/author Resolve a researcher by ORCID iD #
GET /api/research/funding Search US federal biomedical research grants via NIH RePORTER #
GET /api/research/org Resolve a research organization via the Research #

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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/2s-io:2s-io-research-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

2s-io-research-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: 2s — the (most) everything Research 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: Research
paths:
  /api/research/author:
    get:
      tags:
      - Research
      summary: Resolve a researcher by ORCID iD
      description: 'Resolve a researcher by ORCID iD. Pass orcid (e.g. 0000-0002-1825-0097, with or without the https://orcid.org/ prefix). Returns the researcher name, affiliations (employments and educations with organization, role, department, years, and a current flag), a total works count, and a works summary (title, type, year, DOI when present). Data: ORCID Public API, free and keyless; per-record visibility is set by the record holder. The canonical author key in scholarly metadata — pair with /api/papers/search, /api/paper/doi-lookup, and /api/research/org (ROR institutions). Use to verify an author identity, current institution, or publication record before citing.'
      operationId: research_author
      deprecated: false
      security:
      - x402Payment: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                - meta
                properties:
                  data:
                    type: object
                    properties:
                      orcid:
                        type: string
                      url:
                        type: string
                      name:
                        type: object
                        properties:
                          given:
                            type: string
                            nullable: true
                          family:
                            type: string
                            nullable: true
                          credit:
                            type: string
                            nullable: true
                        required:
                        - given
                        - family
                        - credit
                        additionalProperties: false
                      affiliations:
                        type: array
                        items:
                          type: object
                          properties:
                            type:
                              type: string
                              enum:
                              - employment
                              - education
                            organization:
                              type: string
                              nullable: true
                            roleTitle:
                              type: string
                              nullable: true
                            department:
                              type: string
                              nullable: true
                            startYear:
                              type: number
                              nullable: true
                            endYear:
                              type: number
                              nullable: true
                            current:
                              type: boolean
                            country:
                              type: string
                              nullable: true
                          required:
                          - type
                          - organization
                          - roleTitle
                          - department
                          - startYear
                          - endYear
                          - current
                          - country
                          additionalProperties: false
                      worksCount:
                        type: number
                      works:
                        type: array
                        items:
                          type: object
                          properties:
                            title:
                              type: string
                              nullable: true
                            type:
                              type: string
                              nullable: true
                            year:
                              type: number
                              nullable: true
                            doi:
                              type: string
                              nullable: true
                          required:
                          - title
                          - type
                          - year
                          - doi
                          additionalProperties: false
                      sources:
                        type: array
                        items:
                          $ref: '#/components/schemas/Source'
                    required:
                    - orcid
                    - url
                    - name
                    - affiliations
                    - worksCount
                    - works
                    - 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: research.author
      x-2s-version: null
      x-2s-price:
        usd: 0.003
      x-2s-accepts:
      - x402
      x-2s-response-shape: legacy
      x-payment-info:
        price:
          mode: fixed
          currency: USD
          amount: '0.003000'
        protocols:
        - x402: {}
      parameters:
      - name: orcid
        in: query
        required: true
        description: ORCID iD, e.g. 0000-0002-1825-0097.
        schema:
          type: string
          minLength: 16
          maxLength: 60
      - name: worksLimit
        in: query
        required: false
        description: Works limit.
        schema:
          type: integer
          minimum: 1
          maximum: 50
          default: 20
      - $ref: '#/components/parameters/TrialMode'
  /api/research/funding:
    get:
      tags:
      - Research
      summary: Search US federal biomedical research grants via NIH RePORTER
      description: 'Search US federal biomedical research grants via NIH RePORTER. Filter by term (free-text over project title, terms, and abstract), org (funded institution name), pi (principal-investigator name), and/or fiscalYear; page with limit (1-50) and offset. Returns each award with project number, title, fiscal year, award amount (USD), contact PI, organization (name, city, state, country, department), funding agency/institute, and project start/end dates — newest fiscal year first, with a total match count. Data: NIH RePORTER, free and public-domain. Fresh post-training award data agents cannot know; pair with /api/research/org (ROR) and /api/research/author (ORCID). Use for funding landscape research, competitor/lab tracking, and grant-opportunity context.'
      operationId: research_funding
      deprecated: false
      security:
      - x402Payment: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                - meta
                properties:
                  data:
                    type: object
                    properties:
                      query:
                        type: object
                        properties:
                          term:
                            type: string
                            nullable: true
                          org:
                            type: string
                            nullable: true
                          pi:
                            type: string
                            nullable: true
                          fiscalYear:
                            type: number
                            nullable: true
                          limit:
                            type: number
                          offset:
                            type: number
                        required:
                        - term
                        - org
                        - pi
                        - fiscalYear
                        - limit
                        - offset
                        additionalProperties: false
                      total:
                        type: number
                        nullable: true
                      count:
                        type: number
                      awards:
                        type: array
                        items:
                          type: object
                          properties:
                            projectNum:
                              type: string
                              nullable: true
                            title:
                              type: string
                              nullable: true
                            fiscalYear:
                              type: number
                              nullable: true
                            awardAmount:
                              type: number
                              nullable: true
                            piName:
                              type: string
                              nullable: true
                            organization:
                              type: string
                              nullable: true
                            orgCity:
                              type: string
                              nullable: true
                            orgState:
                              type: string
                              nullable: true
                            orgCountry:
                              type: string
                              nullable: true
                            department:
                              type: string
                              nullable: true
                            agency:
                              type: string
                              nullable: true
                            agencyName:
                              type: string
                              nullable: true
                            startDate:
                              type: string
                              nullable: true
                            endDate:
                              type: string
                              nullable: true
                          required:
                          - projectNum
                          - title
                          - fiscalYear
                          - awardAmount
                          - piName
                          - organization
                          - orgCity
                          - orgState
                          - orgCountry
                          - department
                          - agency
                          - agencyName
                          - startDate
                          - endDate
                          additionalProperties: false
                      sources:
                        type: array
                        items:
                          $ref: '#/components/schemas/Source'
                    required:
                    - query
                    - total
                    - count
                    - awards
                    - 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: research.funding
      x-2s-version: null
      x-2s-price:
        usd: 0.0045
      x-2s-accepts:
      - x402
      x-2s-response-shape: legacy
      x-payment-info:
        price:
          mode: fixed
          currency: USD
          amount: '0.004500'
        protocols:
        - x402: {}
      parameters:
      - name: term
        in: query
        required: false
        description: Term.
        schema:
          type: string
          minLength: 2
          maxLength: 200
      - name: org
        in: query
        required: false
        description: Org.
        schema:
          type: string
          minLength: 2
          maxLength: 200
      - name: pi
        in: query
        required: false
        description: Pi.
        schema:
          type: string
          minLength: 2
          maxLength: 120
      - name: fiscalYear
        in: query
        required: false
        description: Fiscal year.
        schema:
          type: integer
          minimum: 1985
          maximum: 2100
      - name: limit
        in: query
        required: false
        description: Maximum number of results to return.
        schema:
          type: integer
          minimum: 1
          maximum: 50
          default: 10
      - name: offset
        in: query
        required: false
        description: Number of results to skip before returning (pagination offset).
        schema:
          type: integer
          minimum: 0
          maximum: 14000
          default: 0
      - $ref: '#/components/parameters/TrialMode'
  /api/research/org:
    get:
      tags:
      - Research
      summary: Resolve a research organization via the Research
      description: 'Resolve a research organization via the Research Organization Registry (ROR). Pass id (a ROR id like 056y0v115 or its full URL) to fetch one org, or name to search by free text. Returns the canonical ROR id and name, organization type, status, founding year, location (city, country, GeoNames coordinates), website, Wikipedia link, external identifiers (GRID, ISNI, Wikidata, Crossref Funder), parent/child relationships, and aliases/acronyms. Data: ROR, free and CC0. The canonical institution key in scholarly metadata — pair with /api/papers/search and /api/paper/doi-lookup (author affiliations) and /api/research/author (ORCID). Use to disambiguate an institution name to a stable id before joining datasets.'
      operationId: research_org
      deprecated: false
      security:
      - x402Payment: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                - meta
                properties:
                  data:
                    type: object
                    properties:
                      query:
                        type: object
                        properties:
                          id:
                            type: string
                            nullable: true
                          name:
                            type: string
                            nullable: true
                        required:
                        - id
                        - name
                        additionalProperties: false
                      total:
                        type: number
                        nullable: true
                      count:
                        type: number
                      organizations:
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                            name:
                              type: string
                            established:
                              type: number
                              nullable: true
                            status:
                              type: string
                              nullable: true
                            types:
                              type: array
                              items:
                                type: string
                            location:
                              type: object
                              properties:
                                city:
                                  type: string
                                  nullable: true
                                countryCode:
                                  type: string
                                  nullable: true
                                countryName:
                                  type: string
                                  nullable: true
                                subdivision:
                                  type: string
                                  nullable: true
                                lat:
                                  type: number
                                  nullable: true
                                lng:
                                  type: number
                                  nullable: true
                                geonamesId:
                                  type: number
                                  nullable: true
                              required:
                              - city
                              - countryCode
                              - countryName
                              - subdivision
                              - lat
                              - lng
                              - geonamesId
                              additionalProperties: false
                              nullable: true
                            website:
                              type: string
                              nullable: true
                            wikipedia:
                              type: string
                              nullable: true
                            externalIds:
                              type: array
                              items:
                                type: object
                                properties:
                                  type:
                                    type: string
                                  preferred:
                                    type: string
                                    nullable: true
                                  all:
                                    type: array
                                    items:
                                      type: string
                                required:
                                - type
                                - preferred
                                - all
                                additionalProperties: false
                            relationships:
                              type: array
                              items:
                                type: object
                                properties:
                                  type:
                                    type: string
                                  id:
                                    type: string
                                  label:
                                    type: string
                                    nullable: true
                                required:
                                - type
                                - id
                                - label
                                additionalProperties: false
                            aliases:
                              type: array
                              items:
                                type: string
                          required:
                          - id
                          - name
                          - established
                          - status
                          - types
                          - location
                          - website
                          - wikipedia
                          - externalIds
                          - relationships
                          - aliases
                          additionalProperties: false
                      sources:
                        type: array
                        items:
                          $ref: '#/components/schemas/Source'
                    required:
                    - query
                    - total
                    - count
                    - organizations
                    - 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: research.org
      x-2s-version: null
      x-2s-price:
        usd: 0.003
      x-2s-accepts:
      - x402
      x-2s-response-shape: legacy
      x-payment-info:
        price:
          mode: fixed
          currency: USD
          amount: '0.003000'
        protocols:
        - x402: {}
      parameters:
      - name: id
        in: query
        required: false
        description: Unique identifier of the record to fetch.
        schema:
          type: string
          minLength: 2
          maxLength: 120
      - name: name
        in: query
        required: false
        description: Name to search for.
        schema:
          type: string
          minLength: 2
          maxLength: 200
      - name: limit
        in: query
        required: false
        description: Maximum number of results to return.
        schema:
          type: integer
          minimum: 1
          maximum: 20
          default: 5
      - $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.'