{"openapi": "3.1.0", "info": {"title": "Springroll Agent API", "version": "1.0.0", "description": "Organization-scoped workforce and payroll API for software agents. Human dashboard routes use Cognito; /agent/v1 routes use revocable Springroll agent keys."}, "servers": [{"url": "https://api.springroll.sh"}], "components": {"securitySchemes": {"SpringrollAgentKey": {"type": "http", "scheme": "bearer", "bearerFormat": "Springroll agent key"}}}, "security": [{"SpringrollAgentKey": []}], "paths": {"/agent/v1/context": {"get": {"summary": "Get organization context", "responses": {"200": {"description": "Organization context"}}}}, "/agent/v1/workers": {"get": {"summary": "List workers", "responses": {"200": {"description": "Workers"}}}, "post": {"summary": "Create a worker", "responses": {"201": {"description": "Created worker"}}}}, "/agent/v1/time-entries": {"get": {"summary": "List time entries", "parameters": [{"in": "query", "name": "worker_id", "schema": {"type": "string"}}], "responses": {"200": {"description": "Time entries"}}}, "post": {"summary": "Create a time entry", "responses": {"201": {"description": "Created time entry"}}}}, "/agent/v1/time-entries/{time_entry_id}": {"patch": {"summary": "Approve or reject a time entry", "parameters": [{"in": "path", "name": "time_entry_id", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Updated time entry"}}}}, "/agent/v1/expenses": {"get": {"summary": "List expenses", "parameters": [{"in": "query", "name": "worker_id", "schema": {"type": "string"}}], "responses": {"200": {"description": "Expenses"}}}, "post": {"summary": "Create an expense", "responses": {"201": {"description": "Created expense"}}}}, "/agent/v1/expenses/{expense_id}": {"patch": {"summary": "Approve, reject, or mark an expense reimbursed", "parameters": [{"in": "path", "name": "expense_id", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Updated expense"}}}}, "/agent/v1/leave-requests": {"post": {"summary": "Create a leave request", "responses": {"201": {"description": "Created leave request"}}}}, "/agent/v1/payroll/runs": {"get": {"summary": "List payroll runs", "responses": {"200": {"description": "Payroll runs"}}}, "post": {"summary": "Create a payroll run", "responses": {"201": {"description": "Created payroll run"}}}}, "/agent/v1/payroll/runs/{payroll_run_id}": {"get": {"summary": "Get a payroll run", "parameters": [{"in": "path", "name": "payroll_run_id", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Payroll run"}}}}, "/agent/v1/payroll/runs/{payroll_run_id}/calculate": {"post": {"summary": "Queue payroll calculation", "responses": {"202": {"description": "Queued"}}}}, "/agent/v1/payroll/runs/{payroll_run_id}/approve": {"post": {"summary": "Approve payroll run", "description": "Requires payroll:approve and complete validated tax calculation.", "responses": {"200": {"description": "Approved"}}}}, "/agent/v1/billing": {"get": {"summary": "Get billing and seat counts", "responses": {"200": {"description": "Billing summary"}}}}, "/agent/v1/onboarding": {"get": {"summary": "Get onboarding context", "responses": {"200": {"description": "Onboarding profile"}}}, "patch": {"summary": "Update onboarding context", "responses": {"200": {"description": "Updated onboarding profile"}}}}}, "x-springroll-agent-scopes": ["billing:read", "expense:approve", "expense:read", "expense:write", "leave:write", "onboarding:read", "onboarding:write", "org:read", "payroll:approve", "payroll:calculate", "payroll:read", "payroll:write", "people:read", "people:write", "time:approve", "time:read", "time:write"], "x-springroll-mcp": {"url": "https://mcp.springroll.sh/mcp", "transport": "Streamable HTTP", "protocolVersions": ["2026-07-28", "2025-11-25"]}}