2s

2s Papers API

The papers API from 2s — 2 operation(s) for papers.

Operations 2

GET /api/papers/citations Citation graph for a scholarly work via OpenAlex #

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-papers-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-papers-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: 2s — the (most) everything Papers 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: Papers
paths:
  /api/papers/citations:
    get:
      tags:
      - Papers
      summary: Citation graph for a scholarly work via OpenAlex
      description: Citation graph for a scholarly work via OpenAlex. Pass id as a DOI (10.xxxx/…, doi.org URL) or an OpenAlex work id (W…). Returns the work's total citation count + reference count, and a paginated list of either the works that CITE it (view=citing, default — sort=recent for newest-first or sort=citations for most-cited-first) or the works it REFERENCES (view=referenced). Each listed work gives DOI, title, year, venue, authors, and its own citation count. Fresh citation data lands after any training cutoff. Complements papers.search (finding papers) with graph traversal (following citations).
      operationId: papers_citations
      deprecated: false
      security:
      - x402Payment: []
      responses:
        '200':
          description: 'Normalized envelope: items = citing or referenced works (id, doi, title, year, venue, authors, citedByCount); total = full count for the selected view; meta.work = the queried work summary (citedByCount + referencedCount).'
          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:
                            id:
                              type: string
                              description: OpenAlex work id (short form, e.g. W3177828909).
                            doi:
                              type: string
                              nullable: true
                            title:
                              type: string
                              nullable: true
                            year:
                              type: number
                              nullable: true
                            publishedAt:
                              type: string
                              nullable: true
                            citedByCount:
                              type: number
                              nullable: true
                            authors:
                              type: array
                              items:
                                type: string
                              description: Author display names (first 10).
                            authorCount:
                              type: number
                            venue:
                              type: string
                              nullable: true
                            url:
                              type: string
                              nullable: true
                          required:
                          - id
                          - doi
                          - title
                          - year
                          - publishedAt
                          - citedByCount
                          - authors
                          - authorCount
                          - venue
                          - url
                          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
                      meta:
                        type: object
                        properties:
                          view:
                            type: string
                          work:
                            type: object
                            properties:
                              id:
                                type: string
                              doi:
                                type: string
                                nullable: true
                              title:
                                type: string
                                nullable: true
                              year:
                                type: number
                                nullable: true
                              citedByCount:
                                type: number
                              referencedCount:
                                type: number
                            required:
                            - id
                            - doi
                            - title
                            - year
                            - citedByCount
                            - referencedCount
                            additionalProperties: false
                        required:
                        - view
                        - work
                        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: papers.citations
      x-2s-version: null
      x-2s-price:
        usd: 0.006
      x-2s-accepts:
      - x402
      x-2s-response-shape: normalized
      x-payment-info:
        price:
          mode: fixed
          currency: USD
          amount: '0.006000'
        protocols:
        - x402: {}
      parameters:
      - name: id
        in: query
        required: true
        description: DOI or OpenAlex work id.
        schema:
          type: string
          minLength: 4
          maxLength: 500
      - name: view
        in: query
        required: false
        description: View.
        schema:
          type: string
          enum:
          - citing
          - referenced
          default: citing
      - name: page
        in: query
        required: false
        description: Page number (1-based) for paginated results.
        schema:
          type: integer
          minimum: 1
          maximum: 200
          default: 1
      - name: limit
        in: query
        required: false
        description: Maximum number of results to return.
        schema:
          type: integer
          minimum: 1
          maximum: 50
          default: 10
      - name: sort
        in: query
        required: false
        description: Field to sort results by.
        schema:
          type: string
          enum:
          - recent
          - citations
          default: recent
      - $ref: '#/components/parameters/TrialMode'
  /api/papers/search:
    get:
      tags:
      - Papers
      summary: Unified scientific literature search across arXiv
      description: 'Unified scientific literature search across arXiv (preprints), PubMed (biomedical), and Semantic Scholar (cross-field, with citation counts). Returns a flat array of papers with stable schema: source, sourceId, doi, title, authors, abstract, year, publishedAt, citationCount, url, pdfUrl. Partial failures surface in the errors array rather than failing the whole call. Optional filters: since (YYYY-MM-DD), sources (subset), limit (max 20 per source).'
      operationId: papers_search
      deprecated: false
      security:
      - x402Payment: []
      responses:
        '200':
          description: 'Normalized envelope: items = papers (flat array across arXiv + PubMed + Semantic Scholar; source, sourceId, doi, title, authors, abstract, year, citationCount, url, pdfUrl); total = count returned across sources; meta.errors = degraded sources; meta.sources/attribution describe per-source coverage.'
          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:
                            source:
                              type: string
                              enum:
                              - arxiv
                              - pubmed
                              - semantic-scholar
                            sourceId:
                              type: string
                              description: Source-native stable id (arXiv id, PMID, S2 paperId).
                            doi:
                              type: string
                              nullable: true
                            title:
                              type: string
                            authors:
                              type: array
                              items:
                                type: string
                            abstract:
                              type: string
                              nullable: true
                            year:
                              type: number
                              nullable: true
                            publishedAt:
                              type: string
                              nullable: true
                              description: ISO 8601 timestamp when the source provides a full date.
                            citationCount:
                              type: number
                              nullable: true
                              description: From Semantic Scholar; null for arXiv/PubMed results.
                            url:
                              type: string
                              description: Canonical URL to view the paper.
                            pdfUrl:
                              type: string
                              nullable: true
                              description: Direct PDF when available (mostly arXiv).
                          required:
                          - source
                          - sourceId
                          - doi
                          - title
                          - authors
                          - abstract
                          - year
                          - publishedAt
                          - citationCount
                          - url
                          - pdfUrl
                          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: string
                            description: Echo of the free-text query.
                          sources:
                            type: array
                            items:
                              type: string
                            description: Sources actually queried (after filtering).
                          errors:
                            type: array
                            items:
                              type: object
                              properties:
                                source:
                                  type: string
                                message:
                                  type: string
                              required:
                              - source
                              - message
                              additionalProperties: false
                            description: Per-source failures; empty when all sources succeeded.
                          attribution:
                            type: array
                            items:
                              type: object
                              properties:
                                source:
                                  type: string
                                license:
                                  type: string
                                url:
                                  type: string
                              required:
                              - source
                              - license
                              - url
                              additionalProperties: false
                            description: Per-source license + terms.
                        required:
                        - query
                        - sources
                        - errors
                        - attribution
                        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: papers.search
      x-2s-version: null
      x-2s-price:
        usd: 0.006
      x-2s-accepts:
      - x402
      x-2s-response-shape: normalized
      x-payment-info:
        price:
          mode: fixed
          currency: USD
          amount: '0.006000'
        protocols:
        - x402: {}
      parameters:
      - name: q
        in: query
        required: true
        description: Free-text search query.
        schema:
          type: string
          minLength: 1
          maxLength: 500
      - name: limit
        in: query
        required: false
        description: Maximum number of results to return.
        schema:
          type: integer
          minimum: 1
          maximum: 20
          default: 10
      - name: since
        in: query
        required: false
        description: Since.
        schema:
          type: string
          pattern: ^\d{4}-\d{2}-\d{2}$
      - name: sources
        in: query
        required: false
        description: Sources.
        schema:
          type: string
      - $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.'