> ## Documentation Index
> Fetch the complete documentation index at: https://context7.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Get documentation context

> Retrieve intelligent, LLM-reranked documentation context for natural language queries. Returns the most relevant code snippets and documentation for your specific question. The text response lists them in relevance order across code and documentation; in JSON, `rank` gives that order. A version in the library ID that is not indexed is not an error: a ready tag that matches the requested numbers is served (`15` serves v15.1.8); otherwise the newest stable release of the requested line when it is newer than the request (v2.3.1 for 2.0.0; below 1.0, the same minor), or else the library's current documentation. A prerelease tag serves only a request for that prerelease. The text response then starts with a version note when the served documentation is not the requested version, and the JSON response carries a `version` object. A version that is not indexed for a public GitHub library is queued for indexing in the background, so a later request for it can be answered. A branch or channel name that is not indexed (`/owner/repo/canary`), or a version with nothing ready to serve, still returns 404 `version_not_found`.



## OpenAPI

````yaml https://context7.com/openapi.json get /v2/context
openapi: 3.0.0
info:
  title: Context7 Public API
  description: >-
    The Context7 Public API provides programmatic access to library
    documentation and search functionality. Get up-to-date documentation and
    code examples for any library.
  version: 2.0.0
  contact:
    name: Context7 Support
    url: https://context7.com
    email: support@context7.com
servers:
  - url: https://context7.com/api
    description: Production server
security: []
tags:
  - name: Search
    description: Search for libraries in the Context7 database
  - name: Context
    description: Retrieve documentation context for queries
  - name: Ask
    description: Answer questions from a website registered with Context7 Ask
  - name: Refresh
    description: Refresh existing libraries to fetch latest documentation
  - name: Policies
    description: Manage teamspace access policies and filters
  - name: Add Library
    description: Submit new libraries for documentation processing
  - name: Metrics
    description: Retrieve usage metrics for libraries
  - name: Usage
    description: See member and teamspace API usage
  - name: Teamspaces
    description: >-
      Teamspaces the caller is a member of. The management API
      (`/v2/teamspaces/*`) accepts a Context7 API key, which reaches only its
      own teamspace and can make changes or read personal data only when it was
      created with write access (other keys can only read and get 403
      `write_access_required` on writes and on personal data), or an OAuth token
      issued for the Context7 Admin MCP server
      (`https://admin.mcp.context7.com/mcp`), which reaches every teamspace of
      the user. A browser session is not accepted.
  - name: Teamspace Admin
    description: >-
      Members, invitations, rules, library policies and requests, usage and the
      spending limit of a teamspace. Every API key can read rules, policies,
      usage and the spending limit. Changes, and reading members, invitations,
      the invite link and library requests (they name people), need an API key
      created with **Write access** ticked (other keys get 403
      `write_access_required`), or the Context7 Admin MCP sign-in.
  - name: Teamspace Libraries
    description: >-
      A teamspace's libraries: its private sources and the libraries it has
      claimed. Add, refresh, configure, version, claim and remove them, and read
      their parse state and usage. A library id `/owner/repo` is two path
      segments. Every API key can read. Changes need an API key created with
      **Write access** ticked (other keys get 403 `write_access_required`), or
      the Context7 Admin MCP sign-in.
  - name: Docs7 Sites
    description: >-
      Docs7 documentation sites of a teamspace: settings, custom domains,
      deployments, previews and the Docs7 agents. Any member can read; owners
      and admins can change; developers can add a site, publish one added for
      the agents only, and rebuild. Sites deployed with the `docs7 deploy` CLI
      have `source: "local"`; operations marked GitHub-only answer 404 for them.
      Every API key can read, except feature requests and the GitHub account
      behind a build (personal data). Changes, and those reads, need an API key
      created with **Write access** ticked (other keys get 403
      `write_access_required`), or the Context7 Admin MCP sign-in.
  - name: Docs7 Analytics
    description: >-
      Traffic of one Docs7 site: visitors, AI crawlers, searches, assistant
      questions and page feedback. Docs7 Free reads the last 7 days, Docs7 Pro
      the last 90. Every API key can read the visitor, crawler and path reports.
      Searches, questions, conversations, feedback and the raw records
      (`explore`) are personal data and need an API key created with **Write
      access** ticked, or the Context7 Admin MCP sign-in.
  - name: Ask Sites
    description: >-
      Manage a teamspace's Context7 Ask sites: add, verify, remove, and read
      their analytics and question log. Every API key can read the sites.
      Changes, and reading the analytics and question log (visitor questions),
      need an API key created with **Write access** ticked (other keys get 403
      `write_access_required`), or the Context7 Admin MCP sign-in.
paths:
  /v2/context:
    get:
      tags:
        - Context
      summary: Get documentation context
      description: >-
        Retrieve intelligent, LLM-reranked documentation context for natural
        language queries. Returns the most relevant code snippets and
        documentation for your specific question. The text response lists them
        in relevance order across code and documentation; in JSON, `rank` gives
        that order. A version in the library ID that is not indexed is not an
        error: a ready tag that matches the requested numbers is served (`15`
        serves v15.1.8); otherwise the newest stable release of the requested
        line when it is newer than the request (v2.3.1 for 2.0.0; below 1.0, the
        same minor), or else the library's current documentation. A prerelease
        tag serves only a request for that prerelease. The text response then
        starts with a version note when the served documentation is not the
        requested version, and the JSON response carries a `version` object. A
        version that is not indexed for a public GitHub library is queued for
        indexing in the background, so a later request for it can be answered. A
        branch or channel name that is not indexed (`/owner/repo/canary`), or a
        version with nothing ready to serve, still returns 404
        `version_not_found`.
      operationId: getContext
      parameters:
        - $ref: '#/components/parameters/LibraryIdParam'
        - $ref: '#/components/parameters/QueryParam'
        - $ref: '#/components/parameters/TypeParam'
        - $ref: '#/components/parameters/FastParam'
        - $ref: '#/components/parameters/LanguageParam'
      responses:
        '200':
          description: Documentation context
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContextResponse'
              example:
                codeSnippets:
                  - codeTitle: Middleware Authentication Example
                    codeDescription: >-
                      Shows how to implement authentication checks in Next.js
                      middleware
                    codeLanguage: typescript
                    codeTokens: 150
                    codeId: >-
                      https://github.com/vercel/next.js/blob/canary/docs/middleware.mdx#_snippet_0
                    pageTitle: Middleware
                    codeList:
                      - language: typescript
                        code: |-
                          import { NextResponse } from 'next/server'
                          import type { NextRequest } from 'next/server'

                          export function middleware(request: NextRequest) {
                            const token = request.cookies.get('token')
                            if (!token) {
                              return NextResponse.redirect(new URL('/login', request.url))
                            }
                            return NextResponse.next()
                          }
                    rank: 2
                infoSnippets:
                  - pageId: >-
                      https://github.com/vercel/next.js/blob/canary/docs/middleware.mdx
                    breadcrumb: Routing > Middleware
                    content: >-
                      Middleware allows you to run code before a request is
                      completed...
                    contentTokens: 200
                    rank: 1
            text/plain:
              schema:
                type: string
              example: >-
                ### Middleware Authentication Example


                Source:
                https://github.com/vercel/next.js/blob/canary/docs/middleware.mdx


                Shows how to implement authentication checks in Next.js
                middleware


                ```typescript

                import { NextResponse } from 'next/server'

                ...

                ```
        '202':
          $ref: '#/components/responses/AcceptedError'
        '301':
          $ref: '#/components/responses/RedirectError'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '402':
          $ref: '#/components/responses/SpendingLimitError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '422':
          $ref: '#/components/responses/UnprocessableEntityError'
        '429':
          $ref: '#/components/responses/RateLimitError'
        '500':
          $ref: '#/components/responses/InternalServerError'
      security:
        - {}
        - bearerAuth: []
components:
  parameters:
    LibraryIdParam:
      name: libraryId
      in: query
      description: >-
        Context7-compatible library ID — the URL path of the library on
        context7.com. Use `/owner/repo` for GitHub repositories, or
        `/<source>/<id>` for other sources (websites, llms.txt,
        GitLab/Bitbucket, etc.). Optionally suffix with `/<version>` or
        `@<version>` to pin a specific version. See [Library ID
        format](/api-guide#library-id-format).
      required: true
      schema:
        type: string
        minLength: 1
        maxLength: 500
        pattern: ^/[^/]+/[^/]+([/@][^/]+)?$
      examples:
        github:
          summary: GitHub repository
          value: /vercel/next.js
        website:
          summary: Website source
          value: /websites/uploadcare_com
        llmstxt:
          summary: llms.txt source
          value: /llmstxt/example
        withVersion:
          summary: With specific version (slash)
          value: /vercel/next.js/v14.3.0
        withVersionAt:
          summary: With specific version (@ syntax)
          value: /vercel/next.js@v14.3.0
    QueryParam:
      name: query
      in: query
      description: >-
        User's original question or task - used for intelligent relevance
        ranking
      required: true
      schema:
        type: string
        minLength: 1
        maxLength: 500
      example: How to manage state with hooks
    TypeParam:
      name: type
      in: query
      description: Response format type
      required: false
      schema:
        type: string
        enum:
          - json
          - txt
        default: txt
      example: json
    FastParam:
      name: fast
      in: query
      description: >-
        When `true`, skip LLM reranking and return top vector-search results
        directly. Trades relevance quality for lower latency.
      required: false
      schema:
        type: string
        enum:
          - 'true'
          - 'false'
        default: 'false'
      example: 'true'
    LanguageParam:
      name: language
      in: query
      description: >-
        Optional programming language the caller writes in, such as `Python` or
        `TypeScript`. A soft ranking preference: the SDK and code examples in
        that language rank first, and other documentation is still returned when
        nothing in that language matches. Only the first 40 characters are used.
      required: false
      schema:
        type: string
      example: Python
  schemas:
    ContextResponse:
      type: object
      description: Documentation context response
      properties:
        codeSnippets:
          type: array
          description: Relevant code snippets
          items:
            $ref: '#/components/schemas/ContextCodeSnippet'
        infoSnippets:
          type: array
          description: Relevant documentation snippets
          items:
            $ref: '#/components/schemas/ContextInfoSnippet'
        rules:
          type: object
          description: Optional library-specific rules and guidelines
          properties:
            global:
              type: array
              description: Global team rules
              items:
                type: string
            libraryOwn:
              type: array
              description: Rules defined by the library owner
              items:
                type: string
            libraryTeam:
              type: array
              description: Library-specific rules from the team
              items:
                type: string
        version:
          type: object
          description: >-
            Present only when the library ID names a version that is not
            indexed. Says what was served instead, with the fields of each entry
            of the Search API's `version.libraries`. The text response states
            the same in a leading version note when the status is unverified.
          required:
            - libraryId
            - requested
            - served
            - status
          properties:
            libraryId:
              type: string
              description: >-
                The library id served, including the served tag when one was
                matched.
              example: /vercel/next.js/v15.1.11
            requested:
              type: string
              description: The version named by the library ID.
              example: v15.0.0
            served:
              type: string
              nullable: true
              description: >-
                The indexed tag served: the matching tag or, when unverified,
                the newest stable release of the requested line that is newer
                than the request. Null when current documentation was served
                instead.
              example: v15.1.11
            status:
              type: string
              enum:
                - verified
                - unverified
              description: >-
                verified when the served tag matches the requested version (`15`
                served by v15.1.11); unverified when another release or current
                documentation was served.
          example:
            libraryId: /vercel/next.js/v15.1.11
            requested: v15.0.0
            served: v15.1.11
            status: unverified
      required:
        - codeSnippets
        - infoSnippets
    ContextCodeSnippet:
      allOf:
        - $ref: '#/components/schemas/CodeSnippet'
        - type: object
          properties:
            rank:
              type: integer
              minimum: 1
              description: >-
                1-based position in the text response, shared by codeSnippets
                and infoSnippets. Sort both lists together by rank to read the
                snippets in the order the text response gives them (the
                selection model's relevance order when it ranked them).
              example: 1
          required:
            - rank
    ContextInfoSnippet:
      allOf:
        - $ref: '#/components/schemas/InfoSnippet'
        - type: object
          properties:
            rank:
              type: integer
              minimum: 1
              description: >-
                1-based position in the text response, shared by codeSnippets
                and infoSnippets. Sort both lists together by rank to read the
                snippets in the order the text response gives them (the
                selection model's relevance order when it ranked them).
              example: 1
          required:
            - rank
    Error:
      type: object
      description: Standard error response
      properties:
        error:
          type: string
          description: Error code identifier
        message:
          type: string
          description: Human-readable error message
      required:
        - error
        - message
    RedirectErrorResponse:
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            redirectUrl:
              type: string
              description: New location of the library
    CodeSnippet:
      type: object
      description: A code snippet from library documentation
      properties:
        codeTitle:
          type: string
          description: Title of the code snippet
        codeDescription:
          type: string
          description: Description of what the code does
        codeLanguage:
          type: string
          description: Primary programming language
        codeTokens:
          type: integer
          description: Token count for the snippet
        codeId:
          type: string
          description: URL to source location
        pageTitle:
          type: string
          description: Title of the documentation page
        codeList:
          type: array
          description: Code examples in different languages
          items:
            $ref: '#/components/schemas/CodeExample'
        isDynamic:
          type: boolean
          description: >-
            Whether this snippet was recovered from the dynamic source-code
            index instead of the primary docs index
        sourceFile:
          type: string
          description: Repo-relative source file path for dynamic snippets
      required:
        - codeTitle
        - codeDescription
        - codeLanguage
        - codeTokens
        - codeId
        - pageTitle
        - codeList
    InfoSnippet:
      type: object
      description: A documentation snippet
      properties:
        pageId:
          type: string
          description: URL to source page
        breadcrumb:
          type: string
          description: Navigation breadcrumb path
        content:
          type: string
          description: The documentation content
        contentTokens:
          type: integer
          description: Token count for the content
      required:
        - content
        - contentTokens
    CodeExample:
      type: object
      description: A single code example
      properties:
        language:
          type: string
          description: Programming language
        code:
          type: string
          description: The actual code content
      required:
        - language
        - code
  responses:
    AcceptedError:
      description: Accepted - Library not yet finalized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: library_not_finalized
            message: >-
              Library /owner/repo is still being processed. Please try again
              shortly.
    RedirectError:
      description: Moved Permanently - Library has been redirected
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RedirectErrorResponse'
          example:
            error: library_redirected
            message: >-
              Library /owner/repo has been redirected to this library:
              /new-owner/new-repo.
            redirectUrl: /new-owner/new-repo
    BadRequestError:
      description: Bad Request - Invalid input parameters
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            validationError:
              summary: Validation error
              value:
                error: validation_error
                message: Library name is required
            invalidLibraryId:
              summary: Invalid library ID format
              value:
                error: invalid_library_id
                message: >-
                  Invalid library ID format. Expected: `/owner/repo` for GitHub
                  repositories, or `/<source>/<id>` for other sources (the URL
                  path of the library on context7.com)
    UnauthorizedError:
      description: Unauthorized - Invalid or missing API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: invalid_api_key
            message: >-
              Invalid API key. Please check your API key. API keys should start
              with 'ctx7sk' prefix.
    SpendingLimitError:
      description: >-
        Payment Required - the teamspace's configured monthly spending limit has
        been reached. A teamspace owner or admin can raise the limit in billing
        settings, or the cap will reset at the start of the next billing month.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: spending_limit_exceeded
            message: >-
              Monthly spending limit of $5.00 reached for this teamspace. An
              owner or admin can raise the limit at
              https://context7.com/dashboard/billing, or the cap will reset at
              the start of next month.
    ForbiddenError:
      description: Forbidden - Insufficient permissions or plan restrictions
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            accessDenied:
              summary: Library not in allowed list
              value:
                error: access_denied
                message: >-
                  Access denied: Library /owner/repo is not included in your
                  allowed libraries
            insufficientRole:
              summary: Insufficient team role
              value:
                error: forbidden
                message: Only team owners and admins can add private repositories
            planRequired:
              summary: Plan upgrade required
              value:
                error: forbidden
                message: >-
                  Private repositories require a pro plan or team. Upgrade at
                  https://context7.com/plans
    NotFoundError:
      description: Not Found - Resource doesn't exist
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            libraryNotFound:
              summary: Library not found
              value:
                error: library_not_found
                message: >-
                  Library "/owner/repo" not found. Please check the library ID
                  or your access permissions.
            versionNotFound:
              summary: Version not found
              value:
                error: version_not_found
                message: >-
                  Version "canary" not found for library "/owner/repo".
                  Available versions: v2.0.0, v1.5.0
            noSnippetsFound:
              summary: No snippets found
              value:
                error: no_snippets_found
                message: Could not fetch documentation snippets from the library.
            noRelevantSnippets:
              summary: No snippets matched the query
              value:
                error: no_relevant_snippets
                message: >-
                  No documentation in "/owner/repo" matched this query. Try a
                  more specific query with different terms, or search for
                  another library that covers this topic.
            teamNotFound:
              summary: Team not found
              value:
                error: team_not_found
                message: Team not found or access denied
            userNotFound:
              summary: User not found
              value:
                error: user_not_found
                message: User not found
            noLibrariesFound:
              summary: No libraries matched search query
              value:
                error: no_libraries_found
                message: >-
                  No libraries found for "nonexistent-lib". Try a different
                  search term.
    UnprocessableEntityError:
      description: Unprocessable Entity - Library is too large or has no code
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            tooLarge:
              summary: Library too large
              value:
                error: library_too_large
                message: Library /owner/repo is too large to process.
            noCode:
              summary: No code found
              value:
                error: no_code_found
                message: >-
                  Library /owner/repo has no or too few snippets found in
                  documentation files.
    RateLimitError:
      description: Too Many Requests - Rate limit exceeded
      headers:
        Retry-After:
          description: Seconds until rate limit resets
          schema:
            type: integer
        RateLimit-Limit:
          description: Request limit
          schema:
            type: integer
        RateLimit-Remaining:
          description: Remaining requests
          schema:
            type: integer
        RateLimit-Reset:
          description: Unix timestamp when limit resets
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: rate_limit_exceeded
            message: Rate limit exceeded. Please try again later.
    InternalServerError:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: internal_error
            message: An error occurred while processing your request
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Get your API key at
        [context7.com/dashboard](https://context7.com/dashboard). Treat your API
        key like a password and store it securely. Every key can read the
        management API (`/v2/teamspaces/*`), except personal data: member and
        invitation emails, library requesters, visitor questions, Docs7 reader
        searches, conversations, feedback and feature requests, and the GitHub
        account behind a build. To read those or make changes there, the key
        must be created with **Write access** ticked; other keys get 403
        `write_access_required`.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.