Files
tasks-api/openapi.json
a2a-platform 041f3e65b6 deploy
2026-05-28 12:53:13 +00:00

742 lines
17 KiB
JSON

{
"components": {
"schemas": {
"DeleteOut": {
"properties": {
"ok": {
"const": true,
"default": true,
"title": "Ok",
"type": "boolean"
}
},
"title": "DeleteOut",
"type": "object"
},
"HTTPValidationError": {
"properties": {
"detail": {
"items": {
"$ref": "#/components/schemas/ValidationError"
},
"title": "Detail",
"type": "array"
}
},
"title": "HTTPValidationError",
"type": "object"
},
"HealthError": {
"properties": {
"error": {
"title": "Error",
"type": "string"
},
"ok": {
"const": false,
"default": false,
"title": "Ok",
"type": "boolean"
}
},
"required": [
"error"
],
"title": "HealthError",
"type": "object"
},
"HealthOk": {
"properties": {
"ok": {
"const": true,
"default": true,
"title": "Ok",
"type": "boolean"
}
},
"title": "HealthOk",
"type": "object"
},
"TaskCreate": {
"properties": {
"description": {
"default": "",
"maxLength": 10000,
"title": "Description",
"type": "string"
},
"due_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
],
"title": "Due At"
},
"labels": {
"items": {
"type": "string"
},
"maxItems": 20,
"title": "Labels",
"type": "array"
},
"priority": {
"default": 0,
"maximum": 100.0,
"minimum": -100.0,
"title": "Priority",
"type": "integer"
},
"status": {
"default": "todo",
"enum": [
"todo",
"in_progress",
"done",
"canceled"
],
"title": "Status",
"type": "string"
},
"title": {
"maxLength": 240,
"minLength": 1,
"title": "Title",
"type": "string"
}
},
"required": [
"title"
],
"title": "TaskCreate",
"type": "object"
},
"TaskListOut": {
"properties": {
"limit": {
"title": "Limit",
"type": "integer"
},
"offset": {
"title": "Offset",
"type": "integer"
},
"tasks": {
"items": {
"$ref": "#/components/schemas/TaskOut"
},
"title": "Tasks",
"type": "array"
},
"total": {
"title": "Total",
"type": "integer"
}
},
"required": [
"tasks",
"total",
"limit",
"offset"
],
"title": "TaskListOut",
"type": "object"
},
"TaskOut": {
"properties": {
"completed_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
],
"title": "Completed At"
},
"created_at": {
"format": "date-time",
"title": "Created At",
"type": "string"
},
"description": {
"title": "Description",
"type": "string"
},
"due_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
],
"title": "Due At"
},
"id": {
"title": "Id",
"type": "string"
},
"labels": {
"items": {
"type": "string"
},
"title": "Labels",
"type": "array"
},
"priority": {
"title": "Priority",
"type": "integer"
},
"status": {
"enum": [
"todo",
"in_progress",
"done",
"canceled"
],
"title": "Status",
"type": "string"
},
"title": {
"title": "Title",
"type": "string"
},
"updated_at": {
"format": "date-time",
"title": "Updated At",
"type": "string"
}
},
"required": [
"id",
"title",
"description",
"status",
"priority",
"labels",
"due_at",
"completed_at",
"created_at",
"updated_at"
],
"title": "TaskOut",
"type": "object"
},
"TaskUpdate": {
"properties": {
"description": {
"anyOf": [
{
"maxLength": 10000,
"type": "string"
},
{
"type": "null"
}
],
"title": "Description"
},
"due_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
],
"title": "Due At"
},
"labels": {
"anyOf": [
{
"items": {
"type": "string"
},
"maxItems": 20,
"type": "array"
},
{
"type": "null"
}
],
"title": "Labels"
},
"priority": {
"anyOf": [
{
"maximum": 100.0,
"minimum": -100.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Priority"
},
"status": {
"anyOf": [
{
"enum": [
"todo",
"in_progress",
"done",
"canceled"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Status"
},
"title": {
"anyOf": [
{
"maxLength": 240,
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
],
"title": "Title"
}
},
"title": "TaskUpdate",
"type": "object"
},
"ValidationError": {
"properties": {
"ctx": {
"title": "Context",
"type": "object"
},
"input": {
"title": "Input"
},
"loc": {
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
}
]
},
"title": "Location",
"type": "array"
},
"msg": {
"title": "Message",
"type": "string"
},
"type": {
"title": "Error Type",
"type": "string"
}
},
"required": [
"loc",
"msg",
"type"
],
"title": "ValidationError",
"type": "object"
}
},
"securitySchemes": {
"apiKeyAuth": {
"description": "Use the configured `TASKS_API_KEY` value.",
"in": "header",
"name": "x-api-key",
"type": "apiKey"
},
"bearerAuth": {
"description": "Use `Authorization: Bearer $TASKS_API_KEY`.",
"scheme": "bearer",
"type": "http"
}
}
},
"info": {
"description": "API-only service for tracking tasks in Postgres.",
"title": "Tasks API",
"version": "0.1.0"
},
"openapi": "3.1.0",
"paths": {
"/api/tasks": {
"get": {
"operationId": "listTasks",
"parameters": [
{
"in": "query",
"name": "status",
"required": false,
"schema": {
"anyOf": [
{
"enum": [
"todo",
"in_progress",
"done",
"canceled"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Status"
}
},
{
"in": "query",
"name": "q",
"required": false,
"schema": {
"anyOf": [
{
"maxLength": 120,
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
],
"title": "Q"
}
},
{
"in": "query",
"name": "due_before",
"required": false,
"schema": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
],
"title": "Due Before"
}
},
{
"in": "query",
"name": "limit",
"required": false,
"schema": {
"default": 50,
"maximum": 200,
"minimum": 1,
"title": "Limit",
"type": "integer"
}
},
{
"in": "query",
"name": "offset",
"required": false,
"schema": {
"default": 0,
"minimum": 0,
"title": "Offset",
"type": "integer"
}
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TaskListOut"
}
}
},
"description": "Successful Response"
},
"422": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
},
"description": "Validation Error"
}
},
"security": [
{
"bearerAuth": []
},
{
"apiKeyAuth": []
}
],
"summary": "List Tasks",
"tags": [
"Tasks"
]
},
"post": {
"operationId": "createTask",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TaskCreate"
}
}
},
"required": true
},
"responses": {
"201": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TaskOut"
}
}
},
"description": "Successful Response"
},
"422": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
},
"description": "Validation Error"
}
},
"security": [
{
"bearerAuth": []
},
{
"apiKeyAuth": []
}
],
"summary": "Create Task",
"tags": [
"Tasks"
]
}
},
"/api/tasks/{task_id}": {
"delete": {
"operationId": "deleteTask",
"parameters": [
{
"in": "path",
"name": "task_id",
"required": true,
"schema": {
"title": "Task Id",
"type": "string"
}
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DeleteOut"
}
}
},
"description": "Successful Response"
},
"422": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
},
"description": "Validation Error"
}
},
"security": [
{
"bearerAuth": []
},
{
"apiKeyAuth": []
}
],
"summary": "Delete Task",
"tags": [
"Tasks"
]
},
"get": {
"operationId": "getTask",
"parameters": [
{
"in": "path",
"name": "task_id",
"required": true,
"schema": {
"title": "Task Id",
"type": "string"
}
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TaskOut"
}
}
},
"description": "Successful Response"
},
"422": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
},
"description": "Validation Error"
}
},
"security": [
{
"bearerAuth": []
},
{
"apiKeyAuth": []
}
],
"summary": "Get Task",
"tags": [
"Tasks"
]
},
"patch": {
"operationId": "updateTask",
"parameters": [
{
"in": "path",
"name": "task_id",
"required": true,
"schema": {
"title": "Task Id",
"type": "string"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TaskUpdate"
}
}
},
"required": true
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TaskOut"
}
}
},
"description": "Successful Response"
},
"422": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
},
"description": "Validation Error"
}
},
"security": [
{
"bearerAuth": []
},
{
"apiKeyAuth": []
}
],
"summary": "Update Task",
"tags": [
"Tasks"
]
}
},
"/healthz": {
"get": {
"operationId": "getTasksHealth",
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HealthOk"
}
}
},
"description": "Successful Response"
},
"503": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HealthError"
}
}
},
"description": "Service Unavailable"
}
},
"summary": "Healthz",
"tags": [
"Health"
]
}
}
}
}