[{"data":1,"prerenderedAt":1235},["ShallowReactive",2],{"docs-navigation":3,"docs-page:\u002Fdocs\u002Fapi\u002Ferrors":401},[4],{"title":5,"path":6,"stem":7,"children":8},"Docs","\u002Fdocs","docs",[9,12,44,64,254,300,349,375],{"title":10,"path":6,"stem":11},"Overview","docs\u002Findex",{"title":13,"path":14,"stem":15,"children":16,"order":18},"API Overview","\u002Fdocs\u002Fapi","docs\u002Fapi\u002Findex",[17,19,24,29,34,39],{"title":13,"path":14,"stem":15,"order":18},7,{"title":20,"path":21,"stem":22,"order":23},"Assets API","\u002Fdocs\u002Fapi\u002Fassets","docs\u002Fapi\u002Fassets",3,{"title":25,"path":26,"stem":27,"order":28},"Authentication","\u002Fdocs\u002Fapi\u002Fauthentication","docs\u002Fapi\u002Fauthentication",1,{"title":30,"path":31,"stem":32,"order":33},"Components API","\u002Fdocs\u002Fapi\u002Fcomponents","docs\u002Fapi\u002Fcomponents",4,{"title":35,"path":36,"stem":37,"order":38},"Error Handling","\u002Fdocs\u002Fapi\u002Ferrors","docs\u002Fapi\u002Ferrors",5,{"title":40,"path":41,"stem":42,"order":43},"Games API","\u002Fdocs\u002Fapi\u002Fgames","docs\u002Fapi\u002Fgames",2,{"title":45,"path":46,"stem":47,"children":48,"order":38},"Automation","\u002Fdocs\u002Fautomation","docs\u002Fautomation\u002Findex",[49,50,60],{"title":45,"path":46,"stem":47,"order":38},{"title":51,"path":52,"stem":53,"children":54,"order":43},"Sequences","\u002Fdocs\u002Fautomation\u002Fsequences","docs\u002Fautomation\u002Fsequences\u002Findex",[55,56],{"title":51,"path":52,"stem":53,"order":43},{"title":57,"path":58,"stem":59},"Steps","\u002Fdocs\u002Fautomation\u002Fsequences\u002Fsteps","docs\u002Fautomation\u002Fsequences\u002Fsteps",{"title":61,"path":62,"stem":63,"order":28},"Triggers","\u002Fdocs\u002Fautomation\u002Ftriggers","docs\u002Fautomation\u002Ftriggers",{"title":65,"path":66,"stem":67,"children":68,"order":33},"Entities","\u002Fdocs\u002Fentities","docs\u002Fentities\u002Findex",[69,70,160,202],{"title":65,"path":66,"stem":67,"order":33},{"title":71,"path":72,"stem":73,"children":74},"Pieces","\u002Fdocs\u002Fentities\u002Fpieces","docs\u002Fentities\u002F01.pieces\u002Findex",[75,76,90,104,138],{"title":71,"path":72,"stem":73},{"title":77,"path":78,"stem":79,"children":80},"Dice","\u002Fdocs\u002Fentities\u002Fpieces\u002Fdice","docs\u002Fentities\u002F01.pieces\u002Fdice\u002Findex",[81,82,86],{"title":77,"path":78,"stem":79},{"title":83,"path":84,"stem":85},"Polyhedral Die","\u002Fdocs\u002Fentities\u002Fpieces\u002Fdice\u002Fpolyhedral-die","docs\u002Fentities\u002F01.pieces\u002Fdice\u002Fpolyhedral-die",{"title":87,"path":88,"stem":89},"Spinner","\u002Fdocs\u002Fentities\u002Fpieces\u002Fdice\u002Fspinner","docs\u002Fentities\u002F01.pieces\u002Fdice\u002Fspinner",{"title":91,"path":92,"stem":93,"children":94},"Tiles and Stacks","\u002Fdocs\u002Fentities\u002Fpieces\u002Ftiles-and-stacks","docs\u002Fentities\u002F01.pieces\u002Ftiles-and-stacks\u002Findex",[95,96,100],{"title":91,"path":92,"stem":93},{"title":97,"path":98,"stem":99},"Stack","\u002Fdocs\u002Fentities\u002Fpieces\u002Ftiles-and-stacks\u002Fstack","docs\u002Fentities\u002F01.pieces\u002Ftiles-and-stacks\u002Fstack",{"title":101,"path":102,"stem":103},"Tile","\u002Fdocs\u002Fentities\u002Fpieces\u002Ftiles-and-stacks\u002Ftile","docs\u002Fentities\u002F01.pieces\u002Ftiles-and-stacks\u002Ftile",{"title":105,"path":106,"stem":107,"children":108},"Tokens","\u002Fdocs\u002Fentities\u002Fpieces\u002Ftokens","docs\u002Fentities\u002F01.pieces\u002Ftokens\u002Findex",[109,110,114,118,122,126,130,134],{"title":105,"path":106,"stem":107},{"title":111,"path":112,"stem":113},"Block","\u002Fdocs\u002Fentities\u002Fpieces\u002Ftokens\u002Fblock","docs\u002Fentities\u002F01.pieces\u002Ftokens\u002Fblock",{"title":115,"path":116,"stem":117},"Disc","\u002Fdocs\u002Fentities\u002Fpieces\u002Ftokens\u002Fdisc","docs\u002Fentities\u002F01.pieces\u002Ftokens\u002Fdisc",{"title":119,"path":120,"stem":121},"Image Token","\u002Fdocs\u002Fentities\u002Fpieces\u002Ftokens\u002Fimage-token","docs\u002Fentities\u002F01.pieces\u002Ftokens\u002Fimage-token",{"title":123,"path":124,"stem":125},"Model Token","\u002Fdocs\u002Fentities\u002Fpieces\u002Ftokens\u002Fmodel-token","docs\u002Fentities\u002F01.pieces\u002Ftokens\u002Fmodel-token",{"title":127,"path":128,"stem":129},"Pawn","\u002Fdocs\u002Fentities\u002Fpieces\u002Ftokens\u002Fpawn","docs\u002Fentities\u002F01.pieces\u002Ftokens\u002Fpawn",{"title":131,"path":132,"stem":133},"Pyramid","\u002Fdocs\u002Fentities\u002Fpieces\u002Ftokens\u002Fpyramid","docs\u002Fentities\u002F01.pieces\u002Ftokens\u002Fpyramid",{"title":135,"path":136,"stem":137},"Ring","\u002Fdocs\u002Fentities\u002Fpieces\u002Ftokens\u002Fring","docs\u002Fentities\u002F01.pieces\u002Ftokens\u002Fring",{"title":139,"path":140,"stem":141,"children":142},"Utility Pieces","\u002Fdocs\u002Fentities\u002Fpieces\u002Futility-pieces","docs\u002Fentities\u002F01.pieces\u002Futility-pieces\u002Findex",[143,144,148,152,156],{"title":139,"path":140,"stem":141},{"title":145,"path":146,"stem":147},"Bag","\u002Fdocs\u002Fentities\u002Fpieces\u002Futility-pieces\u002Fbag","docs\u002Fentities\u002F01.pieces\u002Futility-pieces\u002Fbag",{"title":149,"path":150,"stem":151},"Counter","\u002Fdocs\u002Fentities\u002Fpieces\u002Futility-pieces\u002Fcounter","docs\u002Fentities\u002F01.pieces\u002Futility-pieces\u002Fcounter",{"title":153,"path":154,"stem":155},"Timer","\u002Fdocs\u002Fentities\u002Fpieces\u002Futility-pieces\u002Ftimer","docs\u002Fentities\u002F01.pieces\u002Futility-pieces\u002Ftimer",{"title":157,"path":158,"stem":159},"Token Bowl","\u002Fdocs\u002Fentities\u002Fpieces\u002Futility-pieces\u002Ftoken-bowl","docs\u002Fentities\u002F01.pieces\u002Futility-pieces\u002Ftoken-bowl",{"title":161,"path":162,"stem":163,"children":164},"Spaces","\u002Fdocs\u002Fentities\u002Fspaces","docs\u002Fentities\u002F02.spaces\u002Findex",[165,166,180],{"title":161,"path":162,"stem":163},{"title":167,"path":168,"stem":169,"children":170},"Layouts","\u002Fdocs\u002Fentities\u002Fspaces\u002Flayouts","docs\u002Fentities\u002F02.spaces\u002Flayouts\u002Findex",[171,172,176],{"title":167,"path":168,"stem":169},{"title":173,"path":174,"stem":175},"Hex Grid","\u002Fdocs\u002Fentities\u002Fspaces\u002Flayouts\u002Fhex-grid","docs\u002Fentities\u002F02.spaces\u002Flayouts\u002Fhex-grid",{"title":177,"path":178,"stem":179},"Square Grid","\u002Fdocs\u002Fentities\u002Fspaces\u002Flayouts\u002Fsquare-grid","docs\u002Fentities\u002F02.spaces\u002Flayouts\u002Fsquare-grid",{"title":181,"path":182,"stem":183,"children":184},"Placement Spaces","\u002Fdocs\u002Fentities\u002Fspaces\u002Fplacement-spaces","docs\u002Fentities\u002F02.spaces\u002Fplacement-spaces\u002Findex",[185,186,190,194,198],{"title":181,"path":182,"stem":183},{"title":187,"path":188,"stem":189},"Box Space","\u002Fdocs\u002Fentities\u002Fspaces\u002Fplacement-spaces\u002Fbox-space","docs\u002Fentities\u002F02.spaces\u002Fplacement-spaces\u002Fbox-space",{"title":191,"path":192,"stem":193},"Hex Space","\u002Fdocs\u002Fentities\u002Fspaces\u002Fplacement-spaces\u002Fhex-space","docs\u002Fentities\u002F02.spaces\u002Fplacement-spaces\u002Fhex-space",{"title":195,"path":196,"stem":197},"Orb Space","\u002Fdocs\u002Fentities\u002Fspaces\u002Fplacement-spaces\u002Forb-space","docs\u002Fentities\u002F02.spaces\u002Fplacement-spaces\u002Forb-space",{"title":199,"path":200,"stem":201},"Point Space","\u002Fdocs\u002Fentities\u002Fspaces\u002Fplacement-spaces\u002Fpoint-space","docs\u002Fentities\u002F02.spaces\u002Fplacement-spaces\u002Fpoint-space",{"title":203,"path":204,"stem":205,"children":206},"Annotations","\u002Fdocs\u002Fentities\u002Fannotations","docs\u002Fentities\u002F03.annotations\u002Findex",[207,208,218,244],{"title":203,"path":204,"stem":205},{"title":209,"path":210,"stem":211,"children":212},"Freehand Annotations","\u002Fdocs\u002Fentities\u002Fannotations\u002Ffreehand-annotations","docs\u002Fentities\u002F03.annotations\u002Ffreehand-annotations\u002Findex",[213,214],{"title":209,"path":210,"stem":211},{"title":215,"path":216,"stem":217},"Freehand Annotation","\u002Fdocs\u002Fentities\u002Fannotations\u002Ffreehand-annotations\u002Ffreehand-annotation","docs\u002Fentities\u002F03.annotations\u002Ffreehand-annotations\u002Ffreehand-annotation",{"title":219,"path":220,"stem":221,"children":222},"Shape Annotations","\u002Fdocs\u002Fentities\u002Fannotations\u002Fshape-annotations","docs\u002Fentities\u002F03.annotations\u002Fshape-annotations\u002Findex",[223,224,228,232,236,240],{"title":219,"path":220,"stem":221},{"title":225,"path":226,"stem":227},"Arrow Annotation","\u002Fdocs\u002Fentities\u002Fannotations\u002Fshape-annotations\u002Farrow-annotation","docs\u002Fentities\u002F03.annotations\u002Fshape-annotations\u002Farrow-annotation",{"title":229,"path":230,"stem":231},"Box Annotation","\u002Fdocs\u002Fentities\u002Fannotations\u002Fshape-annotations\u002Fbox-annotation","docs\u002Fentities\u002F03.annotations\u002Fshape-annotations\u002Fbox-annotation",{"title":233,"path":234,"stem":235},"Hex Annotation","\u002Fdocs\u002Fentities\u002Fannotations\u002Fshape-annotations\u002Fhex-annotation","docs\u002Fentities\u002F03.annotations\u002Fshape-annotations\u002Fhex-annotation",{"title":237,"path":238,"stem":239},"Orb Annotation","\u002Fdocs\u002Fentities\u002Fannotations\u002Fshape-annotations\u002Forb-annotation","docs\u002Fentities\u002F03.annotations\u002Fshape-annotations\u002Forb-annotation",{"title":241,"path":242,"stem":243},"Triangle Annotation","\u002Fdocs\u002Fentities\u002Fannotations\u002Fshape-annotations\u002Ftriangle-annotation","docs\u002Fentities\u002F03.annotations\u002Fshape-annotations\u002Ftriangle-annotation",{"title":245,"path":246,"stem":247,"children":248},"Text Annotations","\u002Fdocs\u002Fentities\u002Fannotations\u002Ftext-annotations","docs\u002Fentities\u002F03.annotations\u002Ftext-annotations\u002Findex",[249,250],{"title":245,"path":246,"stem":247},{"title":251,"path":252,"stem":253},"Text Annotation","\u002Fdocs\u002Fentities\u002Fannotations\u002Ftext-annotations\u002Ftext-annotation","docs\u002Fentities\u002F03.annotations\u002Ftext-annotations\u002Ftext-annotation",{"title":255,"path":256,"stem":257,"children":258,"order":28},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002Fgetting-started\u002Findex",[259,260,264,268,296],{"title":255,"path":256,"stem":257,"order":28},{"title":261,"path":262,"stem":263,"order":43},"Tutorial 2: Build a Deck of Cards","\u002Fdocs\u002Fgetting-started\u002Fbuild-a-deck-of-cards","docs\u002Fgetting-started\u002Fbuild-a-deck-of-cards",{"title":265,"path":266,"stem":267,"order":23},"Tutorial 3: Use Your Own Images","\u002Fdocs\u002Fgetting-started\u002Fcustom-images","docs\u002Fgetting-started\u002Fcustom-images",{"title":269,"path":270,"stem":271,"children":272,"order":274},"Why Playtest Parlor?","\u002Fdocs\u002Fgetting-started\u002Fwhy-playtest-parlor","docs\u002Fgetting-started\u002Fwhy-playtest-parlor\u002Findex",[273,275,279,283,287,291],{"title":269,"path":270,"stem":271,"order":274},-2,{"title":276,"path":277,"stem":278,"order":33},"Compared to In-Person Playtesting","\u002Fdocs\u002Fgetting-started\u002Fwhy-playtest-parlor\u002Fcompared-to-in-person","docs\u002Fgetting-started\u002Fwhy-playtest-parlor\u002Fcompared-to-in-person",{"title":280,"path":281,"stem":282,"order":23},"Compared to PlayingCards.io","\u002Fdocs\u002Fgetting-started\u002Fwhy-playtest-parlor\u002Fcompared-to-playingcards-io","docs\u002Fgetting-started\u002Fwhy-playtest-parlor\u002Fcompared-to-playingcards-io",{"title":284,"path":285,"stem":286,"order":43},"Compared to Screentop.gg","\u002Fdocs\u002Fgetting-started\u002Fwhy-playtest-parlor\u002Fcompared-to-screentop","docs\u002Fgetting-started\u002Fwhy-playtest-parlor\u002Fcompared-to-screentop",{"title":288,"path":289,"stem":290,"order":28},"Compared to Tabletop Simulator","\u002Fdocs\u002Fgetting-started\u002Fwhy-playtest-parlor\u002Fcompared-to-tts","docs\u002Fgetting-started\u002Fwhy-playtest-parlor\u002Fcompared-to-tts",{"title":292,"path":293,"stem":294,"order":295},"Platform Comparison","\u002Fdocs\u002Fgetting-started\u002Fwhy-playtest-parlor\u002Fcomparison-matrix","docs\u002Fgetting-started\u002Fwhy-playtest-parlor\u002Fcomparison-matrix",0,{"title":297,"path":298,"stem":299,"order":28},"Tutorial 1: Your First Game","\u002Fdocs\u002Fgetting-started\u002Fyour-first-game","docs\u002Fgetting-started\u002Fyour-first-game",{"title":301,"path":302,"stem":303,"children":304,"order":43},"Interface","\u002Fdocs\u002Finterface","docs\u002Finterface\u002Findex",[305,306,310,315,319,323,328,332,336,341,345],{"title":301,"path":302,"stem":303,"order":43},{"title":307,"path":308,"stem":309,"order":33},"The Action Dock","\u002Fdocs\u002Finterface\u002Faction-dock","docs\u002Finterface\u002Faction-dock",{"title":311,"path":312,"stem":313,"order":314},"Finding Your Discord User ID","\u002Fdocs\u002Finterface\u002Fdiscord-id","docs\u002Finterface\u002Fdiscord-id",10,{"title":316,"path":317,"stem":318,"order":18},"The Entity Browser","\u002Fdocs\u002Finterface\u002Fentity-browser","docs\u002Finterface\u002Fentity-browser",{"title":320,"path":321,"stem":322,"order":38},"The Minimap","\u002Fdocs\u002Finterface\u002Fminimap","docs\u002Finterface\u002Fminimap",{"title":324,"path":325,"stem":326,"order":327},"The Player Hand","\u002Fdocs\u002Finterface\u002Fplayer-hand","docs\u002Finterface\u002Fplayer-hand",6,{"title":329,"path":330,"stem":331,"order":23},"The Players Panel","\u002Fdocs\u002Finterface\u002Fplayers-panel","docs\u002Finterface\u002Fplayers-panel",{"title":333,"path":334,"stem":335},"Sequences Panel","\u002Fdocs\u002Finterface\u002Fsequences-panel","docs\u002Finterface\u002Fsequences-panel",{"title":337,"path":338,"stem":339,"order":340},"Session Notebook","\u002Fdocs\u002Finterface\u002Fsession-notebook","docs\u002Finterface\u002Fsession-notebook",8,{"title":342,"path":343,"stem":344,"order":28},"The Table","\u002Fdocs\u002Finterface\u002Ftable","docs\u002Finterface\u002Ftable",{"title":346,"path":347,"stem":348,"order":43},"The Toolbar","\u002Fdocs\u002Finterface\u002Ftoolbar","docs\u002Finterface\u002Ftoolbar",{"title":350,"path":351,"stem":352,"children":353,"order":23},"Playtests","\u002Fdocs\u002Fplaytests","docs\u002Fplaytests\u002Findex",[354,355,359,363,367,371],{"title":350,"path":351,"stem":352,"order":23},{"title":356,"path":357,"stem":358,"order":43},"Inviting players","\u002Fdocs\u002Fplaytests\u002Finviting-players","docs\u002Fplaytests\u002Finviting-players",{"title":360,"path":361,"stem":362,"order":38},"Player count guidelines","\u002Fdocs\u002Fplaytests\u002Fplayer-count-guidelines","docs\u002Fplaytests\u002Fplayer-count-guidelines",{"title":364,"path":365,"stem":366,"order":33},"Reviewing outcomes","\u002Fdocs\u002Fplaytests\u002Freviewing-outcomes","docs\u002Fplaytests\u002Freviewing-outcomes",{"title":368,"path":369,"stem":370,"order":28},"Starting a playtest","\u002Fdocs\u002Fplaytests\u002Fstarting-a-playtest","docs\u002Fplaytests\u002Fstarting-a-playtest",{"title":372,"path":373,"stem":374,"order":23},"Surveys","\u002Fdocs\u002Fplaytests\u002Fsurveys","docs\u002Fplaytests\u002Fsurveys",{"title":376,"path":377,"stem":378,"children":379,"order":43},"Setting up a Table","\u002Fdocs\u002Fsetting-up-a-table","docs\u002Fsetting-up-a-table\u002Findex",[380,381,385,389,393,397],{"title":376,"path":377,"stem":378,"order":43},{"title":382,"path":383,"stem":384,"order":28},"Adding pieces to a table","\u002Fdocs\u002Fsetting-up-a-table\u002Fadding-pieces-to-a-table","docs\u002Fsetting-up-a-table\u002Fadding-pieces-to-a-table",{"title":386,"path":387,"stem":388,"order":43},"Building your first table layout","\u002Fdocs\u002Fsetting-up-a-table\u002Fbuilding-your-first-table-layout","docs\u002Fsetting-up-a-table\u002Fbuilding-your-first-table-layout",{"title":390,"path":391,"stem":392,"order":33},"Importing from The Game Crafter","\u002Fdocs\u002Fsetting-up-a-table\u002Fimporting-from-the-game-crafter","docs\u002Fsetting-up-a-table\u002Fimporting-from-the-game-crafter",{"title":394,"path":395,"stem":396,"order":38},"Importing with manual uploads","\u002Fdocs\u002Fsetting-up-a-table\u002Fimporting-with-manual-uploads","docs\u002Fsetting-up-a-table\u002Fimporting-with-manual-uploads",{"title":398,"path":399,"stem":400,"order":23},"Saving a table configuration","\u002Fdocs\u002Fsetting-up-a-table\u002Fsaving-a-table-configuration","docs\u002Fsetting-up-a-table\u002Fsaving-a-table-configuration",{"id":402,"title":35,"body":403,"description":1229,"extension":1230,"meta":1231,"navigation":1232,"path":36,"seo":1233,"stem":37,"__hash__":1234},"docs\u002Fdocs\u002Fapi\u002Ferrors.md",{"type":404,"value":405,"toc":1215},"minimark",[406,410,415,430,491,495,606,610,807,811,821,931,935,938,957,960,1051,1055,1060,1070,1079,1102,1106,1111,1115,1134,1138,1143,1147,1160,1164,1169,1173,1184,1188,1193,1197,1211],[407,408,409],"p",{},"All API errors follow a consistent JSON format. The HTTP status code indicates the category of error, and the error code provides specific details.",[411,412,414],"h2",{"id":413},"error-format","Error Format",[407,416,417,418,422,423,425,426,429],{},"Every error response includes an ",[419,420,421],"code",{},"error"," object with a ",[419,424,419],{}," and ",[419,427,428],{},"message",":",[431,432,437],"pre",{"className":433,"code":434,"language":435,"meta":436,"style":436},"language-json shiki shiki-themes github-light github-dark","{\n  \"error\": {\n    \"code\": \"VALIDATION_ERROR\",\n    \"message\": \"The game name is required\"\n  }\n}\n","json","",[419,438,439,447,456,471,481,486],{"__ignoreMap":436},[440,441,443],"span",{"class":442,"line":28},"line",[440,444,446],{"class":445},"sVt8B","{\n",[440,448,449,453],{"class":442,"line":43},[440,450,452],{"class":451},"sj4cs","  \"error\"",[440,454,455],{"class":445},": {\n",[440,457,458,461,464,468],{"class":442,"line":23},[440,459,460],{"class":451},"    \"code\"",[440,462,463],{"class":445},": ",[440,465,467],{"class":466},"sZZnC","\"VALIDATION_ERROR\"",[440,469,470],{"class":445},",\n",[440,472,473,476,478],{"class":442,"line":33},[440,474,475],{"class":451},"    \"message\"",[440,477,463],{"class":445},[440,479,480],{"class":466},"\"The game name is required\"\n",[440,482,483],{"class":442,"line":38},[440,484,485],{"class":445},"  }\n",[440,487,488],{"class":442,"line":327},[440,489,490],{"class":445},"}\n",[411,492,494],{"id":493},"http-status-codes","HTTP Status Codes",[496,497,498,514],"table",{},[499,500,501],"thead",{},[502,503,504,508,511],"tr",{},[505,506,507],"th",{},"Status",[505,509,510],{},"Meaning",[505,512,513],{},"When It Occurs",[515,516,517,529,540,551,562,573,584,595],"tbody",{},[502,518,519,523,526],{},[520,521,522],"td",{},"400",[520,524,525],{},"Bad Request",[520,527,528],{},"Invalid request data (missing fields, wrong types, etc.)",[502,530,531,534,537],{},[520,532,533],{},"401",[520,535,536],{},"Unauthorized",[520,538,539],{},"Missing or invalid authentication token",[502,541,542,545,548],{},[520,543,544],{},"403",[520,546,547],{},"Forbidden",[520,549,550],{},"Token is valid but you lack permission (e.g., don't own the resource)",[502,552,553,556,559],{},[520,554,555],{},"404",[520,557,558],{},"Not Found",[520,560,561],{},"Resource does not exist (game, asset, component)",[502,563,564,567,570],{},[520,565,566],{},"409",[520,568,569],{},"Conflict",[520,571,572],{},"Action conflicts with current state (e.g., modifying a finalized revision)",[502,574,575,578,581],{},[520,576,577],{},"413",[520,579,580],{},"Payload Too Large",[520,582,583],{},"Request body exceeds size limit or file exceeds storage quota",[502,585,586,589,592],{},[520,587,588],{},"429",[520,590,591],{},"Too Many Requests",[520,593,594],{},"Rate limit exceeded",[502,596,597,600,603],{},[520,598,599],{},"502",[520,601,602],{},"Bad Gateway",[520,604,605],{},"Server error or temporary service issue",[411,607,609],{"id":608},"error-codes","Error Codes",[496,611,612,625],{},[499,613,614],{},[502,615,616,619,622],{},[505,617,618],{},"Code",[505,620,621],{},"HTTP Status",[505,623,624],{},"Description",[515,626,627,639,651,663,675,687,699,711,723,735,747,759,771,783,795],{},[502,628,629,634,636],{},[520,630,631],{},[419,632,633],{},"UNAUTHORIZED",[520,635,533],{},[520,637,638],{},"No authentication token provided",[502,640,641,646,648],{},[520,642,643],{},[419,644,645],{},"INVALID_TOKEN",[520,647,533],{},[520,649,650],{},"Token is malformed or no longer valid",[502,652,653,658,660],{},[520,654,655],{},[419,656,657],{},"VALIDATION_ERROR",[520,659,522],{},[520,661,662],{},"Request body has invalid or missing fields",[502,664,665,670,672],{},[520,666,667],{},[419,668,669],{},"GAME_NOT_FOUND",[520,671,555],{},[520,673,674],{},"Game does not exist",[502,676,677,682,684],{},[520,678,679],{},[419,680,681],{},"ASSET_NOT_FOUND",[520,683,555],{},[520,685,686],{},"Asset does not exist",[502,688,689,694,696],{},[520,690,691],{},[419,692,693],{},"COMPONENT_NOT_FOUND",[520,695,555],{},[520,697,698],{},"Component does not exist",[502,700,701,706,708],{},[520,702,703],{},[419,704,705],{},"REVISION_FINALIZED",[520,707,566],{},[520,709,710],{},"Cannot modify components or assets in a finalized revision",[502,712,713,718,720],{},[520,714,715],{},[419,716,717],{},"PERMISSION_DENIED",[520,719,544],{},[520,721,722],{},"You do not own this resource",[502,724,725,730,732],{},[520,726,727],{},[419,728,729],{},"RATE_LIMITED",[520,731,588],{},[520,733,734],{},"Too many requests in this time window",[502,736,737,742,744],{},[520,738,739],{},[419,740,741],{},"STORAGE_LIMIT_EXCEEDED",[520,743,577],{},[520,745,746],{},"Your account has reached storage quota",[502,748,749,754,756],{},[520,750,751],{},[419,752,753],{},"DERIVATION_FAILED",[520,755,522],{},[520,757,758],{},"Asset image processing failed (invalid image, corrupted file, etc.)",[502,760,761,766,768],{},[520,762,763],{},[419,764,765],{},"INVALID_CODE",[520,767,522],{},[520,769,770],{},"Authorization code is invalid or malformed",[502,772,773,778,780],{},[520,774,775],{},[419,776,777],{},"CODE_EXPIRED",[520,779,522],{},[520,781,782],{},"Authorization code has expired (valid for 10 minutes)",[502,784,785,790,792],{},[520,786,787],{},[419,788,789],{},"REDIRECT_URI_MISMATCH",[520,791,522],{},[520,793,794],{},"Redirect URI does not match registered value",[502,796,797,802,804],{},[520,798,799],{},[419,800,801],{},"CLIENT_ID_MISMATCH",[520,803,522],{},[520,805,806],{},"Client ID is invalid or doesn't match the code",[411,808,810],{"id":809},"rate-limits","Rate Limits",[407,812,813,814,816,817,820],{},"Rate limits protect the service from abuse. When you exceed a limit, you receive a 429 response with ",[419,815,729],{}," code. The response includes a ",[419,818,819],{},"Retry-After"," header (in seconds) telling you when to retry.",[496,822,823,839],{},[499,824,825],{},[502,826,827,830,833,836],{},[505,828,829],{},"Endpoint",[505,831,832],{},"Limit",[505,834,835],{},"Window",[505,837,838],{},"Notes",[515,840,841,857,872,886,901,916],{},[502,842,843,848,851,854],{},[520,844,845],{},[419,846,847],{},"POST \u002Ftoken",[520,849,850],{},"5",[520,852,853],{},"per minute",[520,855,856],{},"Per user, across all apps",[502,858,859,864,867,869],{},[520,860,861],{},[419,862,863],{},"POST \u002Fpresign",[520,865,866],{},"60",[520,868,853],{},[520,870,871],{},"Asset uploads",[502,873,874,879,881,883],{},[520,875,876],{},[419,877,878],{},"POST \u002Fupload-complete",[520,880,866],{},[520,882,853],{},[520,884,885],{},"Asset completion",[502,887,888,893,896,898],{},[520,889,890],{},[419,891,892],{},"POST \u002Fcomponents",[520,894,895],{},"120",[520,897,853],{},[520,899,900],{},"Single component create",[502,902,903,908,911,913],{},[520,904,905],{},[419,906,907],{},"POST \u002Fcomponents\u002Fbatch",[520,909,910],{},"10",[520,912,853],{},[520,914,915],{},"Batch create requests",[502,917,918,923,925,928],{},[520,919,920],{},[419,921,922],{},"POST \u002Fgames",[520,924,910],{},[520,926,927],{},"per hour",[520,929,930],{},"Game creation",[411,932,934],{"id":933},"handling-rate-limits","Handling Rate Limits",[407,936,937],{},"When you receive a 429 response:",[939,940,941,948,951,954],"ol",{},[942,943,944,945,947],"li",{},"Check the ",[419,946,819],{}," header for the number of seconds to wait",[942,949,950],{},"Wait that amount of time",[942,952,953],{},"Retry your request",[942,955,956],{},"Implement exponential backoff for robustness",[407,958,959],{},"Example:",[431,961,965],{"className":962,"code":963,"language":964,"meta":436,"style":436},"language-javascript shiki shiki-themes github-light github-dark","async function makeRequestWithRetry(url, options, maxRetries = 3) {\n  for (let attempt = 0; attempt \u003C maxRetries; attempt++) {\n    const response = await fetch(url, options);\n\n    if (response.status === 429) {\n      const retryAfter = parseInt(response.headers.get('Retry-After')) || 5;\n      console.log(`Rate limited. Waiting ${retryAfter} seconds...`);\n      await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));\n      continue;\n    }\n\n    return response;\n  }\n\n  throw new Error('Max retries exceeded');\n}\n","javascript",[419,966,967,972,977,982,988,993,998,1003,1008,1014,1019,1024,1030,1035,1040,1046],{"__ignoreMap":436},[440,968,969],{"class":442,"line":28},[440,970,971],{},"async function makeRequestWithRetry(url, options, maxRetries = 3) {\n",[440,973,974],{"class":442,"line":43},[440,975,976],{},"  for (let attempt = 0; attempt \u003C maxRetries; attempt++) {\n",[440,978,979],{"class":442,"line":23},[440,980,981],{},"    const response = await fetch(url, options);\n",[440,983,984],{"class":442,"line":33},[440,985,987],{"emptyLinePlaceholder":986},true,"\n",[440,989,990],{"class":442,"line":38},[440,991,992],{},"    if (response.status === 429) {\n",[440,994,995],{"class":442,"line":327},[440,996,997],{},"      const retryAfter = parseInt(response.headers.get('Retry-After')) || 5;\n",[440,999,1000],{"class":442,"line":18},[440,1001,1002],{},"      console.log(`Rate limited. Waiting ${retryAfter} seconds...`);\n",[440,1004,1005],{"class":442,"line":340},[440,1006,1007],{},"      await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));\n",[440,1009,1011],{"class":442,"line":1010},9,[440,1012,1013],{},"      continue;\n",[440,1015,1016],{"class":442,"line":314},[440,1017,1018],{},"    }\n",[440,1020,1022],{"class":442,"line":1021},11,[440,1023,987],{"emptyLinePlaceholder":986},[440,1025,1027],{"class":442,"line":1026},12,[440,1028,1029],{},"    return response;\n",[440,1031,1033],{"class":442,"line":1032},13,[440,1034,485],{},[440,1036,1038],{"class":442,"line":1037},14,[440,1039,987],{"emptyLinePlaceholder":986},[440,1041,1043],{"class":442,"line":1042},15,[440,1044,1045],{},"  throw new Error('Max retries exceeded');\n",[440,1047,1049],{"class":442,"line":1048},16,[440,1050,490],{},[411,1052,1054],{"id":1053},"common-errors-and-solutions","Common Errors and Solutions",[1056,1057,1059],"h3",{"id":1058},"validation_error-on-game-creation","VALIDATION_ERROR on game creation",[407,1061,1062,1066,1067],{},[1063,1064,1065],"strong",{},"Error:"," Missing required field ",[419,1068,1069],{},"name",[407,1071,1072,1075,1076,1078],{},[1063,1073,1074],{},"Solution:"," Ensure you include the ",[419,1077,1069],{}," field in your request:",[431,1080,1082],{"className":433,"code":1081,"language":435,"meta":436,"style":436},"{\n  \"name\": \"My Game\"\n}\n",[419,1083,1084,1088,1098],{"__ignoreMap":436},[440,1085,1086],{"class":442,"line":28},[440,1087,446],{"class":445},[440,1089,1090,1093,1095],{"class":442,"line":43},[440,1091,1092],{"class":451},"  \"name\"",[440,1094,463],{"class":445},[440,1096,1097],{"class":466},"\"My Game\"\n",[440,1099,1100],{"class":442,"line":23},[440,1101,490],{"class":445},[1056,1103,1105],{"id":1104},"invalid_token-on-api-request","INVALID_TOKEN on API request",[407,1107,1108,1110],{},[1063,1109,1065],{}," Your token is invalid or expired",[407,1112,1113],{},[1063,1114,1074],{},[939,1116,1117,1124,1131],{},[942,1118,1119,1120,1123],{},"Check that your token is correctly formatted (starts with ",[419,1121,1122],{},"pp_",")",[942,1125,1126,1127,1130],{},"Verify you're including it in the ",[419,1128,1129],{},"Authorization: Bearer"," header",[942,1132,1133],{},"If the user revoked the token in Settings, redirect them to authorize again",[1056,1135,1137],{"id":1136},"rate_limited-on-batch-component-create","RATE_LIMITED on batch component create",[407,1139,1140,1142],{},[1063,1141,1065],{}," Too many requests; maximum 10 batch requests per minute",[407,1144,1145],{},[1063,1146,1074],{},[939,1148,1149,1154,1157],{},[942,1150,1151,1152],{},"Wait the number of seconds specified in ",[419,1153,819],{},[942,1155,1156],{},"Reduce request frequency or batch more components per request (up to 200)",[942,1158,1159],{},"Spread requests over longer time windows",[1056,1161,1163],{"id":1162},"storage_limit_exceeded-on-asset-upload","STORAGE_LIMIT_EXCEEDED on asset upload",[407,1165,1166,1168],{},[1063,1167,1065],{}," Account has reached storage quota",[407,1170,1171],{},[1063,1172,1074],{},[939,1174,1175,1178,1181],{},[942,1176,1177],{},"Delete unused assets or games",[942,1179,1180],{},"Contact support to request a higher quota",[942,1182,1183],{},"Compress or optimize images before uploading",[1056,1185,1187],{"id":1186},"derivation_failed-on-image-processing","DERIVATION_FAILED on image processing",[407,1189,1190,1192],{},[1063,1191,1065],{}," Image could not be processed",[407,1194,1195],{},[1063,1196,1074],{},[939,1198,1199,1202,1205,1208],{},[942,1200,1201],{},"Verify the image is a valid PNG or JPEG",[942,1203,1204],{},"Check that the file is not corrupted",[942,1206,1207],{},"Ensure widthPx and heightPx values match the actual image dimensions",[942,1209,1210],{},"Try re-uploading the asset",[1212,1213,1214],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":436,"searchDepth":43,"depth":43,"links":1216},[1217,1218,1219,1220,1221,1222],{"id":413,"depth":43,"text":414},{"id":493,"depth":43,"text":494},{"id":608,"depth":43,"text":609},{"id":809,"depth":43,"text":810},{"id":933,"depth":43,"text":934},{"id":1053,"depth":43,"text":1054,"children":1223},[1224,1225,1226,1227,1228],{"id":1058,"depth":23,"text":1059},{"id":1104,"depth":23,"text":1105},{"id":1136,"depth":23,"text":1137},{"id":1162,"depth":23,"text":1163},{"id":1186,"depth":23,"text":1187},"Error codes, HTTP status codes, and rate limits for the Playtest Parlor API.","md",{},{"order":38},{"title":35,"description":1229},"y5FlP2sNJtH-HtKlW5IKizvIoj6JJqzUt4NKwl3LjSg",1778263810621]