Docs topic · GTO solver lifecycle

How do I run a GTO solver workflow?

Create a custom flop, turn, or river solve, poll its tree until it is queryable, then request a completed node's strategy.

Updated Maintained by Pokerai API

Direct answer: call POST /v1/gto/solver, keep the returned solve handle, poll POST /v1/gto/solver/tree until spot_status is queryable, then pass a returned node token to POST /v1/gto/solver/node.

Quick facts

FactValue
CreatePOST /v1/gto/solver schedules a flop, turn, or river solve; board length selects the street.
ReadinessPoll POST /v1/gto/solver/tree until spot_status is queryable.
ReadPass a tree node token to POST /v1/gto/solver/node.
QuotaA fresh solve uses one solve quota; cached reuse, tree reads, and node reads do not consume solve quota.
Free tier1,000 presolved lookups + 25 real-time solves per month.

When to use this

Use this workflow for a custom flop, turn, or river spot when you need to submit the board, ranges, pot, effective stack, and hero position. It is a lifecycle for one submitted solve handle, not a claim about all poker formats or result quality.

When not to use this

Do not use it for real-money real-time assistance (RTA): Pokerai API is for training, coaching, hand review, study, and research. Do not treat a computing, expired, no_nodes, or node error response as a completed strategy.

Minimal verifiable request

curl -s https://pokerai.bet/v1/gto/solver -H "Authorization: Bearer $POKERAI_API_KEY" -H "Content-Type: application/json" -d '{"board":"2c2h2s","oop_range":"AA,KK","ip_range":"QQ,JJ","pot":6,"effective_stack":100,"hero":"OOP"}'

Store the response's solve handle. A response can report computing or queryable; only a fresh trigger includes solve_quota.

Poll the tree, then read a completed node

curl -s https://pokerai.bet/v1/gto/solver/tree -H "Authorization: Bearer $POKERAI_API_KEY" -H "Content-Type: application/json" -d '{"solve":"<solve handle>"}'
curl -s https://pokerai.bet/v1/gto/solver/node -H "Authorization: Bearer $POKERAI_API_KEY" -H "Content-Type: application/json" -d '{"node":"<node token from a queryable tree>"}'

For a hero node, the documented success shape has strategy. For a villain node, or when hole_cards is omitted, the documented response can provide actions and range_strategy. Consume only fields documented by the current OpenAPI contract.

Status and error handling

SignalMeaningWhat to do
computingThe solve or node is still processing.Poll the tree again; do not request strategy as if it were complete.
queryableThe tree is ready to inspect.Select a returned node token and call /v1/gto/solver/node.
no_nodesThe queried round or runout has no decision nodes.Stop polling that round or runout.
expiredThe solve was reclaimed or replaced.Schedule a new solve; the old handle cannot be queried.
errorThe node reports a strategy error, optionally with message.Handle it as a failed node; do not present it as strategy.
HTTP 429 with status: busyAll solver hosts are busy.Retry with backoff; this is not a quota charge.
HTTP 503The tree or node upstream is unavailable.Treat it as transient and retry with backoff when appropriate.

Quota and related resources

A new solve consumes the real-time solve counter; cached-solve reuse and solver tree/node reads are free. See the quota topic for the current monthly counters.

Real-time assistance at real-money tables is prohibited.