Create a custom flop, turn, or river solve, poll its tree until it is queryable, then request a completed node's strategy.
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.| Fact | Value |
|---|---|
| Create | POST /v1/gto/solver schedules a flop, turn, or river solve; board length selects the street. |
| Readiness | Poll POST /v1/gto/solver/tree until spot_status is queryable. |
| Read | Pass a tree node token to POST /v1/gto/solver/node. |
| Quota | A fresh solve uses one solve quota; cached reuse, tree reads, and node reads do not consume solve quota. |
| Free tier | 1,000 presolved lookups + 25 real-time solves per month. |
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.
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.
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.
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.
| Signal | Meaning | What to do |
|---|---|---|
computing | The solve or node is still processing. | Poll the tree again; do not request strategy as if it were complete. |
queryable | The tree is ready to inspect. | Select a returned node token and call /v1/gto/solver/node. |
no_nodes | The queried round or runout has no decision nodes. | Stop polling that round or runout. |
expired | The solve was reclaimed or replaced. | Schedule a new solve; the old handle cannot be queried. |
error | The node reports a strategy error, optionally with message. | Handle it as a failed node; do not present it as strategy. |
HTTP 429 with status: busy | All solver hosts are busy. | Retry with backoff; this is not a quota charge. |
HTTP 503 | The tree or node upstream is unavailable. | Treat it as transient and retry with backoff when appropriate. |
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.
busy handling.Real-time assistance at real-money tables is prohibited.