AppDirect Responses API v2 API

OpenAI Responses-compatible API (v2). Supports streaming (SSE) and non-streaming runs, threaded and stateless execution, and lifecycle control (cancel / pause / resume). The shape mirrors the [official OpenAI Responses API](https://platform.openai.com/docs/api-reference/responses) for inputs, outputs, tools, and streaming events. Items below labelled **[devs.ai extension]** have no equivalent in OpenAI's spec; everything else is intended to be 1:1 compatible. ### Vendor extensions used to flag devs.ai additions Every devs.ai-specific element in this spec is also tagged with a machine-readable [OpenAPI specification extension](https://swagger.io/docs/specification/openapi-extensions/) so tooling can detect them programmatically without parsing description text: - **`x-devs-ai-extension: true`** — applied to schemas, schema properties, parameters, response headers, and operations that have no OpenAI counterpart. - **`x-devs-ai-extension-values: [string, ...]`** — applied to enum schemas/properties whose enum is OpenAI-aligned but where devs.ai accepts/emits additional values. Lists only the extra values (e.g. `["cancelled"]` on `ResponseStatus`). - **`x-devs-ai-extension-behavior: ""`** — applied where the field name itself is OpenAI-standard but devs.ai's handling differs (e.g. `optional-on-request` on `MessageInputItem.type` because devs.ai accepts the field being omitted while OpenAI requires it). ### devs.ai Extensions A single reference list of every devs.ai-specific addition exposed by this API. Each entry below is also marked `**[devs.ai extension]**` at its source and carries one of the `x-devs-ai-extension*` vendor extensions described above. **Request fields (`CreateResponseRequest`)** - `chat_mode` — `execute` / `chat` / `plan` execution mode. - `user_secrets` — short-lived per-request API keys / secrets for tools. - `thread_mode` — concurrent-request handling on an existing thread (`collect` / `steer` / `interrupt` / `force`). - `options` — internal devs.ai chat options (provider routing, tracing, etc.). - `reasoning.effort` extra values `none` and `xhigh` (in addition to OpenAI's `minimal` / `low` / `medium` / `high`). **Input content-part flags** - `input_text.invisible` / `input_image.invisible` / `input_file.invisible` — content sent to the model but hidden from end-user transcripts. - `input_text.metadata` — arbitrary metadata attached to a content part (not forwarded to the model). - `output_text.logprobs` (when `output_text` appears inside an `OutputMessageInputItem`). **Input item enum** - `FunctionCallOutputInputItem.status` uses `["success", "error", "cancelled"]` instead of OpenAI's `["in_progress", "completed", "incomplete"]` (incompatible enum). **Tools (`ToolDefinition`)** — only `function` and `web_search` mirror OpenAI; everything below is devs.ai-specific. - `python` — emits `server_tool_call` items (not OpenAI's `code_interpreter_call`). - `image_generation` — shares the type name with OpenAI but uses devs.ai's input shape and emits `server_tool_call` items. - `mcp_server` — references a configured devs.ai MCP integration; does not emit OpenAI's `mcp_list_tools` discovery events or `mcp_approval_request` / `mcp_approval_response` items. - `spreadsheet`, `memory`, `sandbox`, `deep_research` — no OpenAI counterpart. - `web_search.includeXSearch` — extra X (Twitter) search inclusion flag. **Output items (`OutputItem`)** - `server_tool_call` and `server_tool_call_output` — emitted instead of OpenAI's `code_interpreter_call` / `image_generation_call` items for devs.ai's server-side tools. **Response fields (`Response`)** - `selection_metadata` — model routing / selection metadata (chosen provider, fallback chain, latency hints). - `status` extra value `cancelled` (in addition to OpenAI's `in_progress` / `completed` / `failed` / `incomplete`). - `incomplete_details.reason` extra value `paused` (in addition to OpenAI's `max_output_tokens` / `content_filter`). **Streaming events** (full list and payloads in the `x-streaming-events` reference under `components`) - `response.server_tool_call.in_progress` / `.completed` / `.failed`. - `response.server_tool_call_arguments.delta` / `.done`. - `response.subagent.started` / `.progress` / `.completed`. - `response.output_item.added.status_hints` (optional field on `response.output_item.added`). - Every event payload includes a monotonically increasing `sequence_number` field. - Terminal sentinel `event: done` / `data: [DONE]` after the last lifecycle event. **Endpoints / headers** - `POST /api/v2/responses/{responseId}/pause` — pause an active threaded response run. - `POST /api/v2/responses/{responseId}/resume` — resume a paused threaded response run, optionally supplying tool outputs. - `GET /api/v2/responses/{responseId}/stream` — reconnect to an in-flight SSE stream after a network drop, resuming from `lastSequence`. - `POST /api/v2/responses/{responseId}/deep-research/resume` — approve / deny / clarify a paused deep research subagent. - `x-stream-chat-id` response header on streaming `POST /api/v2/responses` and on the `/stream` reconnect endpoint.

Operations 7

POST /api/v2/responses Create a response #
GET /api/v2/responses/{responseId} Get a response #
GET /api/v2/responses/{responseId}/stream Reconnect to an in-flight response stream #
POST /api/v2/responses/{responseId}/cancel Cancel a response #
POST /api/v2/responses/{responseId}/pause Pause a response #
POST /api/v2/responses/{responseId}/resume Resume a response #
POST /api/v2/responses/{responseId}/deep-research/resume Resume a deep research subagent #

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/appdirect-responses-api-v2-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 email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

appdirect-responses-api-v2-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: The Companies API allows developers to manage marketplace companies and their user memberships.
  title: Companies AI Embed Responses API v2 API
  license:
    name: Apache License, Version 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0
  version: v296.0-SNAPSHOT
servers:
- url: https://marketplace.appdirect.com/api
- url: https://virtserver.swaggerhub.com
tags:
- name: Responses API v2
  description: 'OpenAI Responses-compatible API (v2). Supports streaming (SSE) and non-streaming runs, threaded and stateless execution, and lifecycle control (cancel / pause / resume).


    The shape mirrors the [official OpenAI Responses API](https://platform.openai.com/docs/api-reference/responses) for inputs, outputs, tools, and streaming events. Items below labelled **[devs.ai extension]** have no equivalent in OpenAI''s spec; everything else is intended to be 1:1 compatible.


    ### Vendor extensions used to flag devs.ai additions


    Every devs.ai-specific element in this spec is also tagged with a machine-readable [OpenAPI specification extension](https://swagger.io/docs/specification/openapi-extensions/) so tooling can detect them programmatically without parsing description text:


    - **`x-devs-ai-extension: true`** — applied to schemas, schema properties, parameters, response headers, and operations that have no OpenAI counterpart.

    - **`x-devs-ai-extension-values: [string, ...]`** — applied to enum schemas/properties whose enum is OpenAI-aligned but where devs.ai accepts/emits additional values. Lists only the extra values (e.g. `["cancelled"]` on `ResponseStatus`).

    - **`x-devs-ai-extension-behavior: "<id>"`** — applied where the field name itself is OpenAI-standard but devs.ai''s handling differs (e.g. `optional-on-request` on `MessageInputItem.type` because devs.ai accepts the field being omitted while OpenAI requires it).


    ### devs.ai Extensions


    A single reference list of every devs.ai-specific addition exposed by this API. Each entry below is also marked `**[devs.ai extension]**` at its source and carries one of the `x-devs-ai-extension*` vendor extensions described above.


    **Request fields (`CreateResponseRequest`)**

    - `chat_mode` — `execute` / `chat` / `plan` execution mode.

    - `user_secrets` — short-lived per-request API keys / secrets for tools.

    - `thread_mode` — concurrent-request handling on an existing thread (`collect` / `steer` / `interrupt` / `force`).

    - `options` — internal devs.ai chat options (provider routing, tracing, etc.).

    - `reasoning.effort` extra values `none` and `xhigh` (in addition to OpenAI''s `minimal` / `low` / `medium` / `high`).


    **Input content-part flags**

    - `input_text.invisible` / `input_image.invisible` / `input_file.invisible` — content sent to the model but hidden from end-user transcripts.

    - `input_text.metadata` — arbitrary metadata attached to a content part (not forwarded to the model).

    - `output_text.logprobs` (when `output_text` appears inside an `OutputMessageInputItem`).


    **Input item enum**

    - `FunctionCallOutputInputItem.status` uses `["success", "error", "cancelled"]` instead of OpenAI''s `["in_progress", "completed", "incomplete"]` (incompatible enum).


    **Tools (`ToolDefinition`)** — only `function` and `web_search` mirror OpenAI; everything below is devs.ai-specific.

    - `python` — emits `server_tool_call` items (not OpenAI''s `code_interpreter_call`).

    - `image_generation` — shares the type name with OpenAI but uses devs.ai''s input shape and emits `server_tool_call` items.

    - `mcp_server` — references a configured devs.ai MCP integration; does not emit OpenAI''s `mcp_list_tools` discovery events or `mcp_approval_request` / `mcp_approval_response` items.

    - `spreadsheet`, `memory`, `sandbox`, `deep_research` — no OpenAI counterpart.

    - `web_search.includeXSearch` — extra X (Twitter) search inclusion flag.


    **Output items (`OutputItem`)**

    - `server_tool_call` and `server_tool_call_output` — emitted instead of OpenAI''s `code_interpreter_call` / `image_generation_call` items for devs.ai''s server-side tools.


    **Response fields (`Response`)**

    - `selection_metadata` — model routing / selection metadata (chosen provider, fallback chain, latency hints).

    - `status` extra value `cancelled` (in addition to OpenAI''s `in_progress` / `completed` / `failed` / `incomplete`).

    - `incomplete_details.reason` extra value `paused` (in addition to OpenAI''s `max_output_tokens` / `content_filter`).


    **Streaming events** (full list and payloads in the `x-streaming-events` reference under `components`)

    - `response.server_tool_call.in_progress` / `.completed` / `.failed`.

    - `response.server_tool_call_arguments.delta` / `.done`.

    - `response.subagent.started` / `.progress` / `.completed`.

    - `response.output_item.added.status_hints` (optional field on `response.output_item.added`).

    - Every event payload includes a monotonically increasing `sequence_number` field.

    - Terminal sentinel `event: done` / `data: [DONE]` after the last lifecycle event.


    **Endpoints / headers**

    - `POST /api/v2/responses/{responseId}/pause` — pause an active threaded response run.

    - `POST /api/v2/responses/{responseId}/resume` — resume a paused threaded response run, optionally supplying tool outputs.

    - `GET /api/v2/responses/{responseId}/stream` — reconnect to an in-flight SSE stream after a network drop, resuming from `lastSequence`.

    - `POST /api/v2/responses/{responseId}/deep-research/resume` — approve / deny / clarify a paused deep research subagent.

    - `x-stream-chat-id` response header on streaming `POST /api/v2/responses` and on the `/stream` reconnect endpoint.'
paths:
  /api/v2/responses:
    post:
      operationId: createResponse
      summary: Create a response
      description: "Submit a prompt and receive a model response. When `stream=true` (default),\nreturns an SSE event stream following the OpenAI Responses streaming format.\nWhen `stream=false`, returns the completed response as JSON.\n\n**Execution modes:**\n- **Threaded**: when `previous_response_id` or `conversation` is provided.\n  Signals a long-lived Temporal `ThreadWorkflow` that processes requests sequentially.\n- **Stateless**: when neither `previous_response_id` nor `conversation` is set.\n  Starts a one-shot `SingleResponseWorkflow`.\n\nResponse headers include `x-response-id`, `x-response-status`, and, for streaming responses, `x-stream-epoch`.\n"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateResponseRequest'
      responses:
        '200':
          description: 'When `stream=true`: SSE event stream. When `stream=false`: completed Response object.

            '
          headers:
            x-response-id:
              schema:
                type: string
              description: Unique response run identifier.
            x-response-status:
              schema:
                type: string
              description: Initial response status.
            x-stream-chat-id:
              schema:
                type: string
              description: '**[devs.ai extension]** Set on streaming responses (`stream=true`). Equals the underlying chat-stream identifier and can be passed as `streamChatId` to `GET /api/v2/responses/{responseId}/stream` to reconnect after a network drop. Equal to `x-response-id`.'
              x-devs-ai-extension: true
            x-stream-epoch:
              schema:
                type: string
              description: '**[devs.ai extension]** Redis stream epoch for reconnect handshakes. Persist this with `lastSequence` and pass it as `streamEpoch` to `GET /api/v2/responses/{responseId}/stream`.'
              x-devs-ai-extension: true
          content:
            text/event-stream:
              schema:
                description: SSE event stream. See Streaming Events section.
                type: string
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '400':
          description: Invalid request (missing model, invalid file references, schema validation failure)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Responses API v2
      security:
      - ApiKeyAuth: []
  /api/v2/responses/{responseId}:
    get:
      operationId: getResponse
      summary: Get a response
      description: 'Retrieve a response run by ID. Returns the full response object including

        output items, usage, and status.

        '
      parameters:
      - $ref: '#/components/parameters/responseId'
      responses:
        '200':
          description: Response object
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '404':
          description: Response not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Responses API v2
      security:
      - ApiKeyAuth: []
  /api/v2/responses/{responseId}/stream:
    get:
      operationId: streamResponse
      summary: Reconnect to an in-flight response stream
      description: '**[devs.ai extension]** Re-attach to a still-running response''s SSE event stream after a network drop. The path parameter `responseId` and the required query parameter `streamChatId` MUST be equal — `streamChatId` exists for explicit client-side intent and to align with the underlying chat-stream backend.


        When `lastSequence` is supplied, events with `sequence_number <= lastSequence` are suppressed so the client receives only events it has not yet seen. The first event delivered is therefore typically `response.in_progress` (or whatever event follows `lastSequence`), NOT `response.created`.


        This endpoint has no equivalent in OpenAI''s Responses API.


        Returns `404` when the run cannot be found, `streamChatId` does not equal `responseId`, or the underlying stream has already completed and can no longer be reattached.

        '
      x-devs-ai-extension: true
      parameters:
      - $ref: '#/components/parameters/responseId'
      - name: streamChatId
        in: query
        required: true
        description: '**[devs.ai extension]** Must equal the path `responseId`. Identifies the underlying chat-stream to attach to.'
        schema:
          type: string
          minLength: 1
        x-devs-ai-extension: true
      - name: lastSequence
        in: query
        required: false
        description: '**[devs.ai extension]** Last `sequence_number` the client has already processed. Events with `sequence_number <= lastSequence` are suppressed. Default `-1` (no events suppressed).'
        schema:
          type: integer
          minimum: -1
          default: -1
        x-devs-ai-extension: true
      responses:
        '200':
          description: SSE event stream identical in shape to the create-response stream (see Streaming Events section).
          headers:
            x-response-id:
              schema:
                type: string
              description: Echoed response run identifier.
            x-stream-chat-id:
              schema:
                type: string
              description: '**[devs.ai extension]** Echoed `streamChatId` query parameter.'
              x-devs-ai-extension: true
          content:
            text/event-stream:
              schema:
                description: SSE event stream. See Streaming Events section.
                type: string
        '404':
          description: Response not found, `streamChatId` does not match `responseId`, or the underlying stream has already completed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Responses API v2
      security:
      - ApiKeyAuth: []
  /api/v2/responses/{responseId}/cancel:
    post:
      operationId: cancelResponse
      summary: Cancel a response
      description: 'Cancel an active response run. Only works for threaded execution mode.

        Idempotent — returns success if the response is already in a terminal state.

        Sends a `CANCEL_ACTIVE_REQUEST` signal to the Temporal workflow.

        '
      parameters:
      - $ref: '#/components/parameters/responseId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CancelResponseRequest'
      responses:
        '200':
          description: Cancel requested (or already terminal)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ControlResponse'
        '404':
          description: Response not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Not a threaded response (stateless responses cannot be cancelled via this endpoint)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Responses API v2
      security:
      - ApiKeyAuth: []
  /api/v2/responses/{responseId}/pause:
    post:
      operationId: pauseResponse
      summary: Pause a response
      description: '**[devs.ai extension]** Pause an active response run. Execution halts at the next safe checkpoint;

        in-flight activities complete but no new turns are scheduled.

        Only works for threaded execution mode. No equivalent in OpenAI''s Responses API.

        '
      x-devs-ai-extension: true
      parameters:
      - $ref: '#/components/parameters/responseId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PauseResponseRequest'
      responses:
        '200':
          description: Pause requested
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ControlResponse'
        '404':
          description: Response not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Not a threaded response or already terminal
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Responses API v2
      security:
      - ApiKeyAuth: []
  /api/v2/responses/{responseId}/resume:
    post:
      operationId: resumeResponse
      summary: Resume a response
      description: '**[devs.ai extension]** Resume a paused response run. Optionally provide tool outputs for

        human-in-the-loop tool calling (function tools that require client execution).

        Only works for threaded execution mode. No equivalent in OpenAI''s Responses API.

        '
      x-devs-ai-extension: true
      parameters:
      - $ref: '#/components/parameters/responseId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ResumeResponseRequest'
      responses:
        '200':
          description: Resume requested
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ControlResponse'
        '404':
          description: Response not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Not a threaded response or already terminal
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Responses API v2
      security:
      - ApiKeyAuth: []
  /api/v2/responses/{responseId}/deep-research/resume:
    post:
      operationId: resumeDeepResearch
      summary: Resume a deep research subagent
      description: '**[devs.ai extension]** Resume a paused deep research child workflow. Used to approve, deny,

        or provide clarification for a deep research run that is awaiting

        human input. Signals the deep research subagent workflow directly. No equivalent in OpenAI''s Responses API.

        '
      x-devs-ai-extension: true
      parameters:
      - $ref: '#/components/parameters/responseId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ResumeDeepResearchRequest'
      responses:
        '200':
          description: Resume requested
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeepResearchControlResponse'
        '404':
          description: Response not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Response is already terminal
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Responses API v2
      security:
      - ApiKeyAuth: []
components:
  schemas:
    ImageGenerationToolDefinition:
      type: object
      required:
      - type
      - modelId
      description: '**[devs.ai extension]** Image generation tool. Shares the type name `image_generation` with OpenAI but the input shape (`modelId`, `samples`, `aspectRatio`, `quality`, `style`) and the emitted output shape (`server_tool_call` / `server_tool_call_output` items, `response.server_tool_call.*` events) differ from OpenAI''s `ImageGenTool` / `image_generation_call` items.'
      x-devs-ai-extension: true
      properties:
        type:
          type: string
          enum:
          - image_generation
        modelId:
          type: string
        samples:
          type: number
        size:
          type: string
        aspectRatio:
          type: string
        quality:
          type: string
        style:
          type: string
    InputImageContent:
      type: object
      required:
      - type
      properties:
        type:
          type: string
          enum:
          - input_image
        image_url:
          type: string
        file_id:
          type: string
        detail:
          type: string
          enum:
          - auto
          - low
          - high
        invisible:
          type: boolean
          description: '**[devs.ai extension]** When `true`, this image is sent to the model but hidden from end-user-facing transcripts.'
          x-devs-ai-extension: true
    ToolOutput:
      type: object
      required:
      - toolCallId
      - output
      additionalProperties: false
      properties:
        toolCallId:
          type: string
          minLength: 1
        status:
          type: string
          enum:
          - success
          - error
          default: success
        output:
          oneOf:
          - type: string
          - type: array
            items:
              type: string
    CancelPolicy:
      type: string
      enum:
      - graceful
      - immediate
      default: graceful
    Usage:
      type:
      - object
      - 'null'
      description: Token usage details for the response. Mirrors OpenAI's `ResponseUsage` shape, including the plural `input_tokens_details` / `output_tokens_details` field names.
      required:
      - input_tokens
      - input_tokens_details
      - output_tokens
      - output_tokens_details
      - total_tokens
      properties:
        input_tokens:
          type: integer
          minimum: 0
          description: The number of input tokens (prompt + tools + previous turns).
        input_tokens_details:
          type: object
          required:
          - cached_tokens
          description: Detailed breakdown of input tokens.
          properties:
            cached_tokens:
              type: integer
              minimum: 0
              description: The number of input tokens that were served from cache.
        output_tokens:
          type: integer
          minimum: 0
          description: The number of output tokens (model response).
        output_tokens_details:
          type: object
          required:
          - reasoning_tokens
          description: Detailed breakdown of output tokens.
          properties:
            reasoning_tokens:
              type: integer
              minimum: 0
              description: The number of reasoning tokens (extended thinking) included in the output count.
        total_tokens:
          type: integer
          minimum: 0
          description: The total number of tokens used (`input_tokens + output_tokens`).
    ToolDefinition:
      description: A tool the model may invoke. The `function` and `web_search` variants mirror OpenAI's Responses API tools. All other variants are devs.ai-specific built-ins.
      oneOf:
      - $ref: '#/components/schemas/FunctionToolDefinition'
      - $ref: '#/components/schemas/WebSearchToolDefinition'
      - $ref: '#/components/schemas/PythonToolDefinition'
      - $ref: '#/components/schemas/ImageGenerationToolDefinition'
      - $ref: '#/components/schemas/SpreadsheetToolDefinition'
      - $ref: '#/components/schemas/MemoryToolDefinition'
      - $ref: '#/components/schemas/SandboxToolDefinition'
      - $ref: '#/components/schemas/McpServerToolDefinition'
      - $ref: '#/components/schemas/DeepResearchToolDefinition'
      discriminator:
        propertyName: type
        mapping:
          function: '#/components/schemas/FunctionToolDefinition'
          web_search: '#/components/schemas/WebSearchToolDefinition'
          python: '#/components/schemas/PythonToolDefinition'
          image_generation: '#/components/schemas/ImageGenerationToolDefinition'
          spreadsheet: '#/components/schemas/SpreadsheetToolDefinition'
          memory: '#/components/schemas/MemoryToolDefinition'
          sandbox: '#/components/schemas/SandboxToolDefinition'
          mcp_server: '#/components/schemas/McpServerToolDefinition'
          deep_research: '#/components/schemas/DeepResearchToolDefinition'
    MemoryToolDefinition:
      type: object
      required:
      - type
      description: '**[devs.ai extension]** Long-term memory tool. No OpenAI counterpart. Emits `server_tool_call` / `server_tool_call_output` items.'
      x-devs-ai-extension: true
      properties:
        type:
          type: string
          enum:
          - memory
    McpServerToolDefinition:
      type: object
      required:
      - type
      - toolId
      description: '**[devs.ai extension]** Reference to a configured MCP server integration. Differs from OpenAI''s `mcp` tool: devs.ai accepts `{ type: ''mcp_server'', toolId }` referring to a configured MCP integration, instead of OpenAI''s `server_label` / `server_url` / `connector_id` / `headers` / `allowed_tools` / `require_approval`. devs.ai DOES emit `mcp_call` output items and `response.mcp_call.in_progress|completed|failed` events that match OpenAI''s standard shapes for executed tool calls, but does NOT currently emit OpenAI''s `mcp_list_tools` discovery items, `mcp_approval_request` / `mcp_approval_response` items, `response.mcp_list_tools.*` events, or `response.mcp_call_arguments.*` events.'
      x-devs-ai-extension: true
      properties:
        type:
          type: string
          enum:
          - mcp_server
        toolId:
          type: string
          description: ID of the MCP server integration configured in devs.ai.
    InputItem:
      description: Input item for the Responses API (message, function_call, or function_call_output)
      oneOf:
      - $ref: '#/components/schemas/MessageInputItem'
      - $ref: '#/components/schemas/FunctionCallInputItem'
      - $ref: '#/components/schemas/FunctionCallOutputInputItem'
      discriminator:
        propertyName: type
        mapping:
          message: '#/components/schemas/MessageInputItem'
          function_call: '#/components/schemas/FunctionCallInputItem'
          function_call_output: '#/components/schemas/FunctionCallOutputInputItem'
    FunctionCallInputItem:
      type: object
      required:
      - type
      - call_id
      - name
      - arguments
      description: A prior `function_call` item submitted as input. Mirrors OpenAI's `FunctionCallItemParam`.
      properties:
        type:
          type: string
          enum:
          - function_call
        id:
          type: string
          description: Stable item identifier. Optional on the request side; preserved when echoed back.
        call_id:
          type: string
        name:
          type: string
        arguments:
          type: string
          description: JSON-encoded arguments string.
    Response:
      type: object
      required:
      - id
      - object
      - status
      - output
      - created_at
      description: A model response. Mirrors OpenAI's Responses API `Response` shape with the devs.ai extensions noted below.
      properties:
        id:
          type: string
        object:
          type: string
          enum:
          - response
        status:
          $ref: '#/components/schemas/ResponseStatus'
        model:
          type:
          - string
          - 'null'
        output:
          type: array
          items:
            $ref: '#/components/schemas/OutputItem'
        usage:
          $ref: '#/components/schemas/Usage'
        error:
          $ref: '#/components/schemas/ResponseError'
        created_at:
          type: integer
          description: Unix timestamp (seconds since epoch) when the response was created.
        instructions:
          type:
          - string
          - 'null'
          description: Echoed instructions from the request.
        temperature:
          type:
          - number
          - 'null'
        top_p:
          type:
          - number
          - 'null'
        max_output_tokens:
          type:
          - integer
          - 'null'
        metadata:
          type:
          - object
          - 'null'
          additionalProperties:
            type: string
        previous_response_id:
          type:
          - string
          - 'null'
        parallel_tool_calls:
          type: boolean
          description: Whether the model was allowed to call tools in parallel for this response. Echoed from the request; defaults to `true` when not set on the request.
        incomplete_details:
          type:
          - object
          - 'null'
          description: 'Details about why the response is incomplete (only populated when `status: "incomplete"`).'
          properties:
            reason:
              type: string
              enum:
              - max_output_tokens
              - content_filter
              - paused
              description: OpenAI's enum is `["max_output_tokens", "content_filter"]`. The value `paused` is a **[devs.ai extension]** emitted when an in-flight run is paused via `POST /api/v2/responses/{responseId}/pause`.
              x-devs-ai-extension-values:
              - paused
        tool_choice:
          oneOf:
          - type:
            - string
            - 'null'
          - type:
            - object
            - 'null'
            additionalProperties: true
          description: Echoed tool choice strategy from the request.
        tools:
          type:
          - array
          - 'null'
          items: {}
          description: Echoed tools from the request.
        text:
          type:
          - object
          - 'null'
          additionalProperties: true
          description: Echoed text format configuration from the request.
        reasoning:
          type:
          - object
          - 'null'
          additionalProperties: true
          description: Echoed reasoning configuration from the request.
        selection_metadata:
          type:
          - object
          - 'null'
          description: '**[devs.ai extension]** Model routing / selection metadata captured during the run (chosen provider, fallback chain, latency hints, etc.).'
          additionalProperties: true
          x-devs-ai-extension: true
    InputTextContent:
      type: object
      required:
      - type
      - text
      properties:
        type:
          type: string
          enum:
          - input_text
        text:
          type: string
        invisible:
          type: boolean
          description: '**[devs.ai extension]** When `true`, this content part is sent to the model but hidden from end-user-facing transcripts.'
          x-devs-ai-extension: true
        metadata:
          type: object
          additionalProperties: true
          description: '**[devs.ai extension]** Free-form metadata attached to this content part. Not forwarded to the model.'
          x-devs-ai-extension: true
    UrlCitationAnnotation:
      type: object
      required:
      - type
      - url
      - start_index
      - end_index
      properties:
        type:
          type: string
          enum:
          - url_citation
        url:
          type: string
        title:
          type: string
        start_index:
          type: integer
        end_index:
          type: integer
    ResumeDeepResearchRequest:
      type: object
      required:
      - subagentRunId
      additionalProperties: false
      properties:
        subagentRunId:
          type: string
          minLength: 1
        approved:
          type: boolean
        clarificationAnswer:
          type: string
        goal:
          type: string
        scope:
          type: string
        deniedReason:
          type: string
        reason:
          type: string
    ChatOptions:
      type: object
      properties:
        flow:
          type: object
          properties:
            override:
              type: object
              properties:
                force:
                  type: boolean
                id:
                  type: string
                version:
                  type: number
            tracing:
              type: object
              properties:
                enabled:
                  type: boolean
    OutputMessage:
      type: object
      required:
      - id
      - type
      - role
      - status
      - content
      properties:
        id:
          type: string
        type:
          type: string
          enum:
          - message
        role:
          type: string
          enum:
          - assistant
        status:
          type: string
          enum:
          - in_progress
          - completed
          - incomplete
        content:
          type: array
          items:
            $ref: '#/components/schemas/OutputTextPart'
    WebSearchToolDefinition:
      type: object
      required:
      - type
      description: 'Web search tool. The output items (`web_search_call`) and streaming events (`response.web_search_call.in_progress|searching|completed`) emitted by devs.ai match OpenAI''s standard shapes. NOTE: OpenAI''s `web_search` / `web_search_preview` tool also accepts `user_location` and `search_context_size`; devs.ai currently ignores those input fields (they are silently dropped).'
      properties:
        type:
          type: string
          enum:
          - web_search
        includeXSearch:
          type: boolean
          description: '**[devs.ai extension]** When `true`, also includes results from X (Twitter) search alongside web results.'
          x-devs-ai-extension: true
    PythonToolDefinition:
      type: object
      required:
      - type
      description: '**[devs.ai extension]** Server-side Python execution tool. Conceptually similar to OpenAI''s `code_interpreter` tool, but devs.ai emits `server_tool_call` / `server_tool_call_output` items and `response.server_tool_call.*` events instead of OpenAI''s `code_interpreter_call` items and `response.code_interpreter_call.*` events.'
      x-devs-ai-extension: true
      properties:
        type:
          type: string
          enum:
          - python
    ThreadMode:
      type: string
      enum:
      - collect
      - steer
      - interrupt
      - fo

# --- truncated at 32 KB (56 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/appdirect/refs/heads/main/openapi/appdirect-responses-api-v2-api-openapi.yml