openapi: 3.0.3 info: title: Temporal HTTP Cluster Workflow Messaging API description: The Temporal HTTP API is a first-party grpc-gateway that maps a REST/JSON subset of the Temporal WorkflowService (gRPC) onto HTTP paths under `/api/v1`. Temporal's primary and complete API surface is gRPC (WorkflowService and OperatorService, defined as protobuf in github.com/temporalio/api); this HTTP API exists for automation, CI/CD, and environments where gRPC is impractical, and it exposes only a subset of the gRPC methods. The worker task-polling and task-completion RPCs (PollWorkflowTaskQueue, PollActivityTaskQueue, RespondWorkflowTaskCompleted, PollNexusTaskQueue, and similar) are NOT exposed over HTTP and remain gRPC-only. On Temporal Cloud the HTTP API is served per namespace over HTTPS; self-hosted it is served by the frontend service when the HTTP port is enabled. Requests authenticate with a Bearer API key (or mTLS on self-hosted). The paths and verbs below are drawn from the google.api.http annotations on the WorkflowService proto and are modeled here, not exhaustively confirmed against a live namespace. version: '1.0' contact: name: Temporal Technologies url: https://temporal.io license: name: MIT url: https://github.com/temporalio/api/blob/master/LICENSE servers: - url: https://{namespace}.{account}.tmprl.cloud/api/v1 description: Temporal Cloud (per-namespace HTTP API endpoint) variables: namespace: default: your-namespace description: Your Temporal Cloud namespace name. account: default: your-account description: Your Temporal Cloud account (short) ID. - url: http://localhost:7243/api/v1 description: Self-hosted frontend HTTP API (when the HTTP port is enabled) security: - bearerAuth: [] tags: - name: Workflow Messaging description: Signal, query, and update running workflow executions. paths: /namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/signal/{signal_name}: parameters: - $ref: '#/components/parameters/Namespace' - $ref: '#/components/parameters/WorkflowExecutionWorkflowId' - name: signal_name in: path required: true description: The name of the signal to send. schema: type: string post: operationId: signalWorkflowExecution tags: - Workflow Messaging summary: Signal a workflow execution description: Sends a signal (named message with optional payload) to a running workflow execution. Maps to the gRPC SignalWorkflowExecution RPC. requestBody: required: false content: application/json: schema: $ref: '#/components/schemas/SignalWorkflowExecutionRequest' responses: '200': description: The signal was accepted. content: application/json: schema: type: object '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/ResourceExhausted' /namespaces/{namespace}/workflows/{execution.workflow_id}/query/{query.query_type}: parameters: - $ref: '#/components/parameters/Namespace' - $ref: '#/components/parameters/ExecutionWorkflowId' - name: query.query_type in: path required: true description: The name of the query to execute. schema: type: string post: operationId: queryWorkflow tags: - Workflow Messaging summary: Query a workflow execution description: Executes a synchronous query against a running (or closed) workflow execution and returns the query result. Maps to the gRPC QueryWorkflow RPC. requestBody: required: false content: application/json: schema: $ref: '#/components/schemas/QueryWorkflowRequest' responses: '200': description: The query result. content: application/json: schema: $ref: '#/components/schemas/QueryWorkflowResponse' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/update/{name}: parameters: - $ref: '#/components/parameters/Namespace' - $ref: '#/components/parameters/WorkflowExecutionWorkflowId' - name: name in: path required: true description: The name of the update handler to invoke. schema: type: string post: operationId: updateWorkflowExecution tags: - Workflow Messaging summary: Update a workflow execution description: Invokes an update handler on a running workflow execution, optionally waiting for a specified lifecycle stage, and returns the update result. Maps to the gRPC UpdateWorkflowExecution RPC. requestBody: required: false content: application/json: schema: type: object additionalProperties: true responses: '200': description: The update outcome. content: application/json: schema: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' components: schemas: QueryWorkflowRequest: type: object properties: execution: type: object properties: workflowId: type: string runId: type: string query: type: object properties: queryType: type: string queryArgs: $ref: '#/components/schemas/Payloads' Status: type: object description: A google.rpc.Status-style error payload. properties: code: type: integer message: type: string details: type: array items: type: object additionalProperties: true QueryWorkflowResponse: type: object properties: queryResult: $ref: '#/components/schemas/Payloads' queryRejected: type: object additionalProperties: true SignalWorkflowExecutionRequest: type: object properties: workflowExecution: type: object properties: workflowId: type: string runId: type: string signalName: type: string input: $ref: '#/components/schemas/Payloads' identity: type: string Payloads: type: object description: Temporal payloads envelope. Each payload carries base64-encoded metadata and data. properties: payloads: type: array items: type: object properties: metadata: type: object additionalProperties: type: string format: byte data: type: string format: byte responses: NotFound: description: The requested workflow execution or namespace was not found. content: application/json: schema: $ref: '#/components/schemas/Status' Unauthorized: description: Missing or invalid API key. content: application/json: schema: $ref: '#/components/schemas/Status' ResourceExhausted: description: The namespace rate limit (APS/RPS/OPS) was exceeded. gRPC returns a ResourceExhausted status; over HTTP this surfaces as 429. Clients should back off and retry. content: application/json: schema: $ref: '#/components/schemas/Status' parameters: ExecutionWorkflowId: name: execution.workflow_id in: path required: true description: The workflow ID of the target execution. schema: type: string Namespace: name: namespace in: path required: true description: The Temporal namespace. schema: type: string WorkflowExecutionWorkflowId: name: workflow_execution.workflow_id in: path required: true description: The workflow ID of the target execution. schema: type: string securitySchemes: bearerAuth: type: http scheme: bearer description: 'Bearer API key. On Temporal Cloud, pass an API key as `Authorization: Bearer `. Self-hosted deployments may use mTLS instead. Requests are scoped to the namespace in the path.'