> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify.com/temporalio/temporal/llms.txt
> Use this file to discover all available pages before exploring further.

# Matching Service API

> Task queue management and task distribution service

The Matching Service manages task queues and distributes workflow and activity tasks to workers. It provides load balancing, task versioning, and worker management capabilities.

## Overview

The Matching Service is responsible for:

* Managing task queues for workflows and activities
* Distributing tasks to available workers
* Task queue partitioning and load balancing
* Worker versioning and build ID compatibility
* Task queue user data and configuration
* Nexus endpoint management
* Worker heartbeat and health tracking

## Service Methods

### Task Polling

#### PollWorkflowTaskQueue

Polls for a workflow task from a task queue.

<ParamField path="namespace_id" type="string" required>
  UUID of the namespace
</ParamField>

<ParamField path="poller_id" type="string" required>
  Unique identifier for the worker polling
</ParamField>

<ParamField path="poll_request" type="PollWorkflowTaskQueueRequest" required>
  Poll parameters including task queue name and worker identity
</ParamField>

<ParamField path="forwarded_source" type="string">
  Source partition if forwarded from another partition
</ParamField>

<ResponseField name="task_token" type="bytes">
  Opaque token identifying the task
</ResponseField>

<ResponseField name="workflow_execution" type="WorkflowExecution">
  Workflow execution information
</ResponseField>

<ResponseField name="workflow_type" type="WorkflowType">
  Type of the workflow
</ResponseField>

<ResponseField name="started_event_id" type="int64">
  Event ID when task started
</ResponseField>

<ResponseField name="history" type="History">
  Workflow history events for the task
</ResponseField>

#### PollActivityTaskQueue

Polls for an activity task from a task queue.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="poller_id" type="string" required>
  Unique poller identifier
</ParamField>

<ParamField path="poll_request" type="PollActivityTaskQueueRequest" required>
  Poll parameters
</ParamField>

<ParamField path="forwarded_source" type="string">
  Source partition if forwarded
</ParamField>

<ResponseField name="task_token" type="bytes">
  Task token
</ResponseField>

<ResponseField name="workflow_execution" type="WorkflowExecution">
  Parent workflow execution
</ResponseField>

<ResponseField name="activity_id" type="string">
  Activity identifier
</ResponseField>

<ResponseField name="activity_type" type="ActivityType">
  Type of activity
</ResponseField>

<ResponseField name="input" type="Payloads">
  Activity input parameters
</ResponseField>

<ResponseField name="scheduled_time" type="Timestamp">
  When the activity was scheduled
</ResponseField>

<ResponseField name="current_attempt_scheduled_time" type="Timestamp">
  When current attempt was scheduled
</ResponseField>

#### PollNexusTaskQueue

Polls for a Nexus task from a task queue.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="request" type="PollNexusTaskQueueRequest" required>
  Poll request with task queue and worker identity
</ParamField>

<ResponseField name="task_token" type="bytes">
  Token for the Nexus task
</ResponseField>

<ResponseField name="request" type="Request">
  Nexus request details
</ResponseField>

### Task Addition

#### AddWorkflowTask

Adds a workflow task to a task queue.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="execution" type="WorkflowExecution" required>
  Workflow execution identifier
</ParamField>

<ParamField path="task_queue" type="TaskQueue" required>
  Target task queue
</ParamField>

<ParamField path="scheduled_event_id" type="int64" required>
  Event ID when task was scheduled
</ParamField>

<ParamField path="source" type="TaskSource">
  Source of the task (history, backlog)
</ParamField>

<ParamField path="forwarded_source" type="string">
  Source if forwarded from another partition
</ParamField>

<ResponseField name="response" type="AddWorkflowTaskResponse">
  Empty response on success
</ResponseField>

#### AddActivityTask

Adds an activity task to a task queue.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="execution" type="WorkflowExecution" required>
  Parent workflow execution
</ParamField>

<ParamField path="task_queue" type="TaskQueue" required>
  Target task queue
</ParamField>

<ParamField path="scheduled_event_id" type="int64" required>
  Event ID when activity was scheduled
</ParamField>

<ParamField path="source" type="TaskSource">
  Task source
</ParamField>

<ParamField path="forwarded_source" type="string">
  Forwarding source partition
</ParamField>

<ResponseField name="response" type="AddActivityTaskResponse">
  Empty response on success
</ResponseField>

### Query Management

#### QueryWorkflow

Forwards a workflow query to a worker.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="task_queue" type="TaskQueue" required>
  Task queue where workflow is processing
</ParamField>

<ParamField path="query_request" type="QueryWorkflowRequest" required>
  Query parameters
</ParamField>

<ParamField path="forwarded_source" type="string">
  Source partition
</ParamField>

<ResponseField name="query_result" type="Payloads">
  Result of the query
</ResponseField>

<ResponseField name="query_rejected" type="QueryRejected">
  Rejection details if query was rejected
</ResponseField>

#### RespondQueryTaskCompleted

Records completion of a query task.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="task_queue" type="TaskQueue" required>
  Task queue
</ParamField>

<ParamField path="task_id" type="string" required>
  Query task identifier
</ParamField>

<ParamField path="completed_request" type="RespondQueryTaskCompletedRequest" required>
  Completion details
</ParamField>

### Nexus Operations

#### DispatchNexusTask

Dispatches a Nexus task to a worker.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="task_queue" type="TaskQueue" required>
  Target task queue
</ParamField>

<ParamField path="request" type="Request" required>
  Nexus request to dispatch
</ParamField>

<ResponseField name="response" type="Response">
  Nexus response from worker
</ResponseField>

#### RespondNexusTaskCompleted

Records successful completion of a Nexus task.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="task_token" type="bytes" required>
  Nexus task token
</ParamField>

<ParamField path="response" type="Response" required>
  Task response
</ParamField>

#### RespondNexusTaskFailed

Records failure of a Nexus task.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="task_token" type="bytes" required>
  Nexus task token
</ParamField>

<ParamField path="error" type="Error" required>
  Failure error details
</ParamField>

### Nexus Endpoint Management

#### CreateNexusEndpoint

Creates a new Nexus endpoint.

<ParamField path="spec" type="EndpointSpec" required>
  Endpoint specification including name, target
</ParamField>

<ResponseField name="endpoint" type="Endpoint">
  Created endpoint with assigned ID
</ResponseField>

#### UpdateNexusEndpoint

Updates an existing Nexus endpoint.

<ParamField path="id" type="string" required>
  Endpoint ID
</ParamField>

<ParamField path="version" type="int64" required>
  Current version for optimistic concurrency
</ParamField>

<ParamField path="spec" type="EndpointSpec" required>
  Updated endpoint specification
</ParamField>

<ResponseField name="endpoint" type="Endpoint">
  Updated endpoint
</ResponseField>

#### DeleteNexusEndpoint

Deletes a Nexus endpoint.

<ParamField path="id" type="string" required>
  Endpoint ID to delete
</ParamField>

<ParamField path="version" type="int64" required>
  Current version
</ParamField>

<ResponseField name="response" type="DeleteNexusEndpointResponse">
  Empty response on success
</ResponseField>

#### ListNexusEndpoints

Lists all Nexus endpoints.

<ParamField path="page_size" type="int32">
  Maximum endpoints per page
</ParamField>

<ParamField path="next_page_token" type="bytes">
  Pagination token
</ParamField>

<ResponseField name="endpoints" type="Endpoint[]">
  List of endpoints
</ResponseField>

<ResponseField name="next_page_token" type="bytes">
  Token for next page
</ResponseField>

### Task Queue Description

#### DescribeTaskQueue

Retrieves information about a task queue.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="desc_request" type="DescribeTaskQueueRequest" required>
  Description request with task queue name and type
</ParamField>

<ResponseField name="pollers" type="PollerInfo[]">
  List of active pollers
</ResponseField>

<ResponseField name="task_queue_status" type="TaskQueueStatus">
  Task queue status including backlog
</ResponseField>

<ResponseField name="versions" type="TaskQueueVersionInfo[]">
  Version information for versioned task queues
</ResponseField>

#### DescribeTaskQueuePartition

Retrieves information about a specific task queue partition.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="task_queue" type="TaskQueue" required>
  Task queue identifier
</ParamField>

<ParamField path="partition_id" type="int32" required>
  Partition ID
</ParamField>

<ResponseField name="pollers" type="PollerInfo[]">
  Pollers on this partition
</ResponseField>

<ResponseField name="partition_config" type="PartitionConfig">
  Partition configuration
</ResponseField>

#### DescribeVersionedTaskQueues

Describes task queues with versioning information.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="task_queue" type="TaskQueue" required>
  Task queue name
</ParamField>

<ParamField path="versions" type="TaskQueueVersionSelection">
  Version selection criteria
</ParamField>

<ResponseField name="versioned_queues" type="VersionedTaskQueueInfo[]">
  Information for each versioned queue
</ResponseField>

#### ListTaskQueuePartitions

Lists all partitions for a task queue.

<ParamField path="namespace" type="string" required>
  Namespace name
</ParamField>

<ParamField path="task_queue" type="TaskQueue" required>
  Task queue identifier
</ParamField>

<ResponseField name="activity_task_queue_partitions" type="TaskQueuePartitionMetadata[]">
  Activity task queue partitions
</ResponseField>

<ResponseField name="workflow_task_queue_partitions" type="TaskQueuePartitionMetadata[]">
  Workflow task queue partitions
</ResponseField>

### Worker Versioning

#### UpdateWorkerBuildIdCompatibility

Updates build ID compatibility rules for a task queue.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="task_queue" type="string" required>
  Task queue name
</ParamField>

<ParamField path="operation" type="BuildIdOp" required>
  Build ID operation (add, promote, mark\_default)
</ParamField>

<ResponseField name="response" type="UpdateWorkerBuildIdCompatibilityResponse">
  Empty response on success
</ResponseField>

#### GetWorkerBuildIdCompatibility

Retrieves build ID compatibility rules.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="task_queue" type="string" required>
  Task queue name
</ParamField>

<ParamField path="max_sets" type="int32">
  Maximum compatibility sets to return
</ParamField>

<ResponseField name="major_version_sets" type="CompatibleVersionSet[]">
  Compatible version sets
</ResponseField>

#### UpdateWorkerVersioningRules

Updates versioning rules for workers.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="task_queue" type="string" required>
  Task queue name
</ParamField>

<ParamField path="request" type="UpdateWorkerVersioningRulesRequest" required>
  Versioning rules update
</ParamField>

<ResponseField name="response" type="UpdateWorkerVersioningRulesResponse">
  Updated rules
</ResponseField>

#### GetWorkerVersioningRules

Retrieves current versioning rules.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="task_queue" type="string" required>
  Task queue name
</ParamField>

<ResponseField name="assignment_rules" type="VersioningAssignmentRule[]">
  Assignment rules
</ResponseField>

<ResponseField name="redirect_rules" type="VersioningRedirectRule[]">
  Redirect rules
</ResponseField>

### Task Queue User Data

#### GetTaskQueueUserData

Retrieves user data for a task queue.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="task_queue" type="string" required>
  Task queue name
</ParamField>

<ResponseField name="user_data" type="TaskQueueUserData">
  User data including versioning info
</ResponseField>

#### UpdateTaskQueueUserData

Updates user data for a task queue.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="task_queue" type="string" required>
  Task queue name
</ParamField>

<ParamField path="user_data" type="TaskQueueUserData" required>
  Updated user data
</ParamField>

<ParamField path="build_ids" type="string[]">
  Associated build IDs
</ParamField>

<ResponseField name="response" type="UpdateTaskQueueUserDataResponse">
  Empty response on success
</ResponseField>

#### ReplicateTaskQueueUserData

Replicates task queue user data across clusters.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="task_queue" type="string" required>
  Task queue name
</ParamField>

<ParamField path="user_data" type="TaskQueueUserData" required>
  User data to replicate
</ParamField>

### Worker Management

#### RecordWorkerHeartbeat

Records a heartbeat from a worker.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="worker_identity" type="string" required>
  Worker identity
</ParamField>

<ParamField path="task_queue" type="string" required>
  Task queue the worker is polling
</ParamField>

<ResponseField name="response" type="RecordWorkerHeartbeatResponse">
  Empty response on success
</ResponseField>

#### ListWorkers

Lists workers polling a task queue.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="task_queue" type="string" required>
  Task queue name
</ParamField>

<ParamField path="page_size" type="int32">
  Maximum workers per page
</ParamField>

<ResponseField name="workers" type="WorkerInfo[]">
  List of worker information
</ResponseField>

#### DescribeWorker

Retrieves detailed information about a worker.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="worker_identity" type="string" required>
  Worker identity
</ParamField>

<ResponseField name="worker_info" type="WorkerInfo">
  Detailed worker information
</ResponseField>

### Partition Management

#### ForceLoadTaskQueuePartition

Forces loading of a task queue partition.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="task_queue" type="string" required>
  Task queue name
</ParamField>

<ParamField path="partition_id" type="int32" required>
  Partition to load
</ParamField>

<ResponseField name="response" type="ForceLoadTaskQueuePartitionResponse">
  Empty response on success
</ResponseField>

#### ForceUnloadTaskQueue

Forces unloading of a task queue.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="task_queue" type="string" required>
  Task queue to unload
</ParamField>

<ResponseField name="response" type="ForceUnloadTaskQueueResponse">
  Empty response on success
</ResponseField>

#### ForceUnloadTaskQueuePartition

Forces unloading of a specific partition.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="task_queue" type="string" required>
  Task queue name
</ParamField>

<ParamField path="partition_id" type="int32" required>
  Partition to unload
</ParamField>

### Additional Operations

#### CancelOutstandingPoll

Cancels an outstanding poll request.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="task_queue_type" type="TaskQueueType" required>
  Type of task queue
</ParamField>

<ParamField path="task_queue" type="TaskQueue" required>
  Task queue identifier
</ParamField>

<ParamField path="poller_id" type="string" required>
  Poller to cancel
</ParamField>

#### GetBuildIdTaskQueueMapping

Retrieves mapping between build IDs and task queues.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="build_id" type="string" required>
  Build ID to query
</ParamField>

<ResponseField name="task_queues" type="string[]">
  Task queues associated with the build ID
</ResponseField>

#### UpdateTaskQueueConfig

Updates configuration for a task queue.

<ParamField path="namespace_id" type="string" required>
  Namespace UUID
</ParamField>

<ParamField path="task_queue" type="string" required>
  Task queue name
</ParamField>

<ParamField path="config" type="TaskQueueConfig" required>
  Configuration to apply
</ParamField>

<ResponseField name="response" type="UpdateTaskQueueConfigResponse">
  Empty response on success
</ResponseField>

## Usage Notes

* Long polling is used for task distribution with configurable timeouts
* Task queue partitioning enables horizontal scaling
* Worker versioning supports gradual rollouts and compatibility management
* Sticky task queues improve workflow task performance
* The service handles automatic task forwarding between partitions

## See Also

* [History Service API](/api/history-service)
* [Frontend Service API](/api/frontend-service)
* [Worker Versioning Guide](/guides/worker-versioning)
