TextQL · OpenAPI Overlay 1.0.0

API Evangelist enrichment overlay for the TextQL v2 API

9 actions 9 updates update extends ../openapi/textql-v2-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for TextQL's API. It is a proposal applied on top of the contract, not a document TextQL publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-reversibilityx-agent-guidancex-dry-runcontactx-api-evangelistx-error-envelopex-rate-limitsx-idempotency

Targets 8

$.info
$.components.securitySchemes.bearerAuth
$.paths['/v2/chats'].post
$.paths['/v2/chats/stream'].post
$.paths['/v2/changes/{id}/restore'].post
$.paths['/v2/members/{id}'].delete
$.paths['/v2/sandcastles/{id}/ontology/diff'].get
$.paths['/v2/connectors/test'].post

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enrichment overlay for the TextQL v2 API
  version: 1.0.0
extends: ../openapi/textql-v2-openapi.yml
x-generated: '2026-08-30'
x-method: generated
x-source: >-
  API Evangelist enrichment pass 2026-08-30. Captures findings from
  https://docs.textql.com/api-reference/v2/introduction, https://docs.textql.com/core/admin/limits and
  https://app.textql.com/.well-known/* that the published spec does not carry. The original spec is
  never mutated.
actions:
- target: $.info
  update:
    contact:
      name: TextQL Support
      email: support@textql.com
      url: https://docs.textql.com/
    x-api-evangelist:
      provider: TextQL
      aid: textql
      generation: v2
      supersedes: v1 Connect-RPC surface at https://app.textql.com/v1
      documentation: https://docs.textql.com/api-reference/v2/introduction
- target: $.info
  update:
    x-error-envelope:
      shape: '{"error": {"code": "...", "message": "..."}}'
      rfc9457: false
      codes: [invalid_request, unauthenticated, permission_denied, not_found, conflict, rate_limit_exceeded, internal, timeout, cancelled, execution_failed, no_report]
      catalog: ../errors/textql-problem-types.yml
    x-rate-limits:
      published_request_rate: null
      note: >-
        429 rate_limit_exceeded is declared on all 55 operations but no threshold, RateLimit-* header
        or Retry-After is published. Organization resource and timeout limits ARE published at
        https://docs.textql.com/core/admin/limits.
      catalog: ../rate-limits/textql-rate-limits.yml
    x-idempotency:
      supported: false
      note: No Idempotency-Key header on any POST. Retrying a timed-out create or run can duplicate a billable analysis.
    x-pagination:
      styles: [cursor+limit, limit+offset]
      note: Mixed within v2 — newer collections use cursor, older ones use offset.
    x-reversibility:
      grade: documented
      catalog: ../conventions/textql-conventions.yml
- target: $.components.securitySchemes.bearerAuth
  update:
    x-oauth:
      authorization_server: https://app.textql.com
      metadata: https://app.textql.com/.well-known/oauth-authorization-server
      scopes_published: 34
      catalog: ../scopes/textql-scopes.yml
      note: >-
        The spec declares only "API key or JWT token". TextQL additionally runs a full OAuth 2.1 +
        OIDC authorization server whose scopes govern these same operations; the CLI and the MCP
        server authenticate that way.
- target: $.paths['/v2/chats'].post
  update:
    x-agent-guidance:
      synchronous: true
      max_duration: up to a minute
      prefer: POST /v2/chats/stream for long analyses
      billable: true
      note: Not idempotent. A retry starts a second billable analysis run.
- target: $.paths['/v2/chats/stream'].post
  update:
    x-agent-guidance:
      transport: server-sent-events
      content_type: text/event-stream
      mcp_equivalent: [ana_ask, ana_poll]
- target: $.paths['/v2/changes/{id}/restore'].post
  update:
    x-reversibility:
      reverses: v2.denyChange
      precondition: change must be in the denied state
      window: null
      window_note: No time limit on restoring a denied change is published.
- target: $.paths['/v2/members/{id}'].delete
  update:
    x-reversibility:
      soft_delete_default: true
      hard_delete_param: hard_delete
      restore_operation: null
      window: null
      window_note: >-
        Soft delete is the default but no restore operation is published and no retention period is
        stated.
- target: $.paths['/v2/sandcastles/{id}/ontology/diff'].get
  update:
    x-dry-run: true
    x-agent-guidance:
      note: Call this before v2.createOntologyChange to see pending Ontology changes without authoring one.
- target: $.paths['/v2/connectors/test'].post
  update:
    x-dry-run: true