{
    "openapi": "3.1.0",
    "info": {
        "title": "ZetaRank AI-to-Human API",
        "version": "1.0.2",
        "description": "Approved AI agents and applications can create a ZetaRank-owned AI-to-human handoff request, continue its conversation, receive signed webhooks, and track project milestones, payments, and disputes."
    },
    "servers": [
        {
            "url": "https://zetarank.com/wp-json/zetarank/v1"
        }
    ],
    "components": {
        "securitySchemes": {
            "AgentBearer": {
                "type": "http",
                "scheme": "bearer",
                "bearerFormat": "ZetaRank Agent API Key",
                "description": "Use a ZetaRank-issued key such as zr_live_... in the Authorization header."
            }
        },
        "schemas": {
            "AIToHumanRequestCreate": {
                "type": "object",
                "required": [
                    "message"
                ],
                "properties": {
                    "category": {
                        "type": "string",
                        "example": "technical-seo"
                    },
                    "name": {
                        "type": "string"
                    },
                    "email": {
                        "type": "string",
                        "format": "email"
                    },
                    "company": {
                        "type": "string"
                    },
                    "website": {
                        "type": "string",
                        "format": "uri"
                    },
                    "subject": {
                        "type": "string"
                    },
                    "message": {
                        "type": "string"
                    },
                    "contact_permission": {
                        "type": "boolean",
                        "description": "Set true only when the customer has permitted ZetaRank to contact them."
                    },
                    "marketplace_opt_in": {
                        "type": "boolean",
                        "description": "Set true only when the customer is open to proposals from approved providers. ZetaRank still reviews the request before marketplace publication."
                    },
                    "budget_min": {
                        "type": "number",
                        "minimum": 0
                    },
                    "budget_max": {
                        "type": "number",
                        "minimum": 0
                    }
                }
            }
        }
    },
    "webhooks": {
        "request.created": {
            "post": {
                "summary": "A request was created."
            }
        },
        "request.updated": {
            "post": {
                "summary": "Request status or routing changed."
            }
        },
        "message.created": {
            "post": {
                "summary": "A new message was added."
            }
        },
        "proposal.received": {
            "post": {
                "summary": "A provider proposal was received."
            }
        },
        "proposal.accepted": {
            "post": {
                "summary": "A provider proposal was accepted."
            }
        },
        "payment.requested": {
            "post": {
                "summary": "A payment request was created or approved."
            }
        },
        "payment.completed": {
            "post": {
                "summary": "A payment was completed."
            }
        },
        "milestone.created": {
            "post": {
                "summary": "A project milestone was created."
            }
        },
        "milestone.updated": {
            "post": {
                "summary": "Milestone progress or revision state changed."
            }
        },
        "milestone.submitted": {
            "post": {
                "summary": "A milestone was submitted for customer review."
            }
        },
        "milestone.approved": {
            "post": {
                "summary": "A milestone was approved."
            }
        },
        "deliverable.created": {
            "post": {
                "summary": "A deliverable was submitted."
            }
        },
        "dispute.created": {
            "post": {
                "summary": "A dispute/refund case was opened."
            }
        },
        "dispute.updated": {
            "post": {
                "summary": "A dispute/refund case changed."
            }
        },
        "job.completed": {
            "post": {
                "summary": "A job was completed."
            }
        }
    },
    "paths": {
        "/capabilities": {
            "get": {
                "summary": "AI-to-Human API capabilities",
                "responses": {
                    "200": {
                        "description": "Capabilities"
                    }
                }
            }
        },
        "/services": {
            "get": {
                "summary": "Supported service categories",
                "responses": {
                    "200": {
                        "description": "Services"
                    }
                }
            }
        },
        "/ai-to-human-request": {
            "post": {
                "summary": "Create an AI-to-human handoff request",
                "security": [
                    {
                        "AgentBearer": []
                    }
                ],
                "x-zetarank-scope": "requests:create",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/AIToHumanRequestCreate"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "AI-to-human request created; request_token is returned once."
                    },
                    "401": {
                        "description": "Agent key required or invalid."
                    }
                }
            }
        },
        "/human-request": {
            "post": {
                "summary": "Legacy alias: create an AI-to-human handoff request",
                "deprecated": true,
                "security": [
                    {
                        "AgentBearer": []
                    }
                ],
                "x-zetarank-scope": "requests:create",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/AIToHumanRequestCreate"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Request created through the legacy compatibility endpoint."
                    },
                    "401": {
                        "description": "Agent key required or invalid."
                    }
                }
            }
        },
        "/request/{id}": {
            "get": {
                "summary": "Read an owned request",
                "security": [
                    {
                        "AgentBearer": []
                    }
                ],
                "x-zetarank-scope": "requests:read",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "ZetaRank AI-to-Human API request ID."
                    },
                    {
                        "name": "X-ZetaRank-Request-Token",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Private token returned when the request was created."
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Request, conversation, and approved payment data."
                    }
                }
            }
        },
        "/request/{id}/message": {
            "post": {
                "summary": "Send a follow-up message",
                "security": [
                    {
                        "AgentBearer": []
                    }
                ],
                "x-zetarank-scope": "messages:create",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "ZetaRank AI-to-Human API request ID."
                    },
                    {
                        "name": "X-ZetaRank-Request-Token",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Private token returned when the request was created."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "message"
                                ],
                                "properties": {
                                    "message": {
                                        "type": "string"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Message added."
                    }
                }
            }
        },
        "/request/{id}/payment-request": {
            "post": {
                "summary": "Propose a custom payment request",
                "security": [
                    {
                        "AgentBearer": []
                    }
                ],
                "x-zetarank-scope": "payments:propose",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "ZetaRank AI-to-Human API request ID."
                    },
                    {
                        "name": "X-ZetaRank-Request-Token",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Private token returned when the request was created."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "amount",
                                    "description"
                                ],
                                "properties": {
                                    "amount": {
                                        "type": "number"
                                    },
                                    "currency": {
                                        "type": "string",
                                        "example": "USD"
                                    },
                                    "description": {
                                        "type": "string"
                                    },
                                    "reference": {
                                        "type": "string"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Payment proposal saved pending ZetaRank staff approval."
                    }
                }
            }
        }
    }
}