{"openapi":"3.1.0","info":{"title":"Suggestion Box API","description":"Public reads are anonymous. Native sessions require CSRF on mutations. Project Bearer credentials are scoped and intended only for trusted servers.","version":"1.0.0","license":{"name":"MIT","identifier":"MIT"}},"paths":{"/healthz":{"get":{"tags":["Operations"],"summary":"Health","operationId":"health_healthz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/readyz":{"get":{"tags":["Operations"],"summary":"Ready","operationId":"ready_readyz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/setup":{"get":{"tags":["Authentication"],"summary":"Setup State","operationId":"setup_state_api_v1_setup_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetupOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"No account required. Initial setup requires the deployment setup token; signup always creates a participant.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."},"post":{"tags":["Authentication"],"summary":"Setup","description":"Requires the deployment setup token. Atomically creates the first administrator and permanently disables setup.\n\nNo account required. Initial setup requires the deployment setup token; signup always creates a participant.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets.","operationId":"setup_api_v1_setup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetupInput"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/auth/register":{"post":{"tags":["Authentication"],"summary":"Register","description":"Creates a participant. Email is a login identifier, not verified.\n\nNo account required. Initial setup requires the deployment setup token; signup always creates a participant.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets.","operationId":"register_api_v1_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountInput"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/auth/login":{"post":{"tags":["Authentication"],"summary":"Login","operationId":"login_api_v1_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginInput"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"No account required. Initial setup requires the deployment setup token; signup always creates a participant.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."}},"/api/v1/auth/me":{"get":{"tags":["Authentication"],"summary":"Me","operationId":"me_api_v1_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"description":"Native session required.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."}},"/api/v1/auth/logout":{"post":{"tags":["Authentication"],"summary":"Logout","operationId":"logout_api_v1_auth_logout_post","responses":{"204":{"description":"Successful Response"},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"description":"Native session required.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."}},"/api/v1/auth/password":{"post":{"tags":["Authentication"],"summary":"Password","description":"Changes the password and revokes every existing session, including this one.\n\nNative session required.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets.","operationId":"password_api_v1_auth_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordInput"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}]}},"/api/v1/admin/accounts":{"post":{"tags":["Administration"],"summary":"Add Admin","operationId":"add_admin_api_v1_admin_accounts_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountInput"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"description":"Native administrator session only. Project credentials cannot administer accounts, create projects, or manage credentials.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."}},"/api/v1/admin/dashboard":{"get":{"tags":["Administration"],"summary":"Dashboard","operationId":"dashboard_api_v1_admin_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"description":"Native administrator session only. Project credentials cannot administer accounts, create projects, or manage credentials.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."}},"/api/v1/projects":{"get":{"tags":["Projects"],"summary":"Projects","operationId":"projects_api_v1_projects_get","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]},{}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":1000000,"minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageOutput_ProjectOutput_"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"Anonymous public read. When supplied, a project credential requires read or manage. Private requests require the creator or management access; anonymous access is concealed with 404.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."},"post":{"tags":["Projects"],"summary":"Create Project","operationId":"create_project_api_v1_projects_post","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceInput"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"Native administrator session only. Project credentials cannot administer accounts, create projects, or manage credentials.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."}},"/api/v1/projects/{project}":{"get":{"tags":["Projects"],"summary":"Project","operationId":"project_api_v1_projects__project__get","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]},{}],"parameters":[{"name":"project","in":"path","required":true,"schema":{"type":"string","title":"Project"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"Anonymous public read. When supplied, a project credential requires read or manage. Private requests require the creator or management access; anonymous access is concealed with 404.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."},"patch":{"tags":["Projects"],"summary":"Update Project","operationId":"update_project_api_v1_projects__project__patch","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"parameters":[{"name":"project","in":"path","required":true,"schema":{"type":"string","title":"Project"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceEdit"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"Native administrator session only. Project credentials cannot administer accounts, create projects, or manage credentials.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."}},"/api/v1/projects/{project}/boards":{"get":{"tags":["Boards"],"summary":"Boards","operationId":"boards_api_v1_projects__project__boards_get","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]},{}],"parameters":[{"name":"project","in":"path","required":true,"schema":{"type":"string","title":"Project"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":1000000,"minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageOutput_BoardOutput_"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"Anonymous public read. When supplied, a project credential requires read or manage. Private requests require the creator or management access; anonymous access is concealed with 404.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."},"post":{"tags":["Boards"],"summary":"Create Board","operationId":"create_board_api_v1_projects__project__boards_post","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"parameters":[{"name":"project","in":"path","required":true,"schema":{"type":"string","title":"Project"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceInput"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"Native administrator or project credential with manage permission. Resources must belong to that credential’s project.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."}},"/api/v1/boards/{board}":{"get":{"tags":["Boards"],"summary":"Board","operationId":"board_api_v1_boards__board__get","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]},{}],"parameters":[{"name":"board","in":"path","required":true,"schema":{"type":"string","title":"Board"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"Anonymous public read. When supplied, a project credential requires read or manage. Private requests require the creator or management access; anonymous access is concealed with 404.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."},"patch":{"tags":["Boards"],"summary":"Update Board","operationId":"update_board_api_v1_boards__board__patch","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"parameters":[{"name":"board","in":"path","required":true,"schema":{"type":"string","title":"Board"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceEdit"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"Native administrator or project credential with manage permission. Resources must belong to that credential’s project.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."}},"/api/v1/boards/{board}/requests":{"get":{"tags":["Requests"],"summary":"Board Requests","operationId":"board_requests_api_v1_boards__board__requests_get","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]},{}],"parameters":[{"name":"board","in":"path","required":true,"schema":{"type":"string","title":"Board"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"enum":["under_consideration","planned","in_progress","shipped"],"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"order","in":"query","required":false,"schema":{"enum":["newest","popular"],"type":"string","default":"newest","title":"Order"}},{"name":"external_user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":512},{"type":"null"}],"description":"Opaque project-scoped participant ID. Requires a participate credential; never a login credential.","title":"External User Id"},"description":"Opaque project-scoped participant ID. Requires a participate credential; never a login credential."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":1000000,"minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageOutput_RequestOutput_"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"Anonymous public read. When supplied, a project credential requires read or manage. Private requests require the creator or management access; anonymous access is concealed with 404.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."},"post":{"tags":["Requests"],"summary":"Submit","operationId":"submit_api_v1_boards__board__requests_post","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"parameters":[{"name":"board","in":"path","required":true,"schema":{"type":"string","title":"Board"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Submission"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"Native participant/admin session, or project credential with participate plus external_user_id. No browser-supplied internal user IDs are accepted.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."}},"/api/v1/me/requests":{"get":{"tags":["Requests"],"summary":"Own Requests","description":"Native account submissions across projects. Project credentials require external_user_id and participate; resolution is automatic.\n\nNative participant/admin session, or project credential with participate plus external_user_id. No browser-supplied internal user IDs are accepted.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets.","operationId":"own_requests_api_v1_me_requests_get","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"parameters":[{"name":"external_user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":512},{"type":"null"}],"description":"Opaque project-scoped participant ID. Requires a participate credential; never a login credential.","title":"External User Id"},"description":"Opaque project-scoped participant ID. Requires a participate credential; never a login credential."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":1000000,"minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageOutput_RequestOutput_"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/moderation":{"get":{"tags":["Moderation"],"summary":"Moderation","description":"Installation queue for admins; project queue for manage credentials. Pending by default.\n\nNative administrator or project credential with manage permission. Resources must belong to that credential’s project.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets.","operationId":"moderation_api_v1_moderation_get","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"parameters":[{"name":"project_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"}},{"name":"state","in":"query","required":false,"schema":{"enum":["pending","rejected","accepted"],"type":"string","default":"pending","title":"State"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":1000000,"minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageOutput_RequestOutput_"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/requests/{request_id}":{"get":{"tags":["Requests"],"summary":"Detail","operationId":"detail_api_v1_requests__request_id__get","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]},{}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}},{"name":"external_user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":512},{"type":"null"}],"description":"Opaque project-scoped participant ID. Requires a participate credential; never a login credential.","title":"External User Id"},"description":"Opaque project-scoped participant ID. Requires a participate credential; never a login credential."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"Anonymous public read. When supplied, a project credential requires read or manage. Private requests require the creator or management access; anonymous access is concealed with 404.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."},"patch":{"tags":["Requests"],"summary":"Edit","operationId":"edit_api_v1_requests__request_id__patch","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorEdit"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"Native participant/admin session, or project credential with participate plus external_user_id. No browser-supplied internal user IDs are accepted.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."},"delete":{"tags":["Requests"],"summary":"Delete","operationId":"delete_api_v1_requests__request_id__delete","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}},{"name":"version","in":"query","required":true,"schema":{"type":"integer","minimum":1,"title":"Version"}},{"name":"external_user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":512},{"type":"null"}],"description":"Opaque project-scoped participant ID. Requires a participate credential; never a login credential.","title":"External User Id"},"description":"Opaque project-scoped participant ID. Requires a participate credential; never a login credential."}],"responses":{"204":{"description":"Successful Response"},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"Native participant/admin session, or project credential with participate plus external_user_id. No browser-supplied internal user IDs are accepted.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."}},"/api/v1/requests/{request_id}/content":{"patch":{"tags":["Moderation"],"summary":"Admin Edit","operationId":"admin_edit_api_v1_requests__request_id__content_patch","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminEdit"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"Native administrator or project credential with manage permission. Resources must belong to that credential’s project.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."}},"/api/v1/requests/{request_id}/accept":{"post":{"tags":["Moderation"],"summary":"Accept","operationId":"accept_api_v1_requests__request_id__accept_post","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"Native administrator or project credential with manage permission. Resources must belong to that credential’s project.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."}},"/api/v1/requests/{request_id}/reject":{"post":{"tags":["Moderation"],"summary":"Reject","operationId":"reject_api_v1_requests__request_id__reject_post","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Rejection"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"Native administrator or project credential with manage permission. Resources must belong to that credential’s project.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."}},"/api/v1/requests/{request_id}/status":{"put":{"tags":["Moderation"],"summary":"Status","operationId":"status_api_v1_requests__request_id__status_put","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Lifecycle"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"Native administrator or project credential with manage permission. Resources must belong to that credential’s project.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."}},"/api/v1/requests/{request_id}/vote":{"put":{"tags":["Voting"],"summary":"Vote","description":"Idempotently sets the acting participant vote; only accepted requests are voteable.\n\nNative participant/admin session, or project credential with participate plus external_user_id. No browser-supplied internal user IDs are accepted.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets.","operationId":"vote_api_v1_requests__request_id__vote_put","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Vote"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoteOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"get":{"tags":["Voting"],"summary":"Vote State","operationId":"vote_state_api_v1_requests__request_id__vote_get","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}},{"name":"external_user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":512},{"type":"null"}],"description":"Opaque project-scoped participant ID. Requires a participate credential; never a login credential.","title":"External User Id"},"description":"Opaque project-scoped participant ID. Requires a participate credential; never a login credential."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoteOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"Native participant/admin session, or project credential with participate plus external_user_id. No browser-supplied internal user IDs are accepted.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."}},"/api/v1/requests/{request_id}/history":{"get":{"tags":["Requests"],"summary":"History","description":"Public reads expose acceptance and status history only. Owners/managers see private history.\n\nAnonymous public read. When supplied, a project credential requires read or manage. Private requests require the creator or management access; anonymous access is concealed with 404.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets.","operationId":"history_api_v1_requests__request_id__history_get","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]},{}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}},{"name":"external_user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":512},{"type":"null"}],"description":"Opaque project-scoped participant ID. Requires a participate credential; never a login credential.","title":"External User Id"},"description":"Opaque project-scoped participant ID. Requires a participate credential; never a login credential."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":1000000,"minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageOutput_EventOutput_"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/requests/{request_id}/audience":{"get":{"tags":["Voting"],"summary":"Audience","description":"Requires audience:read or admin. Current creator and voters, deduplicated; not an event-time snapshot.\n\nNative administrator or project credential with audience:read. Creator and current voters are deduplicated.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets.","operationId":"audience_api_v1_requests__request_id__audience_get","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":1000000,"minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageOutput_IdentityOutput_"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/projects/{project}/keys":{"get":{"tags":["Credentials"],"summary":"Keys","operationId":"keys_api_v1_projects__project__keys_get","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"parameters":[{"name":"project","in":"path","required":true,"schema":{"type":"string","title":"Project"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":1000000,"minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageOutput_KeyOutput_"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"Native administrator session only. Project credentials cannot administer accounts, create projects, or manage credentials.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."},"post":{"tags":["Credentials"],"summary":"Create Key","description":"Admin only. Secret is shown once; store on a trusted backend.\n\nNative administrator session only. Project credentials cannot administer accounts, create projects, or manage credentials.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets.","operationId":"create_key_api_v1_projects__project__keys_post","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"parameters":[{"name":"project","in":"path","required":true,"schema":{"type":"string","title":"Project"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyInput"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewKeyOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/projects/{project}/keys/{key_id}":{"delete":{"tags":["Credentials"],"summary":"Revoke Key","operationId":"revoke_key_api_v1_projects__project__keys__key_id__delete","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"parameters":[{"name":"project","in":"path","required":true,"schema":{"type":"string","title":"Project"}},{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"204":{"description":"Successful Response"},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"Native administrator session only. Project credentials cannot administer accounts, create projects, or manage credentials.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."}},"/api/v1/projects/{project}/webhook":{"get":{"tags":["Webhooks"],"summary":"Webhook","operationId":"webhook_api_v1_projects__project__webhook_get","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"parameters":[{"name":"project","in":"path","required":true,"schema":{"type":"string","title":"Project"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"Native administrator or project credential with manage permission. Resources must belong to that credential’s project.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."},"put":{"tags":["Webhooks"],"summary":"Update Webhook","description":"Creates or rotates a secret, returned only on creation/rotation. Existing jobs retain their encrypted signing snapshot.\n\nNative administrator or project credential with manage permission. Resources must belong to that credential’s project.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets.","operationId":"update_webhook_api_v1_projects__project__webhook_put","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"parameters":[{"name":"project","in":"path","required":true,"schema":{"type":"string","title":"Project"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/projects/{project}/webhook/test":{"post":{"tags":["Webhooks"],"summary":"Test Webhook","operationId":"test_webhook_api_v1_projects__project__webhook_test_post","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"parameters":[{"name":"project","in":"path","required":true,"schema":{"type":"string","title":"Project"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"Native administrator or project credential with manage permission. Resources must belong to that credential’s project.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."}},"/api/v1/projects/{project}/deliveries":{"get":{"tags":["Webhooks"],"summary":"Deliveries","operationId":"deliveries_api_v1_projects__project__deliveries_get","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"parameters":[{"name":"project","in":"path","required":true,"schema":{"type":"string","title":"Project"}},{"name":"failed","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Failed"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":1000000,"minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageOutput_DeliveryOutput_"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"Native administrator or project credential with manage permission. Resources must belong to that credential’s project.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."}},"/api/v1/projects/{project}/deliveries/{delivery_id}":{"get":{"tags":["Webhooks"],"summary":"Delivery","operationId":"delivery_api_v1_projects__project__deliveries__delivery_id__get","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"parameters":[{"name":"project","in":"path","required":true,"schema":{"type":"string","title":"Project"}},{"name":"delivery_id","in":"path","required":true,"schema":{"type":"string","title":"Delivery Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliveryOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"Native administrator or project credential with manage permission. Resources must belong to that credential’s project.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."}},"/api/v1/projects/{project}/deliveries/{delivery_id}/retry":{"post":{"tags":["Webhooks"],"summary":"Retry Delivery","operationId":"retry_delivery_api_v1_projects__project__deliveries__delivery_id__retry_post","security":[{"APIKeyHeader":[]},{"APIKeyCookie":[]}],"parameters":[{"name":"project","in":"path","required":true,"schema":{"type":"string","title":"Project"}},{"name":"delivery_id","in":"path","required":true,"schema":{"type":"string","title":"Delivery Id"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RetryOutput"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Insufficient permission or CSRF failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Missing or concealed resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Stale version or invalid state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Body exceeds 96 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"description":"Native administrator or project credential with manage permission. Resources must belong to that credential’s project.\n\nCookie-authenticated mutations require X-CSRF-Token and Origin equal to PUBLIC_BASE_URL. Errors never echo raw secrets."}}},"components":{"schemas":{"AccountInput":{"properties":{"email":{"type":"string","maxLength":254,"minLength":3,"title":"Email"},"password":{"type":"string","maxLength":128,"minLength":12,"title":"Password"},"display_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Display Name"}},"additionalProperties":false,"type":"object","required":["email","password"],"title":"AccountInput"},"AdminEdit":{"properties":{"title":{"type":"string","maxLength":200,"minLength":1,"title":"Title"},"description":{"type":"string","maxLength":20000,"title":"Description","default":""},"version":{"type":"integer","minimum":1.0,"title":"Version"}},"additionalProperties":false,"type":"object","required":["title","version"],"title":"AdminEdit"},"BoardOutput":{"properties":{"id":{"type":"string","title":"Id"},"identifier":{"type":"string","title":"Identifier"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"},"version":{"type":"integer","title":"Version"},"project_id":{"type":"string","title":"Project Id"}},"type":"object","required":["id","identifier","name","description","created_at","updated_at","version","project_id"],"title":"BoardOutput"},"CreatorEdit":{"properties":{"title":{"type":"string","maxLength":200,"minLength":1,"title":"Title"},"description":{"type":"string","maxLength":20000,"title":"Description","default":""},"external_user_id":{"anyOf":[{"type":"string","maxLength":512,"minLength":1},{"type":"null"}],"title":"External User Id"},"version":{"type":"integer","minimum":1.0,"title":"Version"}},"additionalProperties":false,"type":"object","required":["title","version"],"title":"CreatorEdit"},"DashboardOutput":{"properties":{"pending_requests":{"type":"integer","title":"Pending Requests"},"failed_deliveries":{"type":"integer","title":"Failed Deliveries"}},"type":"object","required":["pending_requests","failed_deliveries"],"title":"DashboardOutput"},"DeliveryOutput":{"properties":{"id":{"type":"string","title":"Id"},"event_id":{"type":"string","title":"Event Id"},"destination":{"type":"string","title":"Destination"},"state":{"type":"string","enum":["queued","delivering","succeeded","failed"],"title":"State"},"attempt_count":{"type":"integer","title":"Attempt Count"},"next_attempt_at":{"type":"string","title":"Next Attempt At"},"last_attempt_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Attempt At"},"last_http_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Http Status"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"delivered_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delivered At"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"payload":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Payload"}},"type":"object","required":["id","event_id","destination","state","attempt_count","next_attempt_at","last_attempt_at","last_http_status","error","delivered_at"],"title":"DeliveryOutput"},"EventOutput":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","title":"Type"},"occurred_at":{"type":"string","title":"Occurred At"},"schema_version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Schema Version"},"project":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Project"},"board":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Board"},"request_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Id"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"request":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Request"},"previous":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Previous"},"actor":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Actor"},"creator":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Creator"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"previous_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous Status"}},"type":"object","required":["id","type","occurred_at"],"title":"EventOutput"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IdentityOutput":{"properties":{"user_id":{"type":"string","title":"User Id"},"external_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External User Id"},"creator":{"type":"boolean","title":"Creator"}},"type":"object","required":["user_id","external_user_id","creator"],"title":"IdentityOutput"},"KeyInput":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"permissions":{"items":{"type":"string","enum":["read","participate","audience:read","manage"]},"type":"array","maxItems":4,"minItems":1,"title":"Permissions"}},"additionalProperties":false,"type":"object","required":["name","permissions"],"title":"KeyInput"},"KeyOutput":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"prefix":{"type":"string","title":"Prefix"},"permissions":{"items":{"type":"string","enum":["read","participate","audience:read","manage"]},"type":"array","title":"Permissions"},"created_at":{"type":"string","title":"Created At"},"revoked_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Revoked At"}},"type":"object","required":["id","name","prefix","permissions","created_at","revoked_at"],"title":"KeyOutput"},"Lifecycle":{"properties":{"version":{"type":"integer","minimum":1.0,"title":"Version"},"status":{"type":"string","enum":["under_consideration","planned","in_progress","shipped"],"title":"Status"}},"additionalProperties":false,"type":"object","required":["version","status"],"title":"Lifecycle"},"LoginInput":{"properties":{"email":{"type":"string","maxLength":254,"minLength":3,"title":"Email"},"password":{"type":"string","maxLength":128,"minLength":1,"title":"Password"}},"additionalProperties":false,"type":"object","required":["email","password"],"title":"LoginInput"},"NewKeyOutput":{"properties":{"id":{"type":"string","title":"Id"},"secret":{"type":"string","title":"Secret"},"prefix":{"type":"string","title":"Prefix"},"permissions":{"items":{"type":"string","enum":["read","participate","audience:read","manage"]},"type":"array","title":"Permissions"}},"type":"object","required":["id","secret","prefix","permissions"],"title":"NewKeyOutput"},"PageOutput_BoardOutput_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BoardOutput"},"type":"array","title":"Items"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["items","limit","offset","has_more"],"title":"PageOutput[BoardOutput]"},"PageOutput_DeliveryOutput_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeliveryOutput"},"type":"array","title":"Items"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["items","limit","offset","has_more"],"title":"PageOutput[DeliveryOutput]"},"PageOutput_EventOutput_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/EventOutput"},"type":"array","title":"Items"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["items","limit","offset","has_more"],"title":"PageOutput[EventOutput]"},"PageOutput_IdentityOutput_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/IdentityOutput"},"type":"array","title":"Items"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["items","limit","offset","has_more"],"title":"PageOutput[IdentityOutput]"},"PageOutput_KeyOutput_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/KeyOutput"},"type":"array","title":"Items"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["items","limit","offset","has_more"],"title":"PageOutput[KeyOutput]"},"PageOutput_ProjectOutput_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ProjectOutput"},"type":"array","title":"Items"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["items","limit","offset","has_more"],"title":"PageOutput[ProjectOutput]"},"PageOutput_RequestOutput_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RequestOutput"},"type":"array","title":"Items"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["items","limit","offset","has_more"],"title":"PageOutput[RequestOutput]"},"PasswordInput":{"properties":{"current_password":{"type":"string","maxLength":128,"minLength":1,"title":"Current Password"},"new_password":{"type":"string","maxLength":128,"minLength":12,"title":"New Password"}},"additionalProperties":false,"type":"object","required":["current_password","new_password"],"title":"PasswordInput"},"ProjectOutput":{"properties":{"id":{"type":"string","title":"Id"},"identifier":{"type":"string","title":"Identifier"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"},"version":{"type":"integer","title":"Version"}},"type":"object","required":["id","identifier","name","description","created_at","updated_at","version"],"title":"ProjectOutput"},"Rejection":{"properties":{"version":{"type":"integer","minimum":1.0,"title":"Version"},"reason":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Reason"}},"additionalProperties":false,"type":"object","required":["version"],"title":"Rejection"},"RequestOutput":{"properties":{"id":{"type":"string","title":"Id"},"board_id":{"type":"string","title":"Board Id"},"project_id":{"type":"string","title":"Project Id"},"project_identifier":{"type":"string","title":"Project Identifier"},"project_name":{"type":"string","title":"Project Name"},"board_name":{"type":"string","title":"Board Name"},"board_identifier":{"type":"string","title":"Board Identifier"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description"},"status":{"anyOf":[{"type":"string","enum":["under_consideration","planned","in_progress","shipped"]},{"type":"null"}],"title":"Status"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"},"version":{"type":"integer","title":"Version"},"vote_count":{"type":"integer","title":"Vote Count"},"voted":{"type":"boolean","title":"Voted"},"creator_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creator Name"},"owned":{"type":"boolean","title":"Owned"},"can_edit":{"type":"boolean","title":"Can Edit"},"moderation":{"anyOf":[{"type":"string","enum":["pending","accepted","rejected"]},{"type":"null"}],"title":"Moderation"},"rejection_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rejection Reason"},"accepted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accepted At"}},"type":"object","required":["id","board_id","project_id","project_identifier","project_name","board_name","board_identifier","title","description","status","created_at","updated_at","version","vote_count","voted","creator_name","owned","can_edit"],"title":"RequestOutput"},"ResourceEdit":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"description":{"type":"string","maxLength":20000,"title":"Description","default":""},"version":{"type":"integer","minimum":1.0,"title":"Version"}},"additionalProperties":false,"type":"object","required":["name","version"],"title":"ResourceEdit"},"ResourceInput":{"properties":{"identifier":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,59}$","title":"Identifier"},"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"description":{"type":"string","maxLength":20000,"title":"Description","default":""}},"additionalProperties":false,"type":"object","required":["identifier","name"],"title":"ResourceInput"},"RetryOutput":{"properties":{"queued":{"type":"boolean","title":"Queued"}},"type":"object","required":["queued"],"title":"RetryOutput"},"SessionOutput":{"properties":{"user":{"$ref":"#/components/schemas/UserOutput"},"csrf_token":{"type":"string","title":"Csrf Token"}},"type":"object","required":["user","csrf_token"],"title":"SessionOutput"},"SetupInput":{"properties":{"email":{"type":"string","maxLength":254,"minLength":3,"title":"Email"},"password":{"type":"string","maxLength":128,"minLength":12,"title":"Password"},"display_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Display Name"},"setup_token":{"type":"string","maxLength":256,"minLength":24,"title":"Setup Token"}},"additionalProperties":false,"type":"object","required":["email","password","setup_token"],"title":"SetupInput"},"SetupOutput":{"properties":{"available":{"type":"boolean","title":"Available"},"registration_enabled":{"type":"boolean","title":"Registration Enabled"}},"type":"object","required":["available","registration_enabled"],"title":"SetupOutput"},"Submission":{"properties":{"title":{"type":"string","maxLength":200,"minLength":1,"title":"Title"},"description":{"type":"string","maxLength":20000,"title":"Description","default":""},"external_user_id":{"anyOf":[{"type":"string","maxLength":512,"minLength":1},{"type":"null"}],"title":"External User Id"}},"additionalProperties":false,"type":"object","required":["title"],"title":"Submission"},"TestOutput":{"properties":{"event_id":{"type":"string","title":"Event Id"}},"type":"object","required":["event_id"],"title":"TestOutput"},"UserOutput":{"properties":{"id":{"type":"string","title":"Id"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"role":{"type":"string","enum":["participant","admin"],"title":"Role"}},"type":"object","required":["id","role"],"title":"UserOutput"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VersionInput":{"properties":{"version":{"type":"integer","minimum":1.0,"title":"Version"}},"additionalProperties":false,"type":"object","required":["version"],"title":"VersionInput"},"Vote":{"properties":{"present":{"type":"boolean","title":"Present"},"external_user_id":{"anyOf":[{"type":"string","maxLength":512,"minLength":1},{"type":"null"}],"title":"External User Id"}},"additionalProperties":false,"type":"object","required":["present"],"title":"Vote"},"VoteOutput":{"properties":{"vote_count":{"type":"integer","title":"Vote Count"},"voted":{"type":"boolean","title":"Voted"}},"type":"object","required":["vote_count","voted"],"title":"VoteOutput"},"WebhookInput":{"properties":{"version":{"type":"integer","minimum":1.0,"title":"Version"},"url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Url"},"enabled":{"type":"boolean","title":"Enabled"},"events":{"items":{"type":"string","enum":["request.created","request.updated","request.resubmitted","request.accepted","request.rejected","request.status_changed","request.deleted"]},"type":"array","maxItems":7,"title":"Events"},"rotate_secret":{"type":"boolean","title":"Rotate Secret","default":false}},"additionalProperties":false,"type":"object","required":["version","enabled","events"],"title":"WebhookInput"},"WebhookOutput":{"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"enabled":{"type":"boolean","title":"Enabled"},"events":{"items":{"type":"string"},"type":"array","title":"Events"},"has_secret":{"type":"boolean","title":"Has Secret"},"version":{"type":"integer","title":"Version"},"signing_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signing Secret"}},"type":"object","required":["url","enabled","events","has_secret","version"],"title":"WebhookOutput"},"ApiError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"fields":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"securitySchemes":{"APIKeyHeader":{"type":"apiKey","description":"Bearer <project secret>; trusted backends only","in":"header","name":"Authorization"},"APIKeyCookie":{"type":"apiKey","in":"cookie","name":"feedback_session"}}}}