{"openapi":"3.1.0","info":{"title":"Sandlotball Lineup API","version":"1.0.0","description":"Free baseball and softball lineup generation. No authentication, account, or email required. Requests are processed without saving a roster or game. Batting order follows input order. Use notebook as a JSON backup to edit and print on Sandlotball."},"servers":[{"url":"https://sandlotball.com"}],"paths":{"/api/v1/lineups/generate":{"post":{"operationId":"generateLineup","summary":"Generate a fair playing-time lineup","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"players":{"minItems":1,"maxItems":20,"type":"array","items":{"anyOf":[{"type":"string","minLength":1,"maxLength":60,"pattern":"^[^\\u0000-\\u001f\\u007f]+$"},{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60,"pattern":"^[^\\u0000-\\u001f\\u007f]+$"},"available":{"default":true,"type":"boolean"},"canPitch":{"default":true,"type":"boolean"},"canCatch":{"default":true,"type":"boolean"}},"required":["name"],"additionalProperties":false}]}},"title":{"default":"Game-day lineup","type":"string","minLength":1,"maxLength":100},"date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"innings":{"default":6,"type":"integer","minimum":1,"maximum":9},"fielders":{"default":9,"anyOf":[{"type":"number","const":9},{"type":"number","const":10}]},"batAround":{"default":true,"type":"boolean"}},"required":["players"],"additionalProperties":false},"example":{"players":["Alex","Blake","Casey","Drew","Emerson","Finley","Jordan","Kai","Logan","Morgan","Riley","Sam"],"innings":6,"fielders":9}}}},"responses":{"200":{"description":"Lineup with spreadsheet rows, CSV, planned innings, warnings, and importable notebook.","content":{"application/json":{"schema":{"type":"object","required":["notebook","rows","csv","totals","warnings","generatorUrl","importInstructions","limitations"],"properties":{"notebook":{"type":"object","description":"Save this entire object as a .json backup for Import backup on /lineup."},"rows":{"type":"array","items":{"type":"array","items":{"type":["string","number"]}}},"csv":{"type":"string"},"totals":{"type":"array","items":{"type":"object"}},"warnings":{"type":"array","items":{"type":"string"}},"generatorUrl":{"type":"string","format":"uri"},"importInstructions":{"type":"string"},"limitations":{"type":"array","items":{"type":"string"}}}}}}},"400":{"description":"Invalid JSON."},"413":{"description":"Body exceeds 16 KiB."},"415":{"description":"Content-Type must be application/json."},"422":{"description":"Invalid roster or game settings."}}}}}}