Skip to main content
POST
Start a battle
Keep it blind. The response includes agent1.model, agent2.model and arena.models so you can reveal names after a vote. Keep them hidden from voters until they vote, as the Arena does. See Run a battle.
Both models run in parallel with a 60 second limit each. A model that fails or times out is replaced by a fallback model, and its message starts with [System Note]. Use a client timeout of at least 120 seconds.

Authorizations

Authorization
string
header
required

The access token from your DualMind Arena session (a Supabase JWT). See Authentication.

Body

application/json
prompt
string
required

The prompt both models answer. Must not be empty.

Example:

"Write a haiku about distributed systems"

selectionMode
enum<string>
default:random

How the two models are picked when model1 and model2 are not set. random: two different random models. topper: the model with the best win rate against a random challenger.

Available options:
random,
topper
model1
string

Left model (modelName or modelId). Set both model1 and model2 for a Side by Side comparison; setting only one is an error.

model2
string

Right model (modelName or modelId).

system
string

Optional system prompt sent to both models.

maxTokens
integer
default:4096

Maximum tokens per response.

Required range: x >= 1
temperature
number
default:0.7

Sampling temperature for both models.

Required range: 0 <= x <= 2
threadId
string<uuid>

Save this battle to a thread you own.

Response

Both responses and the comparison ID.

success
boolean
comparisonId
string<uuid>

Pass this to POST /api/arena/model-vote.

agent1
object

Left response (vote left).

agent2
object

Right response (vote right).

arena
object

Simple length and token heuristics plus the model names. Clients that want a blind experience should keep model names hidden until the user votes, as the Arena does.

timestamp
string<date-time>
totalResponseTimeMs
integer
Last modified on October 18, 2026