Context4
Technical documentation

Tool sessions.

Context4 tool sessions: create and configure sessions, discover exposed actions and retrieve dynamic MCP URLs through the API.

Generated from the public Context4 OpenAPI. Authenticate with Authorization: Bearer and an API key. General rules: API. Full contract: OpenAPI JSON. In the JSON below, $ref points to a named schema in the Schemas section.

createToolSession

POST /v1/tool-sessions

Deployment URL: https://ctx4.me/v1/tool-sessions. Replace parameters in braces with actual IDs from the API.

Create a tool session (returns the per-session MCP URL)

Capability: tool-sessions:write.

Parameters

NameLocationRequiredType and constraints
Idempotency-Keyheaderyes{"type":"string"} Client-chosen key (8-128 chars of [A-Za-z0-9._:-]); replays with the same payload return the original outcome

Request body

Required. CreateToolSessionRequest

Data
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/CreateToolSessionRequest"
      }
    }
  }
}

Responses and errors

HTTPMeaningFormat and schema
201The created session with its per-session MCP URLapplication/json ToolSessionWithMcp
400Problem (validation_failed)application/problem+json Problem
401Problem (authentication_required, invalid_api_key, api_key_expired, api_key_revoked)application/problem+json Problem
403Problem (capability_missing, forbidden)application/problem+json Problem
404Problem (not_found)application/problem+json Problem
409Problem (conflict)application/problem+json Problem
429Problem (rate_limited)application/problem+json Problem
500Problem (internal)application/problem+json Problem
503Problem (service_unavailable)application/problem+json Problem

Successful response headers:

Data
{
  "X-Request-Id": {
    "description": "Correlation id echoed on every response",
    "schema": {
      "type": "string"
    }
  },
  "RateLimit-Limit": {
    "description": "Per-key request limit for the current window",
    "schema": {
      "type": "integer"
    }
  },
  "RateLimit-Remaining": {
    "description": "Requests remaining in the current window",
    "schema": {
      "type": "integer"
    }
  },
  "RateLimit-Reset": {
    "description": "Seconds until the current window resets",
    "schema": {
      "type": "integer"
    }
  }
}

getToolSession

GET /v1/tool-sessions/{toolSessionId}

Deployment URL: https://ctx4.me/v1/tool-sessions/{toolSessionId}. Replace parameters in braces with actual IDs from the API.

Get one tool session with its configuration

Capability: tool-sessions:read.

Parameters

NameLocationRequiredType and constraints
toolSessionIdpathyes{"type":"string","format":"uuid","example":"9b2f6f2e-4b0a-4bd2-8b7e-3f8a1c2d4e5f"}

Responses and errors

HTTPMeaningFormat and schema
200The session view including its configurationapplication/json ToolSession
400Problem (validation_failed)application/problem+json Problem
401Problem (authentication_required, invalid_api_key, api_key_expired, api_key_revoked)application/problem+json Problem
403Problem (capability_missing, forbidden)application/problem+json Problem
404Problem (not_found)application/problem+json Problem
429Problem (rate_limited)application/problem+json Problem
500Problem (internal)application/problem+json Problem
503Problem (service_unavailable)application/problem+json Problem

Successful response headers:

Data
{
  "X-Request-Id": {
    "description": "Correlation id echoed on every response",
    "schema": {
      "type": "string"
    }
  },
  "RateLimit-Limit": {
    "description": "Per-key request limit for the current window",
    "schema": {
      "type": "integer"
    }
  },
  "RateLimit-Remaining": {
    "description": "Requests remaining in the current window",
    "schema": {
      "type": "integer"
    }
  },
  "RateLimit-Reset": {
    "description": "Seconds until the current window resets",
    "schema": {
      "type": "integer"
    }
  }
}

patchToolSession

PATCH /v1/tool-sessions/{toolSessionId}

Deployment URL: https://ctx4.me/v1/tool-sessions/{toolSessionId}. Replace parameters in braces with actual IDs from the API.

Update session tool enablement (CAS)

Capability: tool-sessions:write.

Parameters

NameLocationRequiredType and constraints
toolSessionIdpathyes{"type":"string","format":"uuid","example":"9b2f6f2e-4b0a-4bd2-8b7e-3f8a1c2d4e5f"}

Request body

Required. PatchToolSessionRequest

Data
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/PatchToolSessionRequest"
      }
    }
  }
}

Responses and errors

HTTPMeaningFormat and schema
200The updated session viewapplication/json ToolSession
400Problem (validation_failed)application/problem+json Problem
401Problem (authentication_required, invalid_api_key, api_key_expired, api_key_revoked)application/problem+json Problem
403Problem (capability_missing, forbidden)application/problem+json Problem
404Problem (not_found)application/problem+json Problem
409Problem (conflict)application/problem+json Problem
429Problem (rate_limited)application/problem+json Problem
500Problem (internal)application/problem+json Problem
503Problem (service_unavailable)application/problem+json Problem

Successful response headers:

Data
{
  "X-Request-Id": {
    "description": "Correlation id echoed on every response",
    "schema": {
      "type": "string"
    }
  },
  "RateLimit-Limit": {
    "description": "Per-key request limit for the current window",
    "schema": {
      "type": "integer"
    }
  },
  "RateLimit-Remaining": {
    "description": "Requests remaining in the current window",
    "schema": {
      "type": "integer"
    }
  },
  "RateLimit-Reset": {
    "description": "Seconds until the current window resets",
    "schema": {
      "type": "integer"
    }
  }
}

listToolSessionTools

GET /v1/tool-sessions/{toolSessionId}/tools

Deployment URL: https://ctx4.me/v1/tool-sessions/{toolSessionId}/tools. Replace parameters in braces with actual IDs from the API.

Session-scoped tool discovery (pinned snapshot, exposed tools only)

Capability: tool-sessions:read.

Parameters

NameLocationRequiredType and constraints
toolSessionIdpathyes{"type":"string","format":"uuid","example":"9b2f6f2e-4b0a-4bd2-8b7e-3f8a1c2d4e5f"}
cursorqueryno{"type":"string","minLength":1,"maxLength":400,"pattern":"^[A-Za-z0-9_-]+$","description":"Opaque pagination cursor from a previous response"} Opaque pagination cursor from a previous response
limitqueryno{"type":"integer","minimum":1,"maximum":100,"description":"Page size (1-100, default 20)"} Page size (1-100, default 20)

Responses and errors

HTTPMeaningFormat and schema
200The session's exposed tools with pinned schemasapplication/json SessionToolListResponse
400Problem (validation_failed)application/problem+json Problem
401Problem (authentication_required, invalid_api_key, api_key_expired, api_key_revoked)application/problem+json Problem
403Problem (capability_missing, forbidden)application/problem+json Problem
404Problem (not_found)application/problem+json Problem
429Problem (rate_limited)application/problem+json Problem
500Problem (internal)application/problem+json Problem
503Problem (service_unavailable)application/problem+json Problem

Successful response headers:

Data
{
  "X-Request-Id": {
    "description": "Correlation id echoed on every response",
    "schema": {
      "type": "string"
    }
  },
  "RateLimit-Limit": {
    "description": "Per-key request limit for the current window",
    "schema": {
      "type": "integer"
    }
  },
  "RateLimit-Remaining": {
    "description": "Requests remaining in the current window",
    "schema": {
      "type": "integer"
    }
  },
  "RateLimit-Reset": {
    "description": "Seconds until the current window resets",
    "schema": {
      "type": "integer"
    }
  }
}