openapi: 3.2.0 info: title: Piknik.Spot Tasks API description: Piknik.Spot API with OAuth2 authentication, Model Context Protocol (MCP) support, and Agent-to-Agent (A2A) capabilities for AI-powered local food system interactions. version: 1.0.0 contact: name: Piknik.Spot API Support url: https://piknik.spot email: info@piknik.spot license: name: Proprietary url: https://piknik.spot/terms servers: - url: https://piknik.spot/api description: Production Server - url: http://localhost:3000/api description: Development Server tags: - name: Tasks paths: /tasks/{id}/abandon: post: summary: POST /tasks/{id}/abandon description: Endpoint for /tasks/{id}/abandon tags: - Tasks responses: '201': description: Created successfully content: application/json: schema: type: object '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' security: - bearerAuth: [] - cookieAuth: [] parameters: - name: id in: path required: true schema: type: string description: id identifier operationId: postTasksByIdAbandon x-operation-id-source: derived /tasks/{id}/claim: post: summary: POST /tasks/{id}/claim description: Endpoint for /tasks/{id}/claim tags: - Tasks responses: '201': description: Created successfully content: application/json: schema: type: object '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' security: - bearerAuth: [] - cookieAuth: [] parameters: - name: id in: path required: true schema: type: string description: id identifier operationId: postTasksByIdClaim x-operation-id-source: derived /tasks/{id}/confirm-dropoff: post: summary: POST /api/tasks/[id]/confirm-dropoff tags: - Tasks responses: '201': description: Created successfully content: application/json: schema: type: object '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' security: - bearerAuth: [] - cookieAuth: [] parameters: - name: id in: path required: true schema: type: string description: id identifier requestBody: required: true content: application/json: schema: type: object operationId: postTasksByIdConfirmDropoff x-operation-id-source: derived /tasks/{id}/confirm-pickup: post: summary: POST /api/tasks/[id]/confirm-pickup tags: - Tasks responses: '201': description: Created successfully content: application/json: schema: type: object '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' security: - bearerAuth: [] - cookieAuth: [] parameters: - name: id in: path required: true schema: type: string description: id identifier requestBody: required: true content: application/json: schema: type: object operationId: postTasksByIdConfirmPickup x-operation-id-source: derived /tasks/{id}/messages: get: summary: GET /tasks/{id}/messages description: Endpoint for /tasks/{id}/messages tags: - Tasks responses: '200': description: Success content: application/json: schema: type: object '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' security: - bearerAuth: [] - cookieAuth: [] parameters: - name: id in: path required: true schema: type: string description: id identifier operationId: getTasksByIdMessages x-operation-id-source: derived post: summary: POST /tasks/{id}/messages description: Endpoint for /tasks/{id}/messages tags: - Tasks responses: '201': description: Created successfully content: application/json: schema: type: object '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' security: - bearerAuth: [] - cookieAuth: [] parameters: - name: id in: path required: true schema: type: string description: id identifier requestBody: required: true content: application/json: schema: type: object operationId: postTasksByIdMessages x-operation-id-source: derived /tasks/{id}/reject: post: summary: POST /tasks/{id}/reject description: Endpoint for /tasks/{id}/reject tags: - Tasks responses: '201': description: Created successfully content: application/json: schema: type: object '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' security: - bearerAuth: [] - cookieAuth: [] parameters: - name: id in: path required: true schema: type: string description: id identifier requestBody: required: true content: application/json: schema: type: object operationId: postTasksByIdReject x-operation-id-source: derived /tasks/{id}: get: summary: GET /tasks/{id} description: Endpoint for /tasks/{id} tags: - Tasks responses: '200': description: Success content: application/json: schema: type: object '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' security: [] parameters: - name: id in: path required: true schema: type: string description: id identifier operationId: getTasksById x-operation-id-source: derived /tasks/{id}/submit-response: post: summary: POST /tasks/{id}/submit-response description: Endpoint for /tasks/{id}/submit-response tags: - Tasks responses: '201': description: Created successfully content: application/json: schema: type: object '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' security: - bearerAuth: [] - cookieAuth: [] parameters: - name: id in: path required: true schema: type: string description: id identifier requestBody: required: true content: application/json: schema: type: object operationId: postTasksByIdSubmitResponse x-operation-id-source: derived /tasks/{id}/unclaim: post: summary: POST /api/tasks/[id]/unclaim tags: - Tasks responses: '201': description: Created successfully content: application/json: schema: type: object '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' security: - bearerAuth: [] - cookieAuth: [] parameters: - name: id in: path required: true schema: type: string description: id identifier requestBody: required: true content: application/json: schema: type: object operationId: postTasksByIdUnclaim x-operation-id-source: derived /tasks/{id}/update: put: summary: PUT /tasks/{id}/update description: Endpoint for /tasks/{id}/update tags: - Tasks responses: '200': description: Success content: application/json: schema: type: object '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' security: - bearerAuth: [] - cookieAuth: [] parameters: - name: id in: path required: true schema: type: string description: id identifier requestBody: required: true content: application/json: schema: type: object operationId: putTasksByIdUpdate x-operation-id-source: derived delete: summary: DELETE /tasks/{id}/update description: Endpoint for /tasks/{id}/update tags: - Tasks responses: '200': description: Success content: application/json: schema: type: object '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' security: - bearerAuth: [] - cookieAuth: [] parameters: - name: id in: path required: true schema: type: string description: id identifier operationId: deleteTasksByIdUpdate x-operation-id-source: derived /tasks/{id}/update-response: patch: summary: PATCH /api/tasks/[id]/update-response tags: - Tasks responses: '200': description: Success content: application/json: schema: type: object '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' security: [] parameters: - name: id in: path required: true schema: type: string description: id identifier requestBody: required: true content: application/json: schema: type: object operationId: patchTasksByIdUpdateResponse x-operation-id-source: derived /tasks/{id}/verify: post: summary: POST /tasks/{id}/verify description: Endpoint for /tasks/{id}/verify tags: - Tasks responses: '201': description: Created successfully content: application/json: schema: type: object '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' security: - bearerAuth: [] - cookieAuth: [] parameters: - name: id in: path required: true schema: type: string description: id identifier operationId: postTasksByIdVerify x-operation-id-source: derived /tasks/create: post: summary: POST /tasks/create description: Endpoint for /tasks/create tags: - Tasks responses: '201': description: Created successfully content: application/json: schema: type: object '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' security: - bearerAuth: [] - cookieAuth: [] requestBody: required: true content: application/json: schema: type: object operationId: postTasksCreate x-operation-id-source: derived /tasks/nearby: get: summary: GET /tasks/nearby description: Endpoint for /tasks/nearby tags: - Tasks responses: '200': description: Success content: application/json: schema: type: object '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' security: [] parameters: - name: lat in: query schema: type: number format: double description: Latitude coordinate - name: lng in: query schema: type: number format: double description: Longitude coordinate - name: radius in: query schema: type: integer description: Search radius in kilometers - name: minPriority in: query schema: type: string description: minPriority parameter - name: taskType in: query schema: type: string description: taskType parameter - name: status in: query schema: type: string description: status parameter - name: limit in: query schema: type: integer description: Maximum number of results - name: offset in: query schema: type: integer description: Pagination offset operationId: getTasksNearby x-operation-id-source: derived post: summary: POST /tasks/nearby description: Endpoint for /tasks/nearby tags: - Tasks responses: '201': description: Created successfully content: application/json: schema: type: object '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' security: [] parameters: - name: lat in: query schema: type: number format: double description: Latitude coordinate - name: lng in: query schema: type: number format: double description: Longitude coordinate - name: radius in: query schema: type: integer description: Search radius in kilometers - name: minPriority in: query schema: type: string description: minPriority parameter - name: taskType in: query schema: type: string description: taskType parameter - name: status in: query schema: type: string description: status parameter - name: limit in: query schema: type: integer description: Maximum number of results - name: offset in: query schema: type: integer description: Pagination offset requestBody: required: true content: application/json: schema: type: object operationId: postTasksNearby x-operation-id-source: derived /tasks/public: get: summary: GET /tasks/public description: Endpoint for /tasks/public tags: - Tasks responses: '200': description: Success content: application/json: schema: type: object '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' security: [] parameters: - name: participantId in: query schema: type: string description: Participant identifier - name: taskType in: query schema: type: string description: taskType parameter - name: priority in: query schema: type: string description: priority parameter - name: status in: query schema: type: string description: status parameter - name: limit in: query schema: type: integer description: Maximum number of results - name: offset in: query schema: type: integer description: Pagination offset - name: lat in: query schema: type: number format: double description: Latitude coordinate - name: lng in: query schema: type: number format: double description: Longitude coordinate - name: radius in: query schema: type: integer description: Search radius in kilometers operationId: getTasksPublic x-operation-id-source: derived /tasks/trigger-proximity-check: post: summary: POST /tasks/trigger-proximity-check description: Endpoint for /tasks/trigger-proximity-check tags: - Tasks responses: '201': description: Created successfully content: application/json: schema: type: object '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' security: - bearerAuth: [] - cookieAuth: [] requestBody: required: true content: application/json: schema: type: object operationId: postTasksTriggerProximityCheck x-operation-id-source: derived components: schemas: Error: type: object properties: error: type: string description: Error message error_description: type: string description: Detailed error description securitySchemes: cookieAuth: type: apiKey in: cookie name: next-auth.session-token description: Session-based authentication for web browsers oauth2: type: oauth2 description: OAuth 2.0 authentication for external applications and AI agents flows: authorizationCode: authorizationUrl: https://piknik.spot/api/oauth/authorize tokenUrl: https://piknik.spot/api/oauth/token refreshUrl: https://piknik.spot/api/oauth/token scopes: marketplace:write: Create and manage marketplace listings events:write: Create and manage community events read:profile: Read user profile information write:profile: Update user profile information bearerAuth: type: http scheme: bearer bearerFormat: JWT description: 'OAuth2 access token (JWT). Include in Authorization header as: Bearer {token}'