OpenAI reliability

Stop losing OpenAI requests when they fail.

ReqRun ensures every OpenAI request completes or fails visibly. It queues, retries, deduplicates, and gives each run a status endpoint.

Stop losing OpenAI requests when they fail because of timeouts, rate limits, or restarts. Drop it between your app and OpenAI when that work must not disappear.

Your appReqRunOpenAI↑ reliability layer
request executionrr_7f9c... completed
timeouts429srestartsduplicate submits
Statuscompleted
Attempts3
Modelgpt-5-nano
queued
accepted
attempt 1
429 -> retry -> completed
attempt 2
500 -> retry -> completed
attempt 3
result stored
request idrr_7f9c2avisible
idempotencyticket-842deduped

Definition

ReqRun ensures OpenAI requests complete reliably using retries, idempotency, async, and durable request IDs.

Durable request idsRetries with backoffIdempotency keysStatus visibility

ReqRun focuses on one job: making important OpenAI requests complete or fail visibly.

Runnable shape

Replace the direct OpenAI call. Keep the request shape.

Send the same chat completion body to ReqRun. Add wait=true when you want a synchronous result, or store the rr_ id and check it later.

TypeScript SDK
import { ReqRun } from "@reqrun/sdk";

const reqrun = new ReqRun({
  apiKey: process.env.REQRUN_API_KEY!,
  signingSecret: process.env.REQRUN_SIGNING_SECRET!,
  baseURL: "https://api.reqrun.com",
});

const result = await reqrun.chat.completions.create({
  model: "gpt-5-nano",
  messages: [{ role: "user", content: "Classify this ticket." }],
  wait: true,
  idempotency_key: "ticket-842",
});
Async status
const response = await reqrun.chat.completions.create({
  model: "gpt-5-nano",
  messages: [{ role: "user", content: "Classify this ticket." }],
  wait: false,
  idempotency_key: "ticket-842",
});

if (response.object === "chat.completion.async") {
  const request = await reqrun.requests.get(response.id);
  console.log(request.status, request.attempts);
}

Category

When OpenAI calls fail, this is what changes.

Use ReqRun when an OpenAI request needs a durable record, safe retries, and a visible outcome instead of a silent failure.

Without ReqRunWith ReqRun
Request disappears after a timeoutDurable rr_ request id
Ad hoc retry codeControlled retries with backoff
Retry can duplicate workDeduped by idempotency key
No visible outcomeGET /v1/requests/{id}

ReqRun does not change your OpenAI request body. It changes what happens when that request hits a real failure case.

Operational visibility

Know whether the request is queued, retrying, completed, or failed.

See status, attempts, model, errors, and final result without logging raw prompts in app logs.

What your app sends

POST/v1/chat/completions
keyreqrun_live_...
dedupeidempotency_key: ticket-842

What ReqRun records

rr_91a8completed2 attempts
rr_72beretryingopenai_http_429
rr_5dd1failedunsupported_value

Use cases

Use this when an agent task must not fail halfway through.

Features

The reliability pieces around one OpenAI request.

Retries with control

Requests don't silently fail when OpenAI returns a timeout, 429, or 5xx response.

Request IDs

Every request has a traceable outcome with an rr_ id and a visible status endpoint.

Idempotency by project

No duplicate work on retries when the same logical OpenAI request is sent again.

How it works

Three steps from API call to visible outcome.

Send the request

Call POST /v1/chat/completions with your ReqRun project API key.

ReqRun runs it

The request is queued, claimed by a worker, retried when safe, and recorded.

Observe the outcome

Use wait=true for fast results or GET /v1/requests/{id} for async status.

Start

Add reliability before your first failed OpenAI request costs you time.

Install the SDK, generate a project API key, and send your first durable OpenAI request.