From the team behind Papers with Code, Llama 2 and Llama 3

The Home of RLEnvironments

Train and evaluate agents on 360+ reinforcement learning environments with zero infrastructure setup.

01

Your agent

Model call

Any provider or harness

02

OpenReward

Session router

One open API

03

Environment

Isolated runtime

Scales on demand

04

Training loop

Verified reward

Ready to hillclimb

Built for frontier teams

330+ environments

Meta
Google DeepMind
Qwen
Nebius
Sarvam
General Reasoning

The platform

Improve your models with the highest-quality RL environments

OpenReward provides high-quality environments through API endpoints, allowing you to improve your models with minimal integration cost. It is built on an open standard that lets you run on our infrastructure or yours.

Quickstart

Run your first rollout.

Sample from an OpenReward environment using a single API.

01Add API keys
02Choose your model
03Run the rollout

The example is ready to run as shown.

01

Set your API keys

export OPENAI_API_KEY='your-openai-api-key'
export OPENREWARD_API_KEY='your-openreward-api-key'
02

Run the rollout

from openai import OpenAI
from openreward import OpenReward
import json

or_client = OpenReward()
oai_client = OpenAI()
MODEL_NAME = "gpt-5.4"

environment = or_client.environments.get(name="kanishk/EndlessTerminals")
tasks = environment.list_tasks(split="train")
tools = environment.list_tools(format="openai")

example_task = tasks[0]
with environment.session(task=example_task) as session:
    rollout = or_client.rollout.create(
        run_name="EndlessTerminals-train-quickstart",
        rollout_name="example_task",
        environment="kanishk/EndlessTerminals",
        split="train",
        print_messages=True
    )

    prompt = session.get_prompt()
    input_list = [{"role": "user", "content": prompt[0].text}]
    rollout.log_openai_response(input_list[0])
    finished = False

    while not finished:
        response = oai_client.responses.create(
            model=MODEL_NAME,
            tools=tools,
            input=input_list
        )
        rollout.log_openai_response(response)

        input_list += response.output

        for item in response.output:
            if item.type == "function_call":
                tool_result = session.call_tool(item.name, json.loads(str(item.arguments)))

                reward = tool_result.reward
                finished = tool_result.finished

                tool_result_item = {
                    "type": "function_call_output",
                    "call_id": item.call_id,
                    "output": tool_result.blocks[0].text
                }
                input_list.append(tool_result_item)
                rollout.log_openai_response(tool_result_item, reward=reward, is_finished=finished)

                if tool_result.finished:
                    finished = True
                    break

    or_client.rollout.close()

Open by design

An Open Environment Standard

OpenReward is built on the independent Open Reward Standard, a common contract for tasks, tools, observations and rewards that works across infrastructure.

Read the standard
01

Run anywhere

The same environment contract works on a laptop, your cluster or OpenReward.

02

Scale when needed

Use managed hosting for rollout bursts without changing agent code.

03

Leave when you like

Move environments in or out freely. Your work is never trapped in our platform.