---
title: "Stop model resources"
method: POST
path: "/v1/rl/model-resources/{model_resources_id}/stop"
tags: ["RL"]
---

# Stop model resources

`POST /v1/rl/model-resources/{model_resources_id}/stop`

## Request

- Base URL: `https://api.together.ai`
- URL: `https://api.together.ai/v1/rl/model-resources/{model_resources_id}/stop`
- Auth: HTTP bearer

Stops the model resource and releases its allocated compute. If active training sessions are attached, the request fails unless `force=true`. A forced stop also stops all attached training sessions.

## Path parameters

- `model_resources_id` string, required: ID of the model resource

## Query parameters

- `force` boolean: When true, also stop all attached training sessions. When false, the request fails if any training sessions are active.

## Response `200`

Model resource details

- RLModelResources: Allocated GPU resources that training sessions attach to
  - `id` string, required: Unique identifier for the model resource
  - `status` 'MODEL_RESOURCES_STATUS_PENDING' | 'MODEL_RESOURCES_STATUS_CREATING' | 'MODEL_RESOURCES_STATUS_READY' | 'MODEL_RESOURCES_STATUS_ERROR' | 'MODEL_RESOURCES_STATUS_STOPPED' | 'MODEL_RESOURCES_STATUS_STOPPING', required: Lifecycle status of a model resource
  - `error` RLModelResourcesError: Structured detail for the model resource's current error
    - `code` 'MODEL_RESOURCES_ERROR_CODE_CAPACITY_WAIT_TIMEOUT' | 'MODEL_RESOURCES_ERROR_CODE_PROVISIONING_FAILED' | 'MODEL_RESOURCES_ERROR_CODE_RESOURCE_UNAVAILABLE', required: Finite machine-readable model resource lifecycle error code
    - `message` string, required: User-safe human-readable detail for the current status
    - `occurred_at` string, date-time, required: Timestamp when this error was reported
  - `status_details` RLModelResourcesStatusDetails, required: Details of a model resource's current status
    - `queue_position` integer: Estimated place of the resource in the queue: the number of older resources of the same GPU type still waiting for GPUs, plus one. Set only while the resource waits for GPUs.
  - `base_model` string, required: Base model the resource is provisioned for
  - `base_weights_ref` string: Model-registry model whose weights the resource trains in place of the base model's own, pinned to the revision resolved when the resource was created. Absent when the resource trains the base model's own weights.
  - `compute_config` RLComputeConfig, required: Compute layout for a model resource
    - `num_generator_replicas` integer, required: Number of generator replicas. 0 means the resource runs the trainer only, with no generator.
    - `gpu_type` 'H100-80GB' | 'B200-SXM': GPU type selected for this resource.
  - `lora_enabled` boolean, required: Whether the resource hosts LoRA sessions or a full-weight session
  - `created_at` string, date-time, required: Timestamp when the model resource was created
  - `updated_at` string, date-time, required: Timestamp when the model resource was last updated
  - `optimizer_config` RLOptimizerConfig, required: Optimizer configuration
    - `adam` RLAdamConfig: Adam optimizer configuration
    - `muon` RLMuonConfig: Advanced configuration for the Muon optimizer.
      - `scaling_strategy` 'MUON_SCALING_STRATEGY_UNSPECIFIED' | 'MUON_SCALING_STRATEGY_MATCH_ADAM' | 'MUON_SCALING_STRATEGY_ORIGINAL'
  - `created_by` string, required: ID of the user who created the model resource
  - `inactive_timeout` integer, required: Seconds without activity after which the resource stops and its sessions expire. Every operation on any of its sessions restarts the count.
  - `expires_at` string, date-time: The earliest time the resource can stop for inactivity, which also expires its sessions. It is the resource's last activity plus `inactive_timeout` seconds. Becoming ready, a session start and every operation on any of its sessions count as activity, and the resource does not stop while an operation is running. An extend expiry call can move it later. It never moves earlier. Refreshed about once a minute. Set while the resource is ready.

## Other responses

- `default`: An unexpected error response.

## Changes

- **2026-10-28** `93438ddac711`: 1 breaking, 2 info
  - for the `query` request parameter `force`, default value `false` was removed
  - added the optional property `expires_at` to the response with the `200` status
  - added the required property `inactive_timeout` to the response with the `200` status
- **2026-10-22** `bb5257b3173a`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/together/apis/together-apis/changes/v1/rl/model-resources/:model_resources_id/stop/post.md)

---

[API](https://skmtc.dev/together/apis/together-apis.md) - [All operations](https://skmtc.dev/together/apis/together-apis/llms.txt) - [OpenAPI document](https://skmtc.dev/together/apis/together-apis/revisions/93438ddac711?raw)
