RunPod
New ReleaseBatch Jobs (BETA) commercialExplore our guides and examples to deploy your AI/ML application on Runpod. Review setup and usage guidance in the Runpod documentation.
curl -X POST https://api.runpod.io/v2/{endpoint_id}/batch \
-H 'Authorization: Bearer {api_key}' \
-H 'Content-Type: application/json' \
-d '[{"input":{"text":"The quick brown fox"}},{"input":{"text":"Jumped over the lazy dog"}}]'
# Finalize
curl -X POST https://api.runpod.io/v2/{endpoint_id}/batch/{batch_id}/finalize \
-H 'Authorization: Bearer {api_key}'
# Poll until requestCompleted + requestFailed == requestTotal
curl https://api.runpod.io/v2/{endpoint_id}/batch/{batch_id} \
-H 'Authorization: Bearer {api_key}'
curl 'https://api.runpod.io/v2/{endpoint_id}/batch/{batch_id}/requests?offset=0&limit=50' \
-H 'Authorization: Bearer {api_key}'
pip install runpod-flash
flash run
# 1. Create a batch with initial requests
curl -s -X POST 'https://api.runpod.io/v2/{endpoint_id}/batch' \
-H 'Authorization: Bearer {api_key}' \
-H 'Content-Type: application/json' \
-d '[{"input":{"text":"The quick brown fox"}},{"input":{"text":"Jumped over the lazy dog"}}]'
# Response: {"id": "batch_01j9abc123", "status": "DRAFT"}
# 2. Finalize the batch to start processing
curl -s -X POST 'https://api.runpod.io/v2/{endpoint_id}/batch/batch_01j9abc123/finalize' \
-H 'Authorization: Bearer {api_key}'
# 3. Poll progress until requestCompleted + requestFailed == requestTotal
curl -s 'https://api.runpod.io/v2/{endpoint_id}/batch/batch_01j9abc123' \
-H 'Authorization: Bearer {api_key}'
# Fetch first 50 results
curl -s 'https://api.runpod.io/v2/{endpoint_id}/batch/batch_01j9abc123/requests?offset=0&limit=50' \
-H 'Authorization: Bearer {api_key}'
# Fetch next page
curl -s 'https://api.runpod.io/v2/{endpoint_id}/batch/batch_01j9abc123/requests?offset=50&limit=50' \
-H 'Authorization: Bearer {api_key}'
# Add a second chunk of requests to a DRAFT batch
curl -s -X POST 'https://api.runpod.io/v2/{endpoint_id}/batch/batch_01j9abc123/requests' \
-H 'Authorization: Bearer {api_key}' \
-H 'Content-Type: application/json' \
-d '{"requests":[{"input":{"text":"More text to embed"}},{"input":{"text":"Another piece of text"}},{"input":{"text":"And another one"}}]}'
# 1. Create batch with initial requests
curl -X POST https://api.runpod.io/v2/{endpoint_id}/batch \
-H 'Authorization: Bearer {api_key}' \
-H 'Content-Type: application/json' \
-d '[{"input":{"text":"The quick brown fox"}},{"input":{"text":"Jumped over the lazy dog"}}]'
# 2. Finalize to start processing
curl -X POST https://api.runpod.io/v2/{endpoint_id}/batch/batch_01j9abc123/finalize \
-H 'Authorization: Bearer {api_key}'
curl -X GET https://api.runpod.io/v2/{endpoint_id}/batch/batch_01j9abc123 \
-H 'Authorization: Bearer {api_key}'
# Batch is done when requestCompleted + requestFailed == requestTotal
curl -X GET 'https://api.runpod.io/v2/{endpoint_id}/batch/batch_01j9abc123/requests?offset=0&limit=50' \
-H 'Authorization: Bearer {api_key}'
curl --request GET --url https://api.runpod.io/v2/openapi.json Summary
Explore our guides and examples to deploy your AI/ML application on Runpod. Review setup and usage guidance in the Runpod documentation.
Release history
- docs update
RunPod Serverless adds Batch Jobs API for async bulk inference with dedicated workers, isolated from standard
/runtraffic└──▷ TRY ITCreate a batch with an initial set of embedding requests and get back a batch ID to track progress.$ curl -X POST https://api.runpod.io/v2/{endpoint_id}/batch \ -H 'Authorization: Bearer {api_key}' \ -H 'Content-Type: application/json' \ -d '[{"input":{"text":"The quick brown fox"}},{"input":{"text":"Jumped over the lazy dog"}}]'
Finalize a draft batch to lock it and start processing, then poll for completion using request counts.$ # Finalize curl -X POST https://api.runpod.io/v2/{endpoint_id}/batch/{batch_id}/finalize \ -H 'Authorization: Bearer {api_key}' # Poll until requestCompleted + requestFailed == requestTotal curl https://api.runpod.io/v2/{endpoint_id}/batch/{batch_id} \ -H 'Authorization: Bearer {api_key}'
Page through completed and failed request results after a batch finishes, inspecting error messages on failed items.$ curl 'https://api.runpod.io/v2/{endpoint_id}/batch/{batch_id}/requests?offset=0&limit=50' \ -H 'Authorization: Bearer {api_key}'
- ›New
POST /v2/{endpoint_id}/batchendpoint creates a batch job (optionally with initial requests) that runs asynchronously on dedicated workers, isolated from standard/runtraffic. - ›New
POST /v2/{endpoint_id}/batch/{id}/requestsendpoint appends additional requests to a DRAFT batch incrementally; each call accepts up to 10 MiB of request body. - ›New
GET /v2/{endpoint_id}/batch/{id}endpoint returns batch summary with progress fieldsrequestTotal,requestInProgress,requestCompleted, andrequestFailed. - ›New
GET /v2/{endpoint_id}/batch/{id}/requestsendpoint returns paginated child request results; supportsoffsetandlimitquery parameters with ahasMorefield for pagination. - ›Batch lifecycle moves through states
DRAFT→FINALIZED→FAILED/CANCELLED; completion is inferred whenrequestCompleted + requestFailedequalsrequestTotal.
+1 moreshow less
- ›Console Inbox notifications are sent on terminal state transitions, including batch ID, endpoint name, status, and item counts.
- ›New
- docs update
RunPod Serverless adds batch jobs: submit large inference request collections as a single named batch, processed asynchronously.
- ›New batch jobs capability for RunPod Serverless allows submitting large collections of inference requests as a single named batch for asynchronous processing.
- launch-20260825-f17a307f
RunPod Flash lets you deploy GPU-accelerated Python functions to Serverless with
@remote— no Dockerfile needed.└──▷ TRY ITDeploy a GPU Python function to RunPod Serverless without writing a Dockerfile — ideal for fast iteration on inference code.$ pip install runpod-flashServe a Flash-decorated FastAPI app as a live GPU inference endpoint from your terminal.$ flash run- ›New
runpod-flashPython SDK introduces the@endpointdecorator to deploy GPU-accelerated Python functions directly to RunPod Serverless, specifying GPU type, worker count, and pip dependencies inline — no Dockerfile or registry push required. - ›New
flash runCLI command serves Flash-decorated endpoints locally and as production APIs, enabling GPU inference behind a FastAPI router with a single command. - ›Flash endpoints are full RunPod Serverless endpoints, providing autoscaling, cold-start management, and access to RunPod's full GPU fleet without additional configuration.
- ›New
- New ReleaseBatch Jobs (BETA)
RunPod launches Batch Jobs (BETA) for Serverless endpoints, adding a full async bulk-inference API via REST API v2.
└──▷ TRY ITSubmit a batch of embedding requests to a Serverless endpoint and poll until all requests are done.$ # 1. Create a batch with initial requests curl -s -X POST 'https://api.runpod.io/v2/{endpoint_id}/batch' \ -H 'Authorization: Bearer {api_key}' \ -H 'Content-Type: application/json' \ -d '[{"input":{"text":"The quick brown fox"}},{"input":{"text":"Jumped over the lazy dog"}}]' # Response: {"id": "batch_01j9abc123", "status": "DRAFT"} # 2. Finalize the batch to start processing curl -s -X POST 'https://api.runpod.io/v2/{endpoint_id}/batch/batch_01j9abc123/finalize' \ -H 'Authorization: Bearer {api_key}' # 3. Poll progress until requestCompleted + requestFailed == requestTotal curl -s 'https://api.runpod.io/v2/{endpoint_id}/batch/batch_01j9abc123' \ -H 'Authorization: Bearer {api_key}'
Retrieve the first page of results for a completed batch, then page through remaining results.$ # Fetch first 50 results curl -s 'https://api.runpod.io/v2/{endpoint_id}/batch/batch_01j9abc123/requests?offset=0&limit=50' \ -H 'Authorization: Bearer {api_key}' # Fetch next page curl -s 'https://api.runpod.io/v2/{endpoint_id}/batch/batch_01j9abc123/requests?offset=50&limit=50' \ -H 'Authorization: Bearer {api_key}'
Incrementally build a large batch in chunks under the 10 MiB per-call limit before finalizing.$ # Add a second chunk of requests to a DRAFT batch curl -s -X POST 'https://api.runpod.io/v2/{endpoint_id}/batch/batch_01j9abc123/requests' \ -H 'Authorization: Bearer {api_key}' \ -H 'Content-Type: application/json' \ -d '{"requests":[{"input":{"text":"More text to embed"}},{"input":{"text":"Another piece of text"}},{"input":{"text":"And another one"}}]}'
- ›Adds
POST /v2/{endpoint_id}/batchto create a new batch (optionally with initial requests as a JSON array) against a Serverless endpoint. - ›Adds
POST /v2/{endpoint_id}/batch/{id}/requeststo append requests to a DRAFT batch; request body is limited to 10 MiB per call and can be called multiple times to build large batches incrementally. - ›Adds
POST /v2/{endpoint_id}/batch/{id}/finalizeto lock a batch and make it eligible for execution, transitioning status fromDRAFTtoFINALIZED. - ›Adds
GET /v2/{endpoint_id}/batch/{id}to poll batch progress viarequestTotal,requestInProgress,requestCompleted, andrequestFailedcounts;createdAtis a Unix epoch timestamp in milliseconds. - ›Adds
GET /v2/{endpoint_id}/batch/{id}/requeststo retrieve paginated child-request results including per-requeststatus,output,error,startedAt, andcompletedAt; supportsoffsetandlimitquery parameters with ahasMorefield.
+9 moreshow less
- ›Adds
POST /v2/{endpoint_id}/batch/{id}/cancelto cancel a batch; queued requests are cancelled immediately (not billed) while in-progress requests finish and are billed normally. - ›Adds
DELETE /v2/{endpoint_id}/batch/{id}/requests/{requestId}to remove a single request from a DRAFT batch. - ›Adds
PUT /v2/{endpoint_id}/batch/{id}to update batch attributes such as display name. - ›Adds
GET /v2/{endpoint_id}/batchto list all batches for an endpoint, newest first. - ›Batch jobs run on dedicated workers isolated from standard
/runtraffic, so submitting a batch never delays interactive requests. - ›Batch limits: 10 active batches per endpoint, 5,000 requests per batch, 50,000 queued requests per endpoint (up to 1,000,000 daily for enterprise); limits are configurable for enterprise accounts.
- ›Adds webhook event notifications when a batch reaches a terminal state (
FAILEDorCANCELLED), if a webhook subscription is configured for batch events. - ›Adds a Batch tab in the RunPod console for each endpoint, showing batch name, status, progress counts, per-request rows with timestamps and error messages, and links to child request detail views.
- ›Adds AWS ECR Integration (BETA) allowing private container images to be pulled into Pods and Serverless endpoints via ECR delegation, without migrating registries or managing credentials.
└──▷ BREAKING ON UPGRADE- !REST API v1 will be retired on November 15, 2026; existing integrations must migrate to REST API v2 at the new base URL
https://api.runpod.io/v2before that date. - !The GraphQL API will be retired in early 2027; new integrations should use REST API v2.
- ›Adds
- New ReleaseBatch Jobs (BETA)
RunPod launches Batch Jobs (BETA) with a full REST API for submitting, managing, and polling large async inference workloads on Serverless endpoints.
└──▷ TRY ITKick off a nightly embedding run by creating a batch with an initial set of inputs, then finalizing it so dedicated batch workers begin processing asynchronously.$ # 1. Create batch with initial requests curl -X POST https://api.runpod.io/v2/{endpoint_id}/batch \ -H 'Authorization: Bearer {api_key}' \ -H 'Content-Type: application/json' \ -d '[{"input":{"text":"The quick brown fox"}},{"input":{"text":"Jumped over the lazy dog"}}]' # 2. Finalize to start processing curl -X POST https://api.runpod.io/v2/{endpoint_id}/batch/batch_01j9abc123/finalize \ -H 'Authorization: Bearer {api_key}'
Poll a running batch until all requests have finished, using the request counts rather than a COMPLETED status.$ curl -X GET https://api.runpod.io/v2/{endpoint_id}/batch/batch_01j9abc123 \ -H 'Authorization: Bearer {api_key}' # Batch is done when requestCompleted + requestFailed == requestTotal
Page through completed results after a batch finishes, inspecting outputs and error messages for failed child requests.$ curl -X GET 'https://api.runpod.io/v2/{endpoint_id}/batch/batch_01j9abc123/requests?offset=0&limit=50' \ -H 'Authorization: Bearer {api_key}'
- ›New
POST /v2/{endpoint_id}/batchendpoint creates a batch job, optionally seeding it with an initial array of requests (each matching the standard/runshape with aninputfield). - ›New
POST /v2/{endpoint_id}/batch/{id}/requestsendpoint appends additional requests to a DRAFT batch; accepts up to 10 MiB per call and can be called multiple times incrementally. - ›New
POST /v2/{endpoint_id}/batch/{id}/finalizeendpoint locks the batch and makes it eligible for execution, transitioning status toFINALIZED. - ›New
GET /v2/{endpoint_id}/batch/{id}endpoint returns a batch summary includingrequestTotal,requestInProgress,requestCompleted, andrequestFailedcounts for progress polling. - ›New
GET /v2/{endpoint_id}/batch/{id}/requestsendpoint returns paginated child-request results with per-requeststatus,output,error,startedAt, andcompletedAtfields; supportsoffsetandlimitquery parameters, with ahasMorefield indicating remaining pages.
+8 moreshow less
- ›New
POST /v2/{endpoint_id}/batch/{id}/cancelendpoint cancels a batch; queued requests are cancelled and not billed, while in-progress requests complete normally. - ›New
GET /v2/{endpoint_id}/batchendpoint lists all batches for an endpoint, newest first. - ›New
PUT /v2/{endpoint_id}/batch/{id}endpoint updates batch attributes such as display name. - ›New
DELETE /v2/{endpoint_id}/batch/{id}/requests/{requestId}endpoint removes a single request from a DRAFT batch. - ›Batch jobs run on dedicated workers isolated from standard
/runtraffic, so submitting a batch never delays interactive requests; limits are 10 active batches per endpoint, 5,000 requests per batch, and 50,000 queued requests per endpoint (up to 1,000,000 daily for enterprise). - ›Console Batch tab on each endpoint shows all batches with name, status, and progress counts, plus a detail view with per-request rows, timestamps, and error messages sorted failures-first.
- ›Webhook and Console Inbox notifications fire once when a batch reaches a terminal state (
FAILEDorCANCELLED), including batch ID, endpoint name, status, and completed/failed/total counts. - ›Batch jobs are billed at the same rate as standard serverless requests; flex worker discounts apply for enterprise customers.
- ›New
- New ReleaseREST API v2
RunPod REST API v2 is generally available, adding catalog endpoints, pod log streaming, and Serverless observability at a new base URL.
└──▷ TRY ITFetch the full OpenAPI spec to generate a typed client or validate requests against the v2 API.$ curl --request GET --url https://api.runpod.io/v2/openapi.json
- ›New base URL
https://api.runpod.io/v2for all REST API v2 requests, with reorganized resource paths and standardized request/response shapes. - ›New
GET https://api.runpod.io/v2/openapi.jsonendpoint returns the complete OpenAPI specification for client generation, request validation, and tooling integration. - ›New catalog endpoints let you browse available GPU types, CPU types, and data centers programmatically.
- ›New pod log streaming capability available via REST API v2.
- ›New Serverless observability features available via REST API v2.
+2 moreshow less
- ›New
/runpod:migratecommand (via the Runpod skills plugin in a coding agent) automatically migrates v1 or GraphQL integrations to v2. - ›New ECR Integration (BETA) lets you pull private container images from AWS ECR into Pods and Serverless endpoints without migrating registries or managing credentials.
└──▷ BREAKING ON UPGRADE- !REST API v1 will be retired on November 15, 2026 — existing v1 integrations must be migrated to REST API v2 before that date.
- !The GraphQL API will be retired in early 2027 — new integrations should use REST API v2.
- ›New base URL