Hyperresearch agent connections API

The agent connections API from Hyperresearch — 2 operation(s) for agent connections.

GitHub OpenAPI

Operations 2

GET /v1/agent-connections List browser-authorized agent connections for the session workspace #
DELETE /v1/agent-connections/{id} Revoke an agent connection in the session workspace #

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/hyperresearch-ai:hyperresearch-ai-agent-connections-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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

hyperresearch-ai-agent-connections-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: hyperresearch Cloud agent connections API
  version: 1.0.0
  description: 'REST v1 for hosted hyperresearch runs, vault access, verification, and billing. Times are RFC 3339 UTC; ids are prefixed ULIDs.


    **Authentication.** Send an API key as `Authorization: Bearer hr_live_…`. Each operation lists the scope it needs (`x-hr-scope`, and in its `security` requirement). OAuth 2.1 (authorization code + PKCE, `oauth2` scheme) issues tokens for the hosted MCP server at https://mcp.hyperresearch.ai/mcp; REST calls use an API key.


    **Errors.** Every 4xx/5xx body is the `ErrorEnvelope`: `error.type`, a stable `error.code`, a human `message`, the offending `param` when there is one, and the `request_id` to quote to support. Branch on `code`, never on `message`.


    **Rate limits.** Responses carry `RateLimit-Policy` and `RateLimit` (draft-ietf-httpapi-ratelimit-headers) alongside the older `X-RateLimit-*` headers. A 429 always carries `Retry-After` (seconds) and `error.retry_after`.


    **Versioning.** The version is in the path. `/v1` is stable: within it, changes are additive only (new operations, new optional request fields, new response fields, new enum values a client must tolerate). A breaking change ships only under a new path version. A deprecated operation is marked `deprecated: true` here and answers with `Deprecation` (RFC 9745) and `Sunset` (RFC 8594) headers and `Link: rel="deprecation"` at least six months before it is removed, and is listed under Deprecations on the policy page: https://hyperresearch.ai/docs/versioning'
  contact:
    name: hyperresearch
    url: https://hyperresearch.ai
  x-api-lifecycle:
    version_scheme: path
    current: v1
    status: stable
    breaking_changes: new path version only
    deprecation_notice_min_days: 182
    deprecation_signals:
    - 'openapi deprecated: true'
    - Deprecation header (RFC 9745)
    - Sunset header (RFC 8594)
    - Link rel="deprecation"
    - policy page deprecations list
    policy: https://hyperresearch.ai/docs/versioning
servers:
- url: https://api.hyperresearch.ai
  description: production
tags:
- name: agent connections
paths:
  /v1/agent-connections:
    get:
      tags:
      - agent connections
      summary: List browser-authorized agent connections for the session workspace
      operationId: listAgentConnections
      description: Agents (MCP clients) a person has authorized for the session workspace through the OAuth consent screen, with their granted scopes, last use and whether the connection is still live. Console session only.
      x-hr-scope: none
      x-hr-auth: session
      security:
      - sessionCookie: []
      responses:
        '200':
          description: Safe connection metadata
          headers:
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
            X-RateLimit-Bucket:
              $ref: '#/components/headers/X-RateLimit-Bucket'
          content:
            application/json:
              schema:
                type: object
                properties:
                  connections:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                        name:
                          type: string
                        client_id:
                          type: string
                        scopes:
                          type: array
                          items:
                            type: string
                        status:
                          type: string
                          enum:
                          - connected
                          - revoked
                          - expired
                        created_at:
                          type: string
                        last_used_at:
                          type:
                          - string
                          - 'null'
                        expires_at:
                          type:
                          - string
                          - 'null'
                        revoked_at:
                          type:
                          - string
                          - 'null'
                      required:
                      - id
                      - name
                      - client_id
                      - scopes
                      - status
                      - created_at
                      - last_used_at
                      - expires_at
                      - revoked_at
                required:
                - connections
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '401':
          description: Authentication failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '403':
          description: Insufficient scope or plan
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '429':
          description: Rate limited or over quota
          headers:
            Retry-After:
              $ref: '#/components/headers/Retry-After'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
            X-RateLimit-Bucket:
              $ref: '#/components/headers/X-RateLimit-Bucket'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '500':
          description: Internal error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
  /v1/agent-connections/{id}:
    delete:
      tags:
      - agent connections
      summary: Revoke an agent connection in the session workspace
      operationId: revokeAgentConnection
      description: 'Revoke an agent connection: its access and refresh tokens stop working immediately. Console session with `X-CSRF-Token`.'
      x-hr-scope: none
      x-hr-auth: session
      security:
      - sessionCookie: []
      parameters:
      - schema:
          type: string
          minLength: 3
          maxLength: 64
        required: true
        name: id
        in: path
      responses:
        '200':
          description: Revoked
          headers:
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
            X-RateLimit-Bucket:
              $ref: '#/components/headers/X-RateLimit-Bucket'
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                    enum:
                    - true
                  id:
                    type: string
                  status:
                    type: string
                    enum:
                    - revoked
                required:
                - ok
                - id
                - status
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '401':
          description: Authentication failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '403':
          description: Insufficient scope or plan
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '429':
          description: Rate limited or over quota
          headers:
            Retry-After:
              $ref: '#/components/headers/Retry-After'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
            X-RateLimit-Bucket:
              $ref: '#/components/headers/X-RateLimit-Bucket'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '500':
          description: Internal error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
components:
  schemas:
    ErrorEnvelope:
      type: object
      properties:
        error:
          type: object
          properties:
            type:
              type: string
              enum:
              - invalid_request
              - authentication
              - permission
              - not_found
              - rate_limited
              - quota_exceeded
              - budget_blocked
              - conflict
              - provider_unavailable
              - internal
              example: invalid_request
            code:
              type: string
              enum:
              - missing_api_key
              - malformed_api_key
              - invalid_api_key
              - api_key_expired
              - api_key_revoked
              - account_suspended
              - workspace_unavailable
              - session_expired
              - insufficient_scope
              - signup_closed
              - role_not_permitted
              - membership_required
              - csrf_required
              - csrf_invalid
              - origin_not_allowed
              - https_required
              - key_route_restricted
              - tier_not_allowed
              - runs_paused
              - invalid_body
              - invalid_query
              - invalid_path
              - query_too_short
              - query_not_research
              - query_too_long
              - query_refused
              - invalid_title
              - invalid_brief
              - invalid_must_read
              - invalid_research_brief
              - invalid_time_window
              - invalid_pulse
              - invalid_metadata
              - invalid_tier
              - too_many_required_headings
              - sources_max_above_ceiling
              - reuse_scope_needs_project
              - invalid_webhook_url
              - metadata_too_large
              - invalid_settings
              - invalid_step
              - unsupported_tier
              - tier_not_offered
              - plan_not_offered
              - provider_excluded
              - dry_run_not_enabled
              - invalid_dry_run_fault
              - chaos_faults_not_enabled
              - invalid_chaos_fault
              - gone
              - run_not_found
              - key_not_found
              - workspace_not_found
              - webhook_not_found
              - artifact_not_found
              - note_not_found
              - escalation_not_found
              - source_not_found
              - connection_not_found
              - project_not_found
              - answer_not_found
              - account_not_found
              - feature_not_enabled
              - idempotency_key_reuse
              - idempotency_in_flight
              - run_not_resumable
              - run_not_finish_resumable
              - run_finish_resume_exhausted
              - run_recovering
              - rerun_not_platform
              - platform_rerun_taken
              - run_not_clarifying
              - result_not_ready
              - verification_running
              - workspace_not_empty
              - turnstile_invalid
              - turnstile_replayed
              - demo_daily_limit
              - demo_receipt_invalid
              - demo_disabled
              - anon_session_invalid
              - anon_refine_limit
              - anon_refine_capacity
              - refine_draft_not_found
              - user_not_found
              - member_not_found
              - member_exists
              - last_owner
              - cannot_self_elevate
              - workspace_limit
              - invitation_not_found
              - invitation_expired
              - invitation_email_mismatch
              - account_mismatch
              - ip_not_allowed
              - chat_keys_retired
              - project_name_taken
              - project_archived
              - run_not_filable
              - confirmation_mismatch
              - ownership_transfer_required
              - account_deleting
              - export_cooldown
              - migration_pending
              - rate_limit_exceeded
              - concurrency_limit
              - spend_cap_exceeded
              - trial_exhausted
              - payment_method_required
              - payment_disputed
              - card_hold_unavailable
              - card_required
              - fixture_not_shareable
              - too_many_url_sources
              - no_citations
              - insufficient_balance
              - wallet_frozen
              - topup_amount_invalid
              - topup_daily_limit
              - answers_capacity
              - engine_unavailable
              - temporarily_unavailable
              - platform_capacity
              - daily_run_limit
              - internal_budget
              - orchestrator_unavailable
              - source_unconfigured
              - source_rate_limited
              - source_upstream_unavailable
              - deployment_misconfigured
              - not_implemented
              - pdf_unavailable
              - internal_error
              example: query_too_short
            message:
              type: string
            param:
              type: string
            retry_after:
              type: integer
            retryable:
              type: boolean
              description: 'Whether the same request may succeed if sent again unchanged (after `retry_after` when present): true for 429, 500, 502, 503, 504 and `idempotency_in_flight`; false for every other 4xx and 501.'
            request_id:
              type: string
              example: req_01J9ZQ7V6H0000000000000000
          required:
          - type
          - code
          - message
          - retryable
          - request_id
      required:
      - error
  headers:
    Retry-After:
      description: Seconds to wait before retrying. Always present on a 429.
      schema:
        type: integer
        minimum: 0
    X-RateLimit-Remaining:
      description: Requests left in this window (legacy form of `RateLimit`).
      schema:
        type: integer
        minimum: 0
    X-RateLimit-Bucket:
      description: 'Which bucket counted the request: `reads`, `status`, `creates`, `writes` or `public`.'
      schema:
        type: string
    RateLimit-Policy:
      description: 'The quota policy this request was counted against (draft-ietf-httpapi-ratelimit-headers): `"<bucket>";q=<requests>;w=<window seconds>`, e.g. `"reads";q=60;w=60`. Buckets: `reads` 60/min, `status` 600/min, `creates` 10/min, `writes` 20/min per credential; `public` 300/min per network on keyless routes.'
      schema:
        type: string
        example: '"reads";q=60;w=60'
    X-RateLimit-Limit:
      description: Requests allowed per window in this bucket (legacy form of `RateLimit-Policy`).
      schema:
        type: integer
        minimum: 0
    X-RateLimit-Reset:
      description: Unix time (seconds) when the window resets.
      schema:
        type: integer
        minimum: 0
    RateLimit:
      description: 'Remaining quota in the current window: `"<bucket>";r=<remaining>;t=<seconds until reset>`, e.g. `"reads";r=57;t=41`.'
      schema:
        type: string
        example: '"reads";r=57;t=41'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'An API key: `hr_live_…` (billed), `hr_test_…` (fixture mode, free), or `hr_chat_…` (vault chat only).'
    sessionCookie:
      type: apiKey
      in: cookie
      name: hr_session
      description: Console session cookie (HttpOnly, set by `POST /v1/auth/clerk/exchange`). Mutations also require an allowlisted `Origin` and the `X-CSRF-Token` header. The requirement list names the workspace-role scope the session must carry.
    clerkAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: A Clerk-issued session JWT, exchanged once for an `hr_session` cookie. Not a hyperresearch API key.
    oauth2:
      type: oauth2
      description: 'OAuth 2.1 for agents (MCP clients): authorization code with PKCE (S256), public clients, dynamic client registration at `https://api.hyperresearch.ai/oauth/register`, discovery at `https://api.hyperresearch.ai/.well-known/oauth-authorization-server`. Access tokens (15 min) and rotating refresh tokens (30 days) are bound to the resource `https://mcp.hyperresearch.ai/mcp` and are accepted by the hosted MCP server, not by the REST operations in this document, which take an API key (`bearerAuth`). A member can only delegate scopes their workspace role holds; the token response reports the granted `scope`.'
      flows:
        authorizationCode:
          authorizationUrl: https://api.hyperresearch.ai/oauth/authorize
          tokenUrl: https://api.hyperresearch.ai/oauth/token
          refreshUrl: https://api.hyperresearch.ai/oauth/token
          scopes:
            mcp: Connect to the hosted MCP server; every OAuth grant carries it.
            vault:read: 'Read and search the workspace vault: notes, claims, sources, hubs, escalations, scholar lookups.'
            runs:read: 'Read runs: status, event stream, results, reports and artifacts.'
            vault:write: 'Write to the workspace vault: create/update/delete notes, ingest claims, import, resolve escalations.'
            runs:write: Start, clarify, pause, resume, abort and re-run research runs (billable).
            fetch: Fetch a URL into the vault on the workspace’s budget (billable; OAuth grants only, checked against the member’s role).
            verify: Run citation, quote, retraction and independence verification jobs and read their results (billable).
            answers:ask: 'Answers: `ask` and `search` calls billed per call from the prepaid wallet, plus reading the wallet balance (billable).'
externalDocs:
  description: hyperresearch API documentation
  url: https://hyperresearch.ai/docs