{
  "openapi": "3.1.0",
  "info": {
    "title": "Remote Pro Ai Platform API",
    "version": "0.1.0",
    "summary": "Intake, scheduling, pricing, booking, Client OS, Talent OS, Trust Center and status for remote-pro.ai.",
    "description": "Generated from the platform route table (npm run openapi) — the published document equals the routes the server serves (contract-tested). Staff-only routes are never listed. Auth: session cookie (__Host-rp_session) + X-CSRF on cookie writes, or a Bearer session / OAuth 2.1 token. Errors use one bilingual envelope (EN/AR). Writes that create or pay accept an Idempotency-Key. Times are ISO 8601 with a zone; money is { amount, amount_minor, currency, display }.",
    "contact": {
      "name": "Remote Pro Ai",
      "email": "info@remote-pro.ai",
      "url": "https://remote-pro.ai/mcp/docs"
    }
  },
  "servers": [
    {
      "url": "https://remote-pro.ai",
      "description": "Production — one origin: the website and /api (also mcp.remote-pro.ai for /mcp, /v1, /oauth)"
    }
  ],
  "tags": [
    {
      "name": "Agents"
    },
    {
      "name": "Auth"
    },
    {
      "name": "Billing"
    },
    {
      "name": "Bookings"
    },
    {
      "name": "Calendar"
    },
    {
      "name": "Client OS"
    },
    {
      "name": "Contracts"
    },
    {
      "name": "Dev"
    },
    {
      "name": "Growth"
    },
    {
      "name": "Intake"
    },
    {
      "name": "MCP"
    },
    {
      "name": "Meta"
    },
    {
      "name": "OAuth"
    },
    {
      "name": "Organisations"
    },
    {
      "name": "Payments"
    },
    {
      "name": "Pricing"
    },
    {
      "name": "Proposals"
    },
    {
      "name": "Quotes"
    },
    {
      "name": "Scheduling"
    },
    {
      "name": "Status"
    },
    {
      "name": "Support"
    },
    {
      "name": "System"
    },
    {
      "name": "Talent"
    },
    {
      "name": "Talent OS"
    },
    {
      "name": "Tour"
    },
    {
      "name": "Trust"
    },
    {
      "name": "Webhooks"
    }
  ],
  "paths": {
    "/api/v1/agents/scope": {
      "post": {
        "operationId": "post_agents_scope",
        "summary": "Run the scope agent (proxy to the agent registry; 503 agent_unavailable when not registered)",
        "tags": [
          "Agents"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "messages": {
                    "type": "array",
                    "maxItems": 40,
                    "items": {
                      "type": "object",
                      "properties": {
                        "role": {
                          "enum": [
                            "user",
                            "assistant"
                          ]
                        },
                        "content": {
                          "type": "string",
                          "maxLength": 4000
                        }
                      }
                    }
                  },
                  "text": {
                    "type": "string",
                    "maxLength": 4000
                  },
                  "context": {
                    "type": "object"
                  },
                  "currency": {
                    "type": "string"
                  },
                  "buyer_country": {
                    "type": "string"
                  },
                  "lang": {
                    "enum": [
                      "en",
                      "ar"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Agent output (draft/answer) with run id and provider",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          },
          "503": {
            "description": "agent_unavailable"
          }
        },
        "x-owner": "ai-agents",
        "x-rate-limit-bucket": "write"
      }
    },
    "/api/v1/agents/rfp": {
      "post": {
        "operationId": "post_agents_rfp",
        "summary": "Run the rfp agent (proxy to the agent registry; 503 agent_unavailable when not registered)",
        "tags": [
          "Agents"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "question"
                ],
                "additionalProperties": false,
                "properties": {
                  "question": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 2000
                  },
                  "context": {
                    "type": "object"
                  },
                  "lang": {
                    "enum": [
                      "en",
                      "ar"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Agent output (draft/answer) with run id and provider",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          },
          "503": {
            "description": "agent_unavailable"
          }
        },
        "x-owner": "ai-agents",
        "x-rate-limit-bucket": "write"
      }
    },
    "/api/v1/agents/support": {
      "post": {
        "operationId": "post_agents_support",
        "summary": "Run the support agent (proxy to the agent registry; 503 agent_unavailable when not registered)",
        "tags": [
          "Agents"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "message"
                ],
                "additionalProperties": false,
                "properties": {
                  "message": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 4000
                  },
                  "context": {
                    "type": "object"
                  },
                  "lang": {
                    "enum": [
                      "en",
                      "ar"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Agent output (draft/answer) with run id and provider",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          },
          "503": {
            "description": "agent_unavailable"
          }
        },
        "x-owner": "ai-agents",
        "x-rate-limit-bucket": "write"
      }
    },
    "/api/v1/app/dashboard": {
      "get": {
        "operationId": "get_app_dashboard",
        "summary": "Client OS home: engagement, squad, trial, open invoices, SLA credits, pending approvals, bookings in progress",
        "tags": [
          "Client OS"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Dashboard"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine",
        "x-auth": {
          "kind": "client"
        }
      }
    },
    "/api/v1/app/roster": {
      "get": {
        "operationId": "get_app_roster",
        "summary": "Squad roster = Order Form lines with the anonymised specialist on each seat",
        "tags": [
          "Client OS"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Roster"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine",
        "x-auth": {
          "kind": "client"
        }
      }
    },
    "/api/v1/app/timesheets": {
      "get": {
        "operationId": "get_app_timesheets",
        "summary": "Weekly timesheets of the current engagement (newest first)",
        "tags": [
          "Client OS"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "from",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "submitted",
                "approved",
                "auto_approved",
                "disputed",
                "locked",
                "draft"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Timesheets"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine",
        "x-auth": {
          "kind": "client"
        }
      },
      "post": {
        "operationId": "post_app_timesheets",
        "summary": "Batch action on submitted timesheets: approve, or dispute with a reason",
        "tags": [
          "Client OS"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "action",
                  "ids"
                ],
                "additionalProperties": false,
                "properties": {
                  "action": {
                    "enum": [
                      "approve",
                      "dispute"
                    ]
                  },
                  "ids": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 100,
                    "items": {
                      "type": "string",
                      "pattern": "^[0-9a-fA-F-]{36}$"
                    }
                  },
                  "reason": {
                    "type": "string",
                    "maxLength": 500
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updated"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine",
        "x-auth": {
          "kind": "client",
          "roles": [
            "Admin",
            "Approver",
            "admin",
            "approver"
          ]
        }
      }
    },
    "/api/v1/app/timesheets/{id}/approve": {
      "post": {
        "operationId": "post_app_timesheets_id_approve",
        "summary": "Approve one submitted timesheet",
        "tags": [
          "Client OS"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-fA-F-]{36}$"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Approved"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "description": "Not in submitted state"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine",
        "x-auth": {
          "kind": "client",
          "roles": [
            "Admin",
            "Approver",
            "admin",
            "approver"
          ]
        }
      }
    },
    "/api/v1/app/sla": {
      "get": {
        "operationId": "get_app_sla",
        "summary": "SLA commitments and service credits (5–15 % of the monthly fee, capped at 15 %)",
        "tags": [
          "Client OS"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "SLA"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine",
        "x-auth": {
          "kind": "client"
        }
      }
    },
    "/api/v1/app/invoices": {
      "get": {
        "operationId": "get_app_invoices",
        "summary": "Invoices with entity, VAT and e-invoice status (zatca | peppol | eta | none)",
        "tags": [
          "Client OS",
          "Billing"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Invoices"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine",
        "x-auth": {
          "kind": "client"
        }
      }
    },
    "/api/v1/app/invoices/{id}": {
      "get": {
        "operationId": "get_app_invoices_id",
        "summary": "One invoice; `{id}.xml` = the e-invoice XML (ZATCA UBL 2.1 / Peppol BIS 3), `{id}.pdf` = printable tax invoice (HTML fallback)",
        "tags": [
          "Client OS",
          "Billing"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-fA-F-]{36}(\\.(xml|pdf))?$"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Invoice JSON, application/xml or text/html"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine",
        "x-auth": {
          "kind": "client"
        }
      }
    },
    "/api/v1/app/seats": {
      "post": {
        "operationId": "post_app_seats",
        "summary": "Seat change → repriced with the R30 engine → amendment (contract kind amendment, sha256) → e-sign via POST /v1/contracts/{id}/sign",
        "tags": [
          "Client OS"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "change"
                ],
                "additionalProperties": false,
                "properties": {
                  "change": {
                    "type": "object",
                    "required": [
                      "action"
                    ],
                    "additionalProperties": false,
                    "properties": {
                      "action": {
                        "enum": [
                          "add",
                          "remove",
                          "change_level",
                          "change_hours"
                        ]
                      },
                      "seat_id": {
                        "type": "string",
                        "pattern": "^[0-9a-fA-F-]{36}$"
                      },
                      "practice": {
                        "type": "string",
                        "maxLength": 40
                      },
                      "level": {
                        "enum": [
                          "mid",
                          "senior",
                          "lead"
                        ]
                      },
                      "hours": {
                        "enum": [
                          80,
                          160
                        ]
                      },
                      "count": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 10
                      },
                      "effective_on": {
                        "type": "string",
                        "format": "date"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Amendment issued"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine",
        "x-auth": {
          "kind": "client",
          "roles": [
            "Admin",
            "Approver",
            "admin",
            "approver"
          ]
        }
      }
    },
    "/api/v1/app/replace": {
      "post": {
        "operationId": "post_app_replace",
        "summary": "Request a replacement for a seat (proposal within 10 business days; practice-lead inbox)",
        "tags": [
          "Client OS"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "seat_id",
                  "reason"
                ],
                "additionalProperties": false,
                "properties": {
                  "seat_id": {
                    "type": "string",
                    "pattern": "^[0-9a-fA-F-]{36}$"
                  },
                  "reason": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 1000
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Replacement requested"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine",
        "x-auth": {
          "kind": "client",
          "roles": [
            "Admin",
            "Approver",
            "admin",
            "approver"
          ]
        }
      }
    },
    "/api/v1/app/documents": {
      "get": {
        "operationId": "get_app_documents",
        "summary": "Contracts and documents of the organisation with hashes and links",
        "tags": [
          "Client OS"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Documents"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine",
        "x-auth": {
          "kind": "client"
        }
      }
    },
    "/api/v1/app/nps": {
      "post": {
        "operationId": "post_app_nps",
        "summary": "Record a Net Promoter Score (0–10) for the current month",
        "tags": [
          "Client OS"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "score"
                ],
                "additionalProperties": false,
                "properties": {
                  "score": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 10
                  },
                  "comment": {
                    "type": "string",
                    "maxLength": 2000
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Recorded"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine",
        "x-auth": {
          "kind": "client"
        }
      }
    },
    "/api/v1/support/tickets": {
      "post": {
        "operationId": "post_support_tickets",
        "summary": "Open a support ticket → { ticket_id, first_response: { by, answer, sources, escalate } } (support agent; honest escalation)",
        "tags": [
          "Client OS",
          "Support"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "message"
                ],
                "additionalProperties": false,
                "properties": {
                  "subject": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "message": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 5000
                  },
                  "lang": {
                    "enum": [
                      "en",
                      "ar"
                    ]
                  },
                  "priority": {
                    "enum": [
                      "low",
                      "normal",
                      "high",
                      "urgent"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Ticket opened"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine",
        "x-auth": {
          "kind": "client"
        }
      }
    },
    "/api/v1/appointments/slots": {
      "get": {
        "operationId": "get_appointments_slots",
        "summary": "Available slots in the visitor’s time zone (never past, working days of host and visitor); `days` = number of days with availability to return",
        "tags": [
          "Scheduling"
        ],
        "security": [],
        "parameters": [
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "scoping_call"
              ]
            }
          },
          {
            "name": "tz",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "time-zone"
            }
          },
          {
            "name": "country",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "country"
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "days",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 14
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Slots grouped by local date",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "identity-intake"
      }
    },
    "/api/v1/appointments": {
      "post": {
        "operationId": "post_appointments",
        "summary": "Book a slot; sends the confirmation with a full ICS invite",
        "tags": [
          "Scheduling"
        ],
        "security": [],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "start",
                  "tz",
                  "attendee",
                  "consent"
                ],
                "additionalProperties": false,
                "properties": {
                  "kind": {
                    "enum": [
                      "scoping_call"
                    ],
                    "default": "scoping_call"
                  },
                  "start": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "tz": {
                    "type": "string",
                    "format": "time-zone"
                  },
                  "country": {
                    "type": "string",
                    "format": "country"
                  },
                  "lang": {
                    "enum": [
                      "en",
                      "ar"
                    ]
                  },
                  "attendee": {
                    "type": "object",
                    "required": [
                      "name",
                      "email"
                    ],
                    "additionalProperties": false,
                    "properties": {
                      "name": {
                        "type": "string",
                        "minLength": 2,
                        "maxLength": 120
                      },
                      "email": {
                        "type": "string",
                        "format": "email"
                      },
                      "company": {
                        "type": "string",
                        "maxLength": 160
                      },
                      "phone": {
                        "type": "string",
                        "format": "e164"
                      }
                    }
                  },
                  "answers": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string",
                      "maxLength": 500
                    }
                  },
                  "consent": {
                    "type": "object",
                    "required": [
                      "contact"
                    ],
                    "properties": {
                      "contact": {
                        "const": true
                      },
                      "policy_version": {
                        "type": "string",
                        "maxLength": 20
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Booked",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "description": "Slot taken"
          },
          "422": {
            "description": "Slot in the past"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "identity-intake"
      }
    },
    "/api/v1/appointments/{reference}": {
      "get": {
        "operationId": "get_appointments_reference",
        "summary": "Appointment (manage link)",
        "tags": [
          "Scheduling"
        ],
        "security": [],
        "parameters": [
          {
            "name": "reference",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^APT-(\\d{4}|DEMO)-\\d{6}$"
            }
          },
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 16,
              "maxLength": 64
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Appointment"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "identity-intake"
      }
    },
    "/api/v1/appointments/{reference}/ics": {
      "get": {
        "operationId": "get_appointments_reference_ics",
        "summary": "Download the ICS invite",
        "tags": [
          "Scheduling"
        ],
        "security": [],
        "parameters": [
          {
            "name": "reference",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^APT-(\\d{4}|DEMO)-\\d{6}$"
            }
          },
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 16,
              "maxLength": 64
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "text/calendar",
            "content": {
              "text/calendar": {}
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "identity-intake"
      }
    },
    "/api/v1/appointments/{reference}/cancel": {
      "post": {
        "operationId": "post_appointments_reference_cancel",
        "summary": "Cancel (sends an ICS cancellation)",
        "tags": [
          "Scheduling"
        ],
        "security": [],
        "parameters": [
          {
            "name": "reference",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^APT-(\\d{4}|DEMO)-\\d{6}$"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "token"
                ],
                "additionalProperties": false,
                "properties": {
                  "token": {
                    "type": "string",
                    "minLength": 16,
                    "maxLength": 64
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Cancelled"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "identity-intake"
      }
    },
    "/api/v1/auth/start": {
      "post": {
        "operationId": "post_auth_start",
        "summary": "Email a one-time sign-in code (no account enumeration; dev_code only with --env development)",
        "tags": [
          "Auth"
        ],
        "security": [],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "email"
                ],
                "additionalProperties": false,
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email",
                    "maxLength": 254
                  },
                  "kind": {
                    "enum": [
                      "client",
                      "talent"
                    ],
                    "default": "client"
                  },
                  "lang": {
                    "enum": [
                      "en",
                      "ar"
                    ]
                  },
                  "next": {
                    "type": "string",
                    "maxLength": 300,
                    "pattern": "^/"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Code issued",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "const": "sent"
                    },
                    "channel": {
                      "const": "email"
                    },
                    "delivery": {
                      "type": "string"
                    },
                    "expires_at": {
                      "type": "string"
                    },
                    "resend_after_s": {
                      "type": "integer"
                    },
                    "dev_code": {
                      "type": "string",
                      "description": "Only with --env development"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "pl-core",
        "x-rate-limit-bucket": "auth"
      }
    },
    "/api/v1/auth/verify": {
      "post": {
        "operationId": "post_auth_verify",
        "summary": "Exchange the code for a session (HttpOnly cookie) and a CSRF token (rp_csrf cookie + body)",
        "tags": [
          "Auth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "email",
                  "code"
                ],
                "additionalProperties": false,
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email",
                    "maxLength": 254
                  },
                  "code": {
                    "type": "string",
                    "pattern": "^\\d{6}$"
                  },
                  "kind": {
                    "enum": [
                      "client",
                      "talent"
                    ],
                    "default": "client"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Signed in",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "description": "token_invalid"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "pl-core",
        "x-rate-limit-bucket": "auth"
      }
    },
    "/api/v1/auth/logout": {
      "post": {
        "operationId": "post_auth_logout",
        "summary": "Sign out: revoke the session and clear the cookies",
        "tags": [
          "Auth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Signed out"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "pl-core",
        "x-rate-limit-bucket": "auth"
      }
    },
    "/api/v1/auth/step-up/start": {
      "post": {
        "operationId": "post_auth_step_up_start",
        "summary": "Email a step-up code to the signed-in person (before signing, paying or access changes)",
        "tags": [
          "Auth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Code issued",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "const": "sent"
                    },
                    "channel": {
                      "const": "email"
                    },
                    "delivery": {
                      "type": "string"
                    },
                    "expires_at": {
                      "type": "string"
                    },
                    "resend_after_s": {
                      "type": "integer"
                    },
                    "dev_code": {
                      "type": "string",
                      "description": "Only with --env development"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "pl-core",
        "x-rate-limit-bucket": "auth"
      }
    },
    "/api/v1/auth/step-up": {
      "post": {
        "operationId": "post_auth_step_up",
        "summary": "Confirm a step-up code ({ code }); without a code, emails one (same as /step-up/start)",
        "tags": [
          "Auth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "code": {
                    "type": "string",
                    "pattern": "^\\d{6}$"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Step-up fresh, or code sent",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "description": "token_invalid"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "pl-core",
        "x-rate-limit-bucket": "auth"
      }
    },
    "/api/v1/auth/passkeys/register/options": {
      "post": {
        "operationId": "post_auth_passkeys_register_options",
        "summary": "Passkey registration options (WebAuthn create): needs a session with a fresh step-up; attestation \"none\", user verification required",
        "tags": [
          "Auth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "PublicKeyCredentialCreationOptions (base64url fields)"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "description": "step_up_required"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          },
          "501": {
            "description": "Passkeys disabled on this server"
          }
        },
        "x-owner": "pl-core",
        "x-rate-limit-bucket": "auth"
      }
    },
    "/api/v1/auth/passkeys/register/verify": {
      "post": {
        "operationId": "post_auth_passkeys_register_verify",
        "summary": "Verify a passkey registration and store the credential (COSE public key, sign count, AAGUID, backup state)",
        "tags": [
          "Auth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "id",
                  "response"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "maxLength": 1400
                  },
                  "rawId": {
                    "type": "string",
                    "maxLength": 1400
                  },
                  "type": {
                    "const": "public-key"
                  },
                  "response": {
                    "type": "object"
                  },
                  "nickname": {
                    "type": "string",
                    "maxLength": 60
                  },
                  "authenticatorAttachment": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "clientExtensionResults": {
                    "type": "object"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Passkey stored"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "description": "token_invalid (verification failed)"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          },
          "501": {
            "description": "Passkeys disabled on this server"
          }
        },
        "x-owner": "pl-core",
        "x-rate-limit-bucket": "auth"
      }
    },
    "/api/v1/auth/passkeys/login/options": {
      "post": {
        "operationId": "post_auth_passkeys_login_options",
        "summary": "Passkey sign-in options (WebAuthn get, discoverable credentials; no account enumeration)",
        "tags": [
          "Auth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "PublicKeyCredentialRequestOptions"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          },
          "501": {
            "description": "Passkeys disabled on this server"
          }
        },
        "x-owner": "pl-core",
        "x-rate-limit-bucket": "auth"
      }
    },
    "/api/v1/auth/passkeys/login/verify": {
      "post": {
        "operationId": "post_auth_passkeys_login_verify",
        "summary": "Verify a passkey assertion → session (HttpOnly cookie) + CSRF token, with a fresh step-up",
        "tags": [
          "Auth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "id",
                  "response"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "maxLength": 1400
                  },
                  "rawId": {
                    "type": "string",
                    "maxLength": 1400
                  },
                  "type": {
                    "const": "public-key"
                  },
                  "response": {
                    "type": "object"
                  },
                  "nickname": {
                    "type": "string",
                    "maxLength": 60
                  },
                  "authenticatorAttachment": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "clientExtensionResults": {
                    "type": "object"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Signed in"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "description": "token_invalid (verification failed)"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          },
          "501": {
            "description": "Passkeys disabled on this server"
          }
        },
        "x-owner": "pl-core",
        "x-rate-limit-bucket": "auth"
      }
    },
    "/api/v1/availability": {
      "get": {
        "operationId": "get_availability",
        "summary": "Availability band for a practice (bands only, never counts below 5)",
        "tags": [
          "Talent"
        ],
        "security": [],
        "parameters": [
          {
            "name": "practice",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9-]{2,40}$"
            }
          },
          {
            "name": "level",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "mid",
                "senior",
                "lead"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Band",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "practice": {
                      "type": "string"
                    },
                    "band": {
                      "enum": [
                        "lt5",
                        "5-9",
                        "10-24",
                        "25+",
                        null
                      ]
                    },
                    "text_en": {
                      "type": "string"
                    },
                    "text_ar": {
                      "type": "string"
                    },
                    "as_of": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "pl-core"
      }
    },
    "/api/v1/bookings": {
      "post": {
        "operationId": "post_bookings",
        "summary": "Start a booking from a quote → { booking_id, state: scoped, next: account }",
        "tags": [
          "Bookings"
        ],
        "security": [],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "quote_id"
                ],
                "additionalProperties": false,
                "properties": {
                  "quote_id": {
                    "type": "string",
                    "pattern": "^[0-9a-fA-F-]{36}$"
                  },
                  "product_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 40
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Existing booking for this quote"
          },
          "201": {
            "description": "Booking created"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine",
        "x-rate-limit-bucket": "write"
      }
    },
    "/api/v1/bookings/{id}": {
      "get": {
        "operationId": "get_bookings_id",
        "summary": "Booking with its steps (account, kyb, nda, contract, esign, payment, trial), product, squad and totals",
        "tags": [
          "Bookings"
        ],
        "security": [],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-fA-F-]{36}$"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Booking"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine"
      }
    },
    "/api/v1/bookings/{id}/account": {
      "post": {
        "operationId": "post_bookings_id_account",
        "summary": "Claim the booking for the signed-in client organisation (scoped → account; KYB-verified organisations move on to kyb_verified)",
        "tags": [
          "Bookings"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-fA-F-]{36}$"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Booking"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine",
        "x-auth": {
          "kind": "client"
        }
      }
    },
    "/api/v1/bookings/{id}/nda": {
      "post": {
        "operationId": "post_bookings_id_nda",
        "summary": "Accept the mutual NDA (click) → nda_accepted",
        "tags": [
          "Bookings"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-fA-F-]{36}$"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "accept"
                ],
                "properties": {
                  "accept": {
                    "const": true
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Booking"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "description": "Out of order"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine",
        "x-auth": {
          "kind": "client"
        }
      }
    },
    "/api/v1/bookings/{id}/contract": {
      "post": {
        "operationId": "post_bookings_id_contract",
        "summary": "Generate the contract pack from templates → { docs: [{ id, kind, sha256, pdf_url, template_version }] }",
        "tags": [
          "Bookings"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-fA-F-]{36}$"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Contract pack"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "description": "Out of order"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine",
        "x-auth": {
          "kind": "client"
        }
      }
    },
    "/api/v1/bookings/{id}/documents": {
      "get": {
        "operationId": "get_bookings_id_documents",
        "summary": "Contract pack of a booking",
        "tags": [
          "Bookings"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-fA-F-]{36}$"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Docs"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine",
        "x-auth": {
          "kind": "client"
        }
      }
    },
    "/api/v1/bookings/{id}/payment-intent": {
      "post": {
        "operationId": "post_bookings_id_payment_intent",
        "summary": "Payment intent: card | mada (adapter; honest when unconfigured) · transfer (real reference + bank details) · po (finance review)",
        "tags": [
          "Bookings",
          "Payments"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-fA-F-]{36}$"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "method"
                ],
                "additionalProperties": false,
                "properties": {
                  "method": {
                    "enum": [
                      "card",
                      "mada",
                      "transfer",
                      "po"
                    ]
                  },
                  "po_number": {
                    "type": "string",
                    "maxLength": 60
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Intent"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "description": "Out of order"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine",
        "x-auth": {
          "kind": "client",
          "roles": [
            "Admin",
            "Approver",
            "Finance",
            "admin",
            "approver",
            "finance"
          ],
          "stepUp": true
        }
      }
    },
    "/api/v1/dev/bookings/{id}/verify-kyb": {
      "post": {
        "operationId": "post_dev_bookings_id_verify_kyb",
        "summary": "DEV ONLY (404 in production): mark the booking organisation KYB-verified (registry adapters are unconfigured in development)",
        "tags": [
          "Bookings",
          "Dev"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-fA-F-]{36}$"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Booking"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine",
        "x-auth": {
          "kind": "client"
        }
      }
    },
    "/api/v1/dev/payments/{id}/confirm": {
      "post": {
        "operationId": "post_dev_payments_id_confirm",
        "summary": "DEV ONLY (404 in production): confirm a payment as finance would",
        "tags": [
          "Payments",
          "Dev"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-fA-F-]{36}$"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Booking"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine",
        "x-auth": {
          "kind": "client"
        }
      }
    },
    "/api/v1/calendar/earliest-start": {
      "get": {
        "operationId": "get_calendar_earliest_start",
        "summary": "Earliest start: 4 working days for every seat (bench, off-bench or on-site; client-clearance roles from the clearance date), counted on hub and client working days",
        "tags": [
          "Calendar"
        ],
        "security": [],
        "parameters": [
          {
            "name": "country",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z]{2}$",
              "default": "SA"
            }
          },
          {
            "name": "bench",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Date and the rule used (R30 §3 shape: date, working_days, weekend, holidays_applied)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine"
      }
    },
    "/api/v1/calendar/slots": {
      "get": {
        "operationId": "get_calendar_slots",
        "summary": "Scoping-call slots in the visitor’s zone (R30 §5 shape: flat { slots: [{ start_utc, end_utc, host }] } plus the day grouping)",
        "tags": [
          "Calendar"
        ],
        "security": [],
        "parameters": [
          {
            "name": "tz",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "time-zone"
            }
          },
          {
            "name": "country",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z]{2}$"
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "days",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 14,
              "default": 7
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Slots",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine"
      }
    },
    "/api/v1/calendar/working-days": {
      "get": {
        "operationId": "get_calendar_working_days",
        "summary": "Working days between two dates for a country (holidays included)",
        "tags": [
          "Calendar"
        ],
        "security": [],
        "parameters": [
          {
            "name": "from",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "to",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "country",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "country",
              "default": "SA"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Count"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine"
      }
    },
    "/api/v1/calls": {
      "post": {
        "operationId": "post_calls",
        "summary": "Book a scoping call → { call_id, ics_url (served), join_url (null + reason without a conferencing adapter), confirmation_sent }",
        "tags": [
          "Calendar"
        ],
        "security": [],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "slot_start_utc",
                  "name",
                  "email"
                ],
                "additionalProperties": false,
                "properties": {
                  "slot_start_utc": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "tz": {
                    "type": "string",
                    "format": "time-zone"
                  },
                  "country": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 2
                  },
                  "name": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 120
                  },
                  "email": {
                    "type": "string",
                    "format": "email"
                  },
                  "company": {
                    "type": "string",
                    "maxLength": 160
                  },
                  "topic": {
                    "type": [
                      "string",
                      "integer",
                      "null"
                    ],
                    "maxLength": 500
                  },
                  "lang": {
                    "enum": [
                      "en",
                      "ar"
                    ]
                  },
                  "quote_id": {
                    "type": "string",
                    "maxLength": 64
                  },
                  "consent": {
                    "type": "object"
                  },
                  "whatsapp": {
                    "type": "string",
                    "maxLength": 40
                  },
                  "brief": {
                    "type": "string",
                    "maxLength": 4000
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Call booked",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "description": "Slot taken"
          },
          "422": {
            "description": "Slot in the past"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine",
        "x-rate-limit-bucket": "write"
      }
    },
    "/api/v1/calls/{id}": {
      "get": {
        "operationId": "get_calls_id",
        "summary": "A booked call (needs the manage token from the confirmation)",
        "tags": [
          "Calendar"
        ],
        "security": [],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^APT-(\\d{4}|DEMO)-\\d{6}$"
            }
          },
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 16,
              "maxLength": 64
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Call"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine"
      }
    },
    "/api/v1/contracts/{id}/document": {
      "get": {
        "operationId": "get_contracts_id_document",
        "summary": "Contract document (honest printable HTML; SHA-256 re-verified against the stored hash)",
        "tags": [
          "Contracts"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-fA-F-]{36}$"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "text/html",
            "content": {
              "text/html": {}
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine"
      }
    },
    "/api/v1/contracts/{id}/sign": {
      "post": {
        "operationId": "post_contracts_id_sign",
        "summary": "Sign one contract document → { signature_id, signed_at, countersigned } (click needs a fresh step-up; e-sign providers answer honestly while unconfigured)",
        "tags": [
          "Contracts"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-fA-F-]{36}$"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "method"
                ],
                "additionalProperties": false,
                "properties": {
                  "method": {
                    "enum": [
                      "click",
                      "docusign",
                      "nafath",
                      "uaepass"
                    ]
                  },
                  "step_up_code": {
                    "type": "string",
                    "maxLength": 12
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Signed"
          },
          "202": {
            "description": "Sent to the e-sign provider queue (pending)"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "description": "Step-up required"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "description": "Out of order"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine",
        "x-auth": {
          "kind": "client",
          "roles": [
            "Admin",
            "Approver",
            "Legal",
            "admin",
            "approver",
            "legal"
          ],
          "stepUp": true
        }
      }
    },
    "/api/v1/intake/forms": {
      "get": {
        "operationId": "get_intake_forms",
        "summary": "Form catalogue: required fields and email policy per form",
        "tags": [
          "Intake"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Forms",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "identity-intake"
      }
    },
    "/api/v1/intake": {
      "post": {
        "operationId": "post_intake",
        "summary": "Submit any public form (stored, referenced, routed; honest channel states)",
        "tags": [
          "Intake"
        ],
        "security": [],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "lang",
                  "fields"
                ],
                "additionalProperties": false,
                "properties": {
                  "form": {
                    "type": "string",
                    "pattern": "^[a-z0-9][a-z0-9_-]{1,59}$"
                  },
                  "form_id": {
                    "type": "string",
                    "pattern": "^[a-z0-9][a-z0-9_-]{1,59}$"
                  },
                  "page": {
                    "type": "string",
                    "maxLength": 300,
                    "pattern": "^/"
                  },
                  "lang": {
                    "enum": [
                      "en",
                      "ar"
                    ]
                  },
                  "fields": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string",
                        "minLength": 2,
                        "maxLength": 120
                      },
                      "email": {
                        "type": "string",
                        "format": "email",
                        "maxLength": 254
                      },
                      "company": {
                        "type": "string",
                        "minLength": 2,
                        "maxLength": 160
                      },
                      "role": {
                        "type": "string",
                        "maxLength": 160
                      },
                      "title": {
                        "type": "string",
                        "maxLength": 160
                      },
                      "country": {
                        "type": "string",
                        "format": "country"
                      },
                      "phone": {
                        "type": "string",
                        "format": "e164"
                      },
                      "message": {
                        "type": "string",
                        "minLength": 2,
                        "maxLength": 4000
                      },
                      "topic": {
                        "type": "string",
                        "maxLength": 160
                      }
                    },
                    "additionalProperties": {
                      "type": [
                        "string",
                        "number",
                        "boolean",
                        "object",
                        "array",
                        "null"
                      ],
                      "maxLength": 2000
                    }
                  },
                  "utm": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string",
                      "maxLength": 200
                    }
                  },
                  "consent": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "contact": {
                        "const": true
                      },
                      "given": {
                        "const": true
                      },
                      "purpose": {
                        "type": "string",
                        "maxLength": 60
                      },
                      "text": {
                        "type": "string",
                        "maxLength": 600
                      },
                      "marketing": {
                        "type": "boolean"
                      },
                      "policy_version": {
                        "type": "string",
                        "maxLength": 20
                      }
                    }
                  },
                  "website": {
                    "type": "string",
                    "maxLength": 200,
                    "description": "Honeypot: leave empty."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Received",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "reference": {
                      "type": "string"
                    },
                    "status": {
                      "type": "string"
                    },
                    "channels": {
                      "type": "object"
                    },
                    "message": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "identity-intake",
        "x-rate-limit-bucket": "write"
      }
    },
    "/api/v1/kyb": {
      "post": {
        "operationId": "post_kyb",
        "summary": "Verify the organisation and its signatory (honest provider states; identity via Nafath, UAE PASS, Sumsub or manual)",
        "tags": [
          "Organisations"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "country",
                  "signatory"
                ],
                "additionalProperties": false,
                "properties": {
                  "org_id": {
                    "type": "string",
                    "minLength": 8,
                    "maxLength": 64,
                    "description": "Defaults to the signed-in person’s organisation; created from this KYB when they have none"
                  },
                  "booking_id": {
                    "type": "string",
                    "maxLength": 64,
                    "description": "The booking this KYB step belongs to (the site flow sends it)"
                  },
                  "legal_name": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 200
                  },
                  "country": {
                    "type": "string",
                    "pattern": "^[A-Za-z]{2}$"
                  },
                  "registry_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 40
                  },
                  "vat_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 24
                  },
                  "signatory": {
                    "type": "object",
                    "required": [
                      "email",
                      "source"
                    ],
                    "additionalProperties": false,
                    "properties": {
                      "name": {
                        "type": [
                          "string",
                          "null"
                        ],
                        "maxLength": 120
                      },
                      "email": {
                        "type": "string",
                        "format": "email",
                        "maxLength": 254
                      },
                      "source": {
                        "enum": [
                          "registry",
                          "delegation"
                        ]
                      },
                      "delegation_doc": {
                        "type": "string",
                        "minLength": 3,
                        "maxLength": 200,
                        "description": "Document id or file name of the delegation letter"
                      }
                    }
                  },
                  "identity": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "object",
                        "required": [
                          "provider"
                        ],
                        "additionalProperties": false,
                        "properties": {
                          "provider": {
                            "enum": [
                              "nafath",
                              "uaepass",
                              "sumsub",
                              "manual"
                            ]
                          }
                        }
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "KYB result",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "enum": [
                        "verified",
                        "pending_review",
                        "pending_identity",
                        "rejected"
                      ]
                    },
                    "checks": {
                      "type": "array"
                    },
                    "next": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "pl-core",
        "x-auth": {
          "kind": "client"
        },
        "x-rate-limit-bucket": "write"
      }
    },
    "/api/v1/kyb/identity/callback": {
      "get": {
        "operationId": "get_kyb_identity_callback",
        "summary": "Return from the identity provider (UAE PASS): records the result for the analyst and sends the buyer back to the flow",
        "tags": [
          "Organisations"
        ],
        "security": [],
        "parameters": [
          {
            "name": "state",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            }
          },
          {
            "name": "code",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2000
            }
          },
          {
            "name": "error",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "302": {
            "description": "Back to the KYB step"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "description": "Unknown state"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "pl-core"
      }
    },
    "/api/mcp": {
      "post": {
        "operationId": "post__api_mcp",
        "summary": "MCP Streamable HTTP endpoint (JSON-RPC 2.0: initialize, ping, tools/list, tools/call)",
        "tags": [
          "MCP"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON-RPC response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Notification accepted"
          },
          "400": {
            "description": "Bad request / missing session"
          },
          "401": {
            "description": "Bad bearer token"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "description": "Unknown session"
          },
          "406": {
            "description": "Accept must include application/json and text/event-stream"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "ai-agents",
        "x-rate-limit-bucket": "mcp_anonymous"
      },
      "delete": {
        "operationId": "delete__api_mcp",
        "summary": "End an MCP session (Mcp-Session-Id)",
        "tags": [
          "MCP"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "204": {
            "description": "Ended"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "description": "Unknown session"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "ai-agents",
        "x-rate-limit-bucket": "mcp_anonymous"
      }
    },
    "/.well-known/mcp.json": {
      "get": {
        "operationId": "get__.well_known_mcp.json",
        "summary": "MCP server card: endpoint, transport, protocol versions, tools, auth",
        "tags": [
          "MCP"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Server card",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "ai-agents"
      }
    },
    "/api/mcp/openapi.json": {
      "get": {
        "operationId": "get__api_mcp_openapi.json",
        "summary": "OpenAPI of the MCP REST mirror (generated from the route table) with the tool schemas",
        "tags": [
          "MCP"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OpenAPI document",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "ai-agents"
      }
    },
    "/api/v1/mcp/tools/{name}": {
      "post": {
        "operationId": "post_mcp_tools_name",
        "summary": "REST mirror: call any MCP tool with its JSON arguments",
        "tags": [
          "MCP"
        ],
        "security": [],
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "required": true,
            "schema": {
              "enum": [
                "estimate_squad_cost",
                "check_availability",
                "get_security_docs",
                "search_talent",
                "request_proposal"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "structuredContent + summary"
          },
          "400": {
            "description": "invalid_argument"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "description": "consent_required"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "ai-agents",
        "x-rate-limit-bucket": "mcp_anonymous"
      }
    },
    "/api/v1/talent/search": {
      "get": {
        "operationId": "get_talent_search",
        "summary": "REST mirror of search_talent (anonymised)",
        "tags": [
          "MCP",
          "Talent OS"
        ],
        "security": [],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "practice",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "seniority",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "mid",
                "senior",
                "lead"
              ]
            }
          },
          {
            "name": "skills",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 400
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 25
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Anonymised results"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "ai-agents"
      }
    },
    "/api/v1/proposals": {
      "post": {
        "operationId": "post_proposals",
        "summary": "Create a draft proposal (REST mirror of request_proposal; public, OAuth proposals:write or client session)",
        "tags": [
          "MCP",
          "Proposals"
        ],
        "security": [],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Draft proposal"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "description": "consent_required"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "ai-agents",
        "x-rate-limit-bucket": "write"
      }
    },
    "/api/v1/me": {
      "get": {
        "operationId": "get_me",
        "summary": "The signed-in person, organisation, role, session and CSRF token",
        "tags": [
          "Auth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Me",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "description": "Not signed in"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "pl-core"
      }
    },
    "/api/v1/auth/session": {
      "get": {
        "operationId": "get_auth_session",
        "summary": "Alias of /v1/me (R28 I-4 name)",
        "tags": [
          "Auth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Me",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "pl-core"
      }
    },
    "/api/v1/metrics": {
      "get": {
        "operationId": "get_metrics",
        "summary": "Published delivery metrics: declared figures with lineage now; monthly delivery KPIs from their first publication (November 2026); null where nothing is published",
        "tags": [
          "Status"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "{ period, first_publication, kpis[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "portals"
      }
    },
    "/.well-known/oauth-authorization-server": {
      "get": {
        "operationId": "get__.well_known_oauth_authorization_server",
        "summary": "OAuth 2.1 authorization server metadata (RFC 8414)",
        "tags": [
          "OAuth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Metadata",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "ai-agents"
      }
    },
    "/.well-known/oauth-protected-resource": {
      "get": {
        "operationId": "get__.well_known_oauth_protected_resource",
        "summary": "Protected resource metadata for the MCP server (RFC 9728)",
        "tags": [
          "OAuth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Metadata",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "ai-agents"
      }
    },
    "/api/oauth/register": {
      "post": {
        "operationId": "post__api_oauth_register",
        "summary": "Dynamic client registration (RFC 7591)",
        "tags": [
          "OAuth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Client metadata + client_id (+ client_secret for confidential clients)"
          },
          "400": {
            "description": "RFC 7591 error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "ai-agents",
        "x-rate-limit-bucket": "write"
      }
    },
    "/api/oauth/authorize": {
      "get": {
        "operationId": "get__api_oauth_authorize",
        "summary": "Authorization request (code + PKCE S256) → redirect to the Client OS consent screen",
        "tags": [
          "OAuth"
        ],
        "security": [],
        "parameters": [
          {
            "name": "response_type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "client_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "redirect_uri",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scope",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "state",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 500
            }
          },
          {
            "name": "code_challenge",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "code_challenge_method",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resource",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "302": {
            "description": "Consent page, or redirect_uri with error"
          },
          "400": {
            "description": "Unknown client or redirect_uri"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "ai-agents"
      }
    },
    "/api/v1/oauth/requests/{id}": {
      "get": {
        "operationId": "get_oauth_requests_id",
        "summary": "Pending authorization request for the consent screen",
        "tags": [
          "OAuth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Request"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "description": "Unknown or expired"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "ai-agents",
        "x-auth": {
          "kind": "client"
        }
      }
    },
    "/api/v1/oauth/requests/{id}/decision": {
      "post": {
        "operationId": "post_oauth_requests_id_decision",
        "summary": "Allow or deny a connected assistant (proposals:write needs an org admin)",
        "tags": [
          "OAuth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "allow"
                ],
                "additionalProperties": false,
                "properties": {
                  "allow": {
                    "type": "boolean"
                  },
                  "org_id": {
                    "type": "string",
                    "format": "uuid"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "{ redirect_to }"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "description": "proposals:write needs admin"
          },
          "404": {
            "description": "Unknown or expired"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "ai-agents",
        "x-auth": {
          "kind": "client"
        }
      }
    },
    "/api/oauth/token": {
      "post": {
        "operationId": "post__api_oauth_token",
        "summary": "Token endpoint: authorization_code (+ code_verifier) and rotating refresh_token",
        "tags": [
          "OAuth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "{ access_token, token_type, expires_in, refresh_token, scope }"
          },
          "400": {
            "description": "RFC 6749 error"
          },
          "401": {
            "description": "invalid_client"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "ai-agents",
        "x-rate-limit-bucket": "auth"
      }
    },
    "/api/oauth/revoke": {
      "post": {
        "operationId": "post__api_oauth_revoke",
        "summary": "Token revocation (RFC 7009): always 200",
        "tags": [
          "OAuth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Revoked (or unknown)"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "ai-agents",
        "x-rate-limit-bucket": "auth"
      }
    },
    "/api/v1/orgs": {
      "post": {
        "operationId": "post_orgs",
        "summary": "Create the buyer organisation; the signed-in person becomes its Admin",
        "tags": [
          "Organisations"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "legal_name",
                  "country"
                ],
                "additionalProperties": false,
                "properties": {
                  "legal_name": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 200
                  },
                  "legal_name_ar": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "country": {
                    "type": "string",
                    "pattern": "^[A-Za-z]{2}$"
                  },
                  "registry_id": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 40
                  },
                  "vat_id": {
                    "type": "string",
                    "minLength": 5,
                    "maxLength": 20
                  },
                  "buyer_type": {
                    "enum": [
                      "enterprise",
                      "startup",
                      "studio",
                      "founder",
                      "government"
                    ]
                  },
                  "buyer_kind": {
                    "enum": [
                      "business",
                      "individual"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "description": "Already in an organisation, or the company is already registered"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "pl-core",
        "x-auth": {
          "kind": "client"
        },
        "x-rate-limit-bucket": "write"
      }
    },
    "/api/v1/orgs/{id}/members": {
      "get": {
        "operationId": "get_orgs_id_members",
        "summary": "Members of your organisation with their roles",
        "tags": [
          "Organisations"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 64
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Members",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "pl-core",
        "x-auth": {
          "kind": "client"
        }
      },
      "post": {
        "operationId": "post_orgs_id_members",
        "summary": "Invite a member with a role (Admin only, fresh step-up)",
        "tags": [
          "Organisations"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 64
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "email",
                  "role"
                ],
                "additionalProperties": false,
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email",
                    "maxLength": 254
                  },
                  "role": {
                    "enum": [
                      "Admin",
                      "Approver",
                      "Finance",
                      "Legal",
                      "Viewer"
                    ]
                  },
                  "name": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 120
                  },
                  "lang": {
                    "enum": [
                      "en",
                      "ar"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Invited",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "description": "Already a member elsewhere"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "pl-core",
        "x-auth": {
          "kind": "client",
          "roles": [
            "Admin"
          ],
          "stepUp": true
        },
        "x-rate-limit-bucket": "write"
      }
    },
    "/api/v1/payments/webhook/{provider}": {
      "post": {
        "operationId": "post_payments_webhook_provider",
        "summary": "Provider webhook (R30 alias of /api/v1/webhooks/{domain}/{provider}): verified by the configured adapter; 503 while the provider is unconfigured, 501 for a provider without an adapter",
        "tags": [
          "Payments",
          "Webhooks"
        ],
        "security": [],
        "parameters": [
          {
            "name": "provider",
            "in": "path",
            "required": true,
            "schema": {
              "enum": [
                "stripe",
                "moyasar",
                "hyperpay",
                "docusign",
                "nafath",
                "uaepass",
                "zatca"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Accepted (new or duplicate deliveries)"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "description": "Signature invalid"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          },
          "501": {
            "description": "Not implemented"
          },
          "503": {
            "description": "Provider not connected"
          }
        },
        "x-owner": "money-spine",
        "x-rate-limit-bucket": "public"
      }
    },
    "/api/v1/price-book": {
      "get": {
        "operationId": "get_price_book",
        "summary": "The price book (public fields) — same document, version and hash as /api/v1/pricebook/current",
        "tags": [
          "Pricing"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Price book",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine"
      }
    },
    "/api/v1/estimate": {
      "post": {
        "operationId": "post_estimate",
        "summary": "Price a squad with the one engine (lines, discounts ≤ cap, lane from the USD reference, VAT by entity)",
        "tags": [
          "Pricing"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "input": {
                    "type": "object",
                    "additionalProperties": true,
                    "properties": {
                      "squad": {
                        "type": "array",
                        "maxItems": 40,
                        "items": {
                          "type": "object",
                          "required": [
                            "level"
                          ],
                          "properties": {
                            "practice": {
                              "type": "string",
                              "maxLength": 40
                            },
                            "role": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "maxLength": 120
                            },
                            "level": {
                              "type": "string",
                              "maxLength": 20
                            },
                            "count": {
                              "type": "integer",
                              "minimum": 1,
                              "maximum": 40
                            },
                            "hours": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "minimum": 1,
                              "maximum": 200
                            },
                            "onsite": {
                              "type": "boolean"
                            },
                            "onsite_city": {
                              "type": "string",
                              "maxLength": 40
                            }
                          }
                        }
                      },
                      "term_months": {
                        "enum": [
                          1,
                          3,
                          6,
                          12
                        ]
                      },
                      "start": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "rush": {
                        "type": "boolean"
                      },
                      "verified_startup": {
                        "type": "boolean"
                      },
                      "pack_id": {
                        "type": "string",
                        "maxLength": 40
                      },
                      "currency": {
                        "type": "string",
                        "pattern": "^[A-Za-z]{3}$"
                      },
                      "buyer": {
                        "type": "object",
                        "properties": {
                          "country": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "maxLength": 2
                          },
                          "type": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "maxLength": 20
                          }
                        }
                      },
                      "today": {
                        "type": "string",
                        "format": "date"
                      },
                      "visits": {
                        "type": "object",
                        "properties": {
                          "days": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 60
                          },
                          "city": {
                            "type": "string",
                            "maxLength": 40
                          }
                        }
                      }
                    }
                  },
                  "seats": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 40,
                    "items": {
                      "type": "object",
                      "required": [
                        "role_id",
                        "level"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "role_id": {
                          "type": "string",
                          "pattern": "^hire-[a-z0-9-]+$"
                        },
                        "practice": {
                          "type": "string"
                        },
                        "level": {
                          "enum": [
                            "mid",
                            "senior",
                            "lead"
                          ]
                        },
                        "hours": {
                          "enum": [
                            80,
                            160
                          ],
                          "default": 160
                        },
                        "count": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 20,
                          "default": 1
                        },
                        "onsite": {
                          "enum": [
                            "none",
                            "riyadh",
                            "dubai"
                          ],
                          "default": "none"
                        }
                      }
                    }
                  },
                  "currency": {
                    "enum": [
                      "USD",
                      "SAR",
                      "AED",
                      "QAR",
                      "EUR",
                      "GBP"
                    ]
                  },
                  "term_months": {
                    "enum": [
                      1,
                      3,
                      6,
                      12
                    ]
                  },
                  "buyer_country": {
                    "type": "string",
                    "format": "country"
                  },
                  "buyer_type": {
                    "enum": [
                      "enterprise",
                      "startup",
                      "studio",
                      "founder",
                      "government"
                    ]
                  },
                  "buyer_kind": {
                    "enum": [
                      "business",
                      "individual"
                    ]
                  },
                  "vat_id_valid": {
                    "type": "boolean"
                  },
                  "rush": {
                    "type": "boolean"
                  },
                  "startup_verified": {
                    "type": "boolean"
                  },
                  "promotion_id": {
                    "type": "string",
                    "maxLength": 60
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Estimate",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine",
        "x-rate-limit-bucket": "public"
      }
    },
    "/api/v1/pricebook/current": {
      "get": {
        "operationId": "get_pricebook_current",
        "summary": "The price book (public fields only) — the same book and engine the site ships (pricing/price_book.json)",
        "tags": [
          "Pricing"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Price book",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine"
      }
    },
    "/api/v1/products/{code}/fixed-price": {
      "get": {
        "operationId": "get_products_code_fixed_price",
        "summary": "Fixed-scope / pilot / retainer price from the R30 book (milestones sum to the price)",
        "tags": [
          "Pricing"
        ],
        "security": [],
        "parameters": [
          {
            "name": "code",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9-]+$"
            }
          },
          {
            "name": "currency",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z]{3}$",
              "default": "USD"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Fixed price"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine"
      }
    },
    "/api/v1/products/{code}/price": {
      "get": {
        "operationId": "get_products_code_price",
        "summary": "Derived bundle price for a pack (never above à la carte; implied discount within the cap)",
        "tags": [
          "Pricing"
        ],
        "security": [],
        "parameters": [
          {
            "name": "code",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9-]+$"
            }
          },
          {
            "name": "currency",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "USD",
                "SAR",
                "AED",
                "QAR",
                "EUR",
                "GBP"
              ],
              "default": "USD"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Pack price"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine"
      }
    },
    "/api/v1/quotes": {
      "post": {
        "operationId": "post_quotes",
        "summary": "Create a quote from an R30 estimate input (or a fixed / Growth product) → human id, share token, validity, document URL",
        "tags": [
          "Quotes"
        ],
        "security": [],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "input": {
                    "type": [
                      "object",
                      "null"
                    ],
                    "additionalProperties": true,
                    "properties": {
                      "squad": {
                        "type": "array",
                        "maxItems": 40,
                        "items": {
                          "type": "object",
                          "required": [
                            "level"
                          ],
                          "properties": {
                            "practice": {
                              "type": "string",
                              "maxLength": 40
                            },
                            "role": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "maxLength": 120
                            },
                            "level": {
                              "type": "string",
                              "maxLength": 20
                            },
                            "count": {
                              "type": "integer",
                              "minimum": 1,
                              "maximum": 40
                            },
                            "hours": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "minimum": 1,
                              "maximum": 200
                            },
                            "onsite": {
                              "type": "boolean"
                            },
                            "onsite_city": {
                              "type": "string",
                              "maxLength": 40
                            }
                          }
                        }
                      },
                      "term_months": {
                        "enum": [
                          1,
                          3,
                          6,
                          12
                        ]
                      },
                      "start": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "rush": {
                        "type": "boolean"
                      },
                      "verified_startup": {
                        "type": "boolean"
                      },
                      "pack_id": {
                        "type": "string",
                        "maxLength": 40
                      },
                      "currency": {
                        "type": "string",
                        "pattern": "^[A-Za-z]{3}$"
                      },
                      "buyer": {
                        "type": "object",
                        "properties": {
                          "country": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "maxLength": 2
                          },
                          "type": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "maxLength": 20
                          }
                        }
                      },
                      "today": {
                        "type": "string",
                        "format": "date"
                      },
                      "visits": {
                        "type": "object",
                        "properties": {
                          "days": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 60
                          },
                          "city": {
                            "type": "string",
                            "maxLength": 40
                          }
                        }
                      }
                    }
                  },
                  "product_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 40
                  },
                  "growth": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "term": {
                        "enum": [
                          "term3",
                          "term6"
                        ]
                      },
                      "tier": {
                        "type": "string",
                        "maxLength": 20,
                        "description": "Deprecated (R30 tiers); maps to term3"
                      },
                      "market": {
                        "enum": [
                          "gcc",
                          "eu",
                          "us"
                        ]
                      }
                    }
                  },
                  "contact": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "name": {
                        "type": "string",
                        "maxLength": 120
                      },
                      "email": {
                        "type": "string",
                        "format": "email"
                      },
                      "company": {
                        "type": "string",
                        "maxLength": 160
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Quote issued",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine",
        "x-rate-limit-bucket": "write"
      }
    },
    "/api/v1/quotes/{id}": {
      "get": {
        "operationId": "get_quotes_id",
        "summary": "Quote by id; `/quotes/{id}.pdf` serves the document: PDF when a PDF engine is connected, otherwise an honest printable HTML (Content-Type text/html)",
        "tags": [
          "Quotes"
        ],
        "security": [],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-fA-F-]{36}(\\.pdf)?$"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Quote"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine"
      }
    },
    "/api/v1/q/{token}": {
      "get": {
        "operationId": "get_q_token",
        "summary": "Shared quote by share token (read-only, no contact data)",
        "tags": [
          "Quotes"
        ],
        "security": [],
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 16,
              "maxLength": 64,
              "pattern": "^[A-Za-z0-9_-]+$"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Quote"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "description": "Unknown token"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "410": {
            "description": "Expired"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "money-spine"
      }
    },
    "/api/v1/status": {
      "get": {
        "operationId": "get_status",
        "summary": "Public status from real probes of our own components (no data where unmonitored; never a static green)",
        "tags": [
          "Status"
        ],
        "security": [],
        "parameters": [
          {
            "name": "days",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 90
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "{ status, components[{ id, name, state, uptime_90d_pct, last_probe_at, … }], incidents: [] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "portals"
      }
    },
    "/api/v1/status/incidents": {
      "get": {
        "operationId": "get_status_incidents",
        "summary": "Published incidents (none recorded yet: the list is empty, not hidden)",
        "tags": [
          "Status"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Page of incidents",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "portals"
      }
    },
    "/api/v1/health": {
      "get": {
        "operationId": "get_health",
        "summary": "Service health (public, minimal: status + price-book version)",
        "tags": [
          "System"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Healthy",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          },
          "503": {
            "description": "Unhealthy"
          }
        },
        "x-owner": "platform-architect"
      }
    },
    "/api/v1/health/live": {
      "get": {
        "operationId": "get_health_live",
        "summary": "Liveness probe",
        "tags": [
          "System"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Process is up"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "platform-architect"
      }
    },
    "/api/v1/health/ready": {
      "get": {
        "operationId": "get_health_ready",
        "summary": "Readiness probe (database, migrations, the one price book; in live mode also the go-live inputs)",
        "tags": [
          "System"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Ready"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          },
          "503": {
            "description": "Not ready"
          }
        },
        "x-owner": "platform-architect"
      }
    },
    "/api/openapi.json": {
      "get": {
        "operationId": "get__api_openapi.json",
        "summary": "OpenAPI 3.1 document generated from the route table",
        "tags": [
          "System"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OpenAPI document",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "platform-architect"
      }
    },
    "/api/v1/meta/markets": {
      "get": {
        "operationId": "get_meta_markets",
        "summary": "Markets for the header selector: currency, contracting entity, VAT treatment, meeting city, weekend, earliest start (D7)",
        "tags": [
          "Meta"
        ],
        "security": [],
        "parameters": [
          {
            "name": "lang",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "en",
                "ar"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Markets",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "platform-architect"
      }
    },
    "/api/v1/security/csp-report": {
      "post": {
        "operationId": "post_security_csp_report",
        "summary": "CSP violation reports (report-to / report-uri)",
        "tags": [
          "System"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "204": {
            "description": "Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "platform-architect",
        "x-rate-limit-bucket": "reports"
      }
    },
    "/.well-known/security.txt": {
      "get": {
        "operationId": "get__.well_known_security.txt",
        "summary": "security.txt (RFC 9116)",
        "tags": [
          "System"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "security.txt",
            "content": {
              "text/plain": {}
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "platform-architect"
      }
    },
    "/.well-known/did.json": {
      "get": {
        "operationId": "get__.well_known_did.json",
        "summary": "DID document (did:web) with the key that signs credentials and attestations",
        "tags": [
          "Trust"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "DID document",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "platform-architect"
      }
    },
    "/api/v1/talent/applications": {
      "post": {
        "operationId": "post_talent_applications",
        "summary": "Apply as a specialist (≤ 5 steps: one payload or step-wise with a continue token)",
        "description": "Shapes: { profile, experience, availability?, documents?, consent } · { step: 1..5, data, reference?, continue_token? } · flat { email, name, practice, role_id?, country, lang, level?, consent }. Screening runs through the screening adapter; while it is unconfigured the item goes to the talent-ops inbox (honest pending state).",
        "tags": [
          "Talent OS"
        ],
        "security": [],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "description": "See description; per-step schemas in x-steps.",
                "x-steps": {
                  "profile": {
                    "type": "object",
                    "required": [
                      "name",
                      "email"
                    ],
                    "additionalProperties": false,
                    "properties": {
                      "name": {
                        "type": "string",
                        "minLength": 2,
                        "maxLength": 120
                      },
                      "email": {
                        "type": "string",
                        "format": "email",
                        "maxLength": 200
                      },
                      "country": {
                        "type": "string",
                        "pattern": "^[A-Z]{2}$"
                      },
                      "city": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 80
                      },
                      "phone": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 30
                      },
                      "lang": {
                        "enum": [
                          "en",
                          "ar"
                        ]
                      },
                      "linkedin_url": {
                        "type": "string",
                        "maxLength": 300,
                        "pattern": "^https://"
                      }
                    }
                  },
                  "experience": {
                    "type": "object",
                    "required": [
                      "practice",
                      "level"
                    ],
                    "additionalProperties": false,
                    "properties": {
                      "practice": {
                        "enum": [
                          "ai-data",
                          "cybersecurity",
                          "game-development",
                          "mobile-web",
                          "cloud-complex-systems",
                          "design",
                          "marketing",
                          "business-development",
                          "sales"
                        ]
                      },
                      "role_id": {
                        "type": "string",
                        "pattern": "^[a-z0-9-]{3,80}$"
                      },
                      "level": {
                        "enum": [
                          "mid",
                          "senior",
                          "lead"
                        ]
                      },
                      "years_experience": {
                        "type": "integer",
                        "minimum": 4,
                        "maximum": 50
                      },
                      "skills": {
                        "type": "array",
                        "maxItems": 20,
                        "items": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 40
                        }
                      },
                      "languages": {
                        "type": "array",
                        "maxItems": 8,
                        "items": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 20
                        }
                      },
                      "headline": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 160
                      }
                    }
                  },
                  "availability": {
                    "type": "object",
                    "required": [
                      "state"
                    ],
                    "additionalProperties": false,
                    "properties": {
                      "state": {
                        "enum": [
                          "now",
                          "from_date",
                          "unavailable"
                        ]
                      },
                      "from": {
                        "type": "string",
                        "format": "date"
                      },
                      "hours_per_week": {
                        "type": "integer",
                        "minimum": 10,
                        "maximum": 60
                      },
                      "timezone": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 60
                      },
                      "onsite_ok": {
                        "type": "array",
                        "items": {
                          "enum": [
                            "riyadh",
                            "dubai",
                            "doha",
                            "cairo"
                          ]
                        }
                      },
                      "residency_patterns": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 20
                        }
                      }
                    }
                  },
                  "documents": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "cv_document_id": {
                        "type": "string",
                        "maxLength": 80
                      },
                      "portfolio_urls": {
                        "type": "array",
                        "maxItems": 5,
                        "items": {
                          "type": "string",
                          "maxLength": 300,
                          "pattern": "^https://"
                        }
                      }
                    }
                  },
                  "consent": {
                    "type": "object",
                    "required": [
                      "processing",
                      "policy_version"
                    ],
                    "additionalProperties": false,
                    "properties": {
                      "processing": {
                        "const": true
                      },
                      "policy_version": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 40
                      },
                      "background_check": {
                        "type": "boolean"
                      },
                      "marketing": {
                        "type": "boolean"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Step saved"
          },
          "201": {
            "description": "Draft created (step-wise, step 1) with continue_token"
          },
          "202": {
            "description": "Submitted: screening pending",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation (per step)"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "description": "Already submitted"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "portals",
        "x-rate-limit-bucket": "auth"
      }
    },
    "/api/v1/talent/me": {
      "get": {
        "operationId": "get_talent_me",
        "summary": "My Talent OS profile: application steps, stage, availability, assessments, credentials",
        "tags": [
          "Talent OS"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Profile",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "description": "Sign in"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "portals",
        "x-auth": {
          "kind": "talent"
        }
      }
    },
    "/api/v1/talent/documents": {
      "post": {
        "operationId": "post_talent_documents",
        "summary": "Upload my CV (PDF or DOCX, ≤ 5 MB) for application step 4 → cv_document_id (storage adapter, honest state)",
        "tags": [
          "Talent OS"
        ],
        "security": [],
        "parameters": [
          {
            "name": "reference",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 40
            }
          },
          {
            "name": "continue_token",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 80
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "201": {
            "description": "{ document_id, sha256, bytes, storage }"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "description": "Unknown application or token"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "415": {
            "description": "PDF or DOCX only"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "portals",
        "x-rate-limit-bucket": "uploads"
      }
    },
    "/api/v1/talent/application": {
      "get": {
        "operationId": "get_talent_application",
        "summary": "My application: step state (≤ 5 steps), status and screening state",
        "tags": [
          "Talent OS"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Application",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "description": "No application"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "portals",
        "x-auth": {
          "kind": "talent"
        }
      }
    },
    "/api/v1/talent/application/review-request": {
      "post": {
        "operationId": "post_talent_application_review_request",
        "summary": "Ask for a human review of any automated step (GDPR Art. 22, PDPL, EU AI Act)",
        "tags": [
          "Talent OS"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "step"
                ],
                "additionalProperties": false,
                "properties": {
                  "step": {
                    "enum": [
                      "screening",
                      "assessment",
                      "ai_interview",
                      "matching",
                      "other"
                    ]
                  },
                  "note": {
                    "type": "string",
                    "maxLength": 2000
                  }
                }
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Review requested (talent_ops inbox, SLA 2 working days)"
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "portals",
        "x-auth": {
          "kind": "talent"
        }
      }
    },
    "/api/v1/talent/assessments/start": {
      "post": {
        "operationId": "post_talent_assessments_start",
        "summary": "Start my technical assessment (assessments adapter; manual invitation while unconfigured)",
        "tags": [
          "Talent OS"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "preferred_language": {
                    "type": "string",
                    "maxLength": 30
                  }
                }
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Assessment pending or invited",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "description": "No talent profile"
          },
          "409": {
            "description": "Application not submitted"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "portals",
        "x-auth": {
          "kind": "talent"
        }
      }
    },
    "/api/v1/talent/credentials": {
      "get": {
        "operationId": "get_talent_credentials",
        "summary": "My issued credentials (\"Remote Pro Ai Vetted\", Open Badges 3.0 / VC 2.0)",
        "tags": [
          "Talent OS"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Credentials",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "portals",
        "x-auth": {
          "kind": "talent"
        }
      }
    },
    "/api/v1/talent/availability": {
      "put": {
        "operationId": "put_talent_availability",
        "summary": "Set my availability (feeds the public availability bands; counts below 5 are never shown)",
        "tags": [
          "Talent OS"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "state"
                ],
                "additionalProperties": false,
                "properties": {
                  "state": {
                    "enum": [
                      "now",
                      "from_date",
                      "unavailable"
                    ]
                  },
                  "from": {
                    "type": "string",
                    "format": "date"
                  },
                  "hours_per_week": {
                    "type": "integer",
                    "minimum": 10,
                    "maximum": 60
                  },
                  "timezone": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 60
                  },
                  "onsite_ok": {
                    "type": "array",
                    "items": {
                      "enum": [
                        "riyadh",
                        "dubai",
                        "doha",
                        "cairo"
                      ]
                    }
                  },
                  "residency_patterns": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 20
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Saved, with the public band for my practice",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "portals",
        "x-auth": {
          "kind": "talent"
        }
      }
    },
    "/api/v1/talent/payouts": {
      "get": {
        "operationId": "get_talent_payouts",
        "summary": "My payouts (payouts adapter mode reported honestly)",
        "tags": [
          "Talent OS"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Payouts",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "portals",
        "x-auth": {
          "kind": "talent"
        }
      }
    },
    "/api/v1/tour": {
      "get": {
        "operationId": "get_tour",
        "summary": "Product-tour snapshot of the demo account (Client OS view, read-only, watermarked)",
        "tags": [
          "Tour"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Demo snapshot",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "description": "Demo not seeded"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "portals"
      }
    },
    "/api/v1/verify/{credential_id}": {
      "get": {
        "operationId": "get_verify_credential_id",
        "summary": "Verify a \"Remote Pro Ai Vetted\" credential (urn:uuid, uuid or RPV-… id): signature, issuer key, expiry, revocation",
        "tags": [
          "Trust"
        ],
        "security": [],
        "parameters": [
          {
            "name": "credential_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 3,
              "maxLength": 120
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "{ valid, status, issued_to_initials, role, level, issued_at, issuer_key_id, … }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "description": "Unknown credential"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "identity-intake"
      }
    },
    "/api/v1/verify/credential": {
      "post": {
        "operationId": "post_verify_credential",
        "summary": "Verify a pasted VC document (signature, issuer, expiry, status list)",
        "tags": [
          "Trust"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "credential"
                ],
                "additionalProperties": false,
                "properties": {
                  "credential": {
                    "type": "object"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "{ verified, checks, status }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "identity-intake",
        "x-rate-limit-bucket": "write"
      }
    },
    "/api/v1/credentials/status/{list}": {
      "get": {
        "operationId": "get_credentials_status_list",
        "summary": "Signed BitstringStatusListCredential (revocation)",
        "tags": [
          "Trust"
        ],
        "security": [],
        "parameters": [
          {
            "name": "list",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 999
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Status list credential",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "description": "No such list"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "identity-intake"
      }
    },
    "/api/v1/credentials/{id}": {
      "get": {
        "operationId": "get_credentials_id",
        "summary": "The credential document (VC 2.0 / Open Badges 3.0, eddsa-jcs-2022 proof)",
        "tags": [
          "Trust"
        ],
        "security": [],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 3,
              "maxLength": 120
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Verifiable credential",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "description": "Unknown credential"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "identity-intake"
      }
    },
    "/api/growth/v1/fit-check": {
      "post": {
        "operationId": "post__api_growth_v1_fit_check",
        "summary": "Fit score (8 criteria, weights from the playbook) → proceed ≥ 70 · review 55–69 · decline < 55",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-rate-limit-bucket": "public"
      }
    },
    "/api/growth/v1/roi": {
      "post": {
        "operationId": "post__api_growth_v1_roi",
        "summary": "ROI calculator (≈ 1.3 × ACV at 10 meetings; breakeven close rate; honest caveats)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "acv"
                ],
                "properties": {
                  "acv": {
                    "type": "number"
                  },
                  "currency": {
                    "type": "string"
                  },
                  "meetings": {
                    "type": "number"
                  },
                  "qhm": {
                    "type": "number"
                  },
                  "cost": {
                    "type": "number"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-rate-limit-bucket": "public"
      }
    },
    "/api/growth/v1/offer": {
      "get": {
        "operationId": "get__api_growth_v1_offer",
        "summary": "The Growth Team offer from the price book: 3-month plan (USD 6,000 / SAR 22,500 a month) or 6-month plan (USD 5,000 / SAR 18,750), fixed term, no auto-renewal; a dedicated account manager; 10 counted meetings a month guaranteed (month 1: 6, Ramadan: 7); extras beyond 10 within the client cap (0 / 2 / 5 / unlimited, default 2) at USD 500 + VAT; refund per missing meeting = fee ÷ 10 (cash or 120 % credit)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/tiers": {
      "get": {
        "operationId": "get__api_growth_v1_tiers",
        "summary": "Deprecated alias of /offer (the tiers were retired on 12 Oct 2026); same body",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/public/founding-50": {
      "get": {
        "operationId": "get__api_growth_v1_public_founding_50",
        "summary": "Retired (12 Oct 2026: the Founding-50 offer no longer exists) — always { remaining: null, status: \"retired\" } so older pages render nothing",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/public/qhm-definition": {
      "get": {
        "operationId": "get__api_growth_v1_public_qhm_definition",
        "summary": "The public held-meeting definition: the 7 criteria a meeting must meet to count, with the quality-score weights and thresholds",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/orders": {
      "post": {
        "operationId": "post__api_growth_v1_orders",
        "summary": "Growth order (booking kind `growth`): term (term3 | term6) + market + schedule_a → order recorded (state scoped, next account), outbox event for CO, G1 inbox gate",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "market"
                ],
                "properties": {
                  "term": {
                    "type": "string",
                    "enum": [
                      "term3",
                      "term6"
                    ]
                  },
                  "tier": {
                    "type": "string",
                    "maxLength": 20,
                    "description": "Deprecated (R30); ignored — the default plan term3 applies when term is absent"
                  },
                  "market": {
                    "type": "string",
                    "enum": [
                      "gcc",
                      "eu",
                      "us"
                    ]
                  },
                  "currency": {
                    "type": "string",
                    "enum": [
                      "USD",
                      "SAR",
                      "AED",
                      "EUR",
                      "GBP"
                    ]
                  },
                  "schedule_a": {
                    "type": "object"
                  },
                  "fit": {
                    "type": "object"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Order recorded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-rate-limit-bucket": "write"
      }
    },
    "/api/growth/v1/orders/{id}": {
      "get": {
        "operationId": "get__api_growth_v1_orders_id",
        "summary": "Growth order status (booking_id once CO links the kernel booking)",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/demo/ops/op/today": {
      "get": {
        "operationId": "get__api_growth_v1_demo_ops_op_today",
        "summary": "Operator tour — today on the frozen demo tenant (demo: true)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "name": "client",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lane",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "decision",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "op",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/demo/ops/op/queue": {
      "get": {
        "operationId": "get__api_growth_v1_demo_ops_op_queue",
        "summary": "Operator tour — queue on the frozen demo tenant (demo: true)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "name": "client",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lane",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "decision",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "op",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/demo/ops/op/confirmations": {
      "get": {
        "operationId": "get__api_growth_v1_demo_ops_op_confirmations",
        "summary": "Operator tour — confirmations on the frozen demo tenant (demo: true)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "name": "client",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lane",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "decision",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "op",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/demo/ops/op/inbox": {
      "get": {
        "operationId": "get__api_growth_v1_demo_ops_op_inbox",
        "summary": "Operator tour — inbox on the frozen demo tenant (demo: true)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "name": "client",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lane",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "decision",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "op",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/demo/ops/op/pipeline": {
      "get": {
        "operationId": "get__api_growth_v1_demo_ops_op_pipeline",
        "summary": "Operator tour — pipeline on the frozen demo tenant (demo: true)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "name": "client",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lane",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "decision",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "op",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/demo/ops/op/lists/coverage": {
      "get": {
        "operationId": "get__api_growth_v1_demo_ops_op_lists_coverage",
        "summary": "Operator tour — lists/coverage on the frozen demo tenant (demo: true)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "name": "client",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lane",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "decision",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "op",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/demo/ops/op/compliance/log": {
      "get": {
        "operationId": "get__api_growth_v1_demo_ops_op_compliance_log",
        "summary": "Operator tour — compliance/log on the frozen demo tenant (demo: true)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "name": "client",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lane",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "decision",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "op",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/demo/ops/op/health": {
      "get": {
        "operationId": "get__api_growth_v1_demo_ops_op_health",
        "summary": "Operator tour — health on the frozen demo tenant (demo: true)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "name": "client",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lane",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "decision",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "op",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/demo/ops/op/coaching": {
      "get": {
        "operationId": "get__api_growth_v1_demo_ops_op_coaching",
        "summary": "Operator tour — coaching on the frozen demo tenant (demo: true)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "name": "client",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lane",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "decision",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "op",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/demo/ops/op/scorecard": {
      "get": {
        "operationId": "get__api_growth_v1_demo_ops_op_scorecard",
        "summary": "Operator tour — scorecard on the frozen demo tenant (demo: true)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "name": "client",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lane",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "decision",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "op",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/demo/ops/op/precall/{contact}": {
      "get": {
        "operationId": "get__api_growth_v1_demo_ops_op_precall_contact",
        "summary": "Operator tour — pre-call card on the demo tenant",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "name": "contact",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/app/proof": {
      "get": {
        "operationId": "get__api_growth_v1_app_proof",
        "summary": "Client — Proof-of-work: ?level=L1 counts · ?level=L2&kind=call|dials_by_hour|message|li_manual|reply|enrichment|g4|brief|triple_lock|held rows (\"drafted by AI · approved by {name} at {time} · template v{n} · consent basis\")",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "level",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance",
            "sales_user",
            "Viewer",
            "Legal"
          ]
        }
      }
    },
    "/api/growth/v1/demo/app/proof": {
      "get": {
        "operationId": "get__api_growth_v1_demo_app_proof",
        "summary": "Portal tour — proof on the frozen demo tenant",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "name": "level",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/app/needs-you": {
      "get": {
        "operationId": "get__api_growth_v1_app_needs_you",
        "summary": "Client — \"Needs you\" strip: accept/reject windows and client approvals with timers",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "level",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance",
            "sales_user",
            "Viewer",
            "Legal",
            "attendee"
          ]
        }
      }
    },
    "/api/growth/v1/demo/app/needs-you": {
      "get": {
        "operationId": "get__api_growth_v1_demo_app_needs_you",
        "summary": "Portal tour — needs-you on the frozen demo tenant",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "name": "level",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/app/presence": {
      "get": {
        "operationId": "get__api_growth_v1_app_presence",
        "summary": "Client — Your Growth Team: the Team Lead and 4 Senior SDRs by role (member names are not disclosed), languages, working hours, live presence (telephony/session/schedule) and cover arrangements",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "level",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance",
            "sales_user",
            "Viewer",
            "Legal",
            "attendee"
          ]
        }
      }
    },
    "/api/growth/v1/demo/app/presence": {
      "get": {
        "operationId": "get__api_growth_v1_demo_app_presence",
        "summary": "Portal tour — presence on the frozen demo tenant",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "name": "level",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/app/promises": {
      "get": {
        "operationId": "get__api_growth_v1_app_promises",
        "summary": "Client — Promises board (first meeting 14 bd, brief 24 h, kit 4 h, replacement 10 bd, escalation 1 h) + what we owe you",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "level",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance",
            "sales_user",
            "Viewer",
            "Legal"
          ]
        }
      }
    },
    "/api/growth/v1/demo/app/promises": {
      "get": {
        "operationId": "get__api_growth_v1_demo_app_promises",
        "summary": "Portal tour — promises on the frozen demo tenant",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "name": "level",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/app/campaign-health": {
      "get": {
        "operationId": "get__api_growth_v1_app_campaign_health",
        "summary": "Client — Campaign Health (client view: attainment 30 · show 15 · meeting quality 15 · meeting→opportunity 15 · runway 10 · client actions 15) — never the Relationship Health",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "level",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance",
            "sales_user",
            "Viewer",
            "Legal",
            "attendee"
          ]
        }
      }
    },
    "/api/growth/v1/demo/app/campaign-health": {
      "get": {
        "operationId": "get__api_growth_v1_demo_app_campaign_health",
        "summary": "Portal tour — campaign-health on the frozen demo tenant",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "name": "level",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/app/notifications": {
      "get": {
        "operationId": "get__api_growth_v1_app_notifications",
        "summary": "Client — Client notifications log (sent from Remote Pro Ai's own channel; quiet hours 21:00–08:00, Friday quiet GCC, ≤ 3 non-meeting pushes/day)",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "level",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance",
            "sales_user",
            "Viewer",
            "Legal",
            "attendee"
          ]
        }
      }
    },
    "/api/growth/v1/demo/app/notifications": {
      "get": {
        "operationId": "get__api_growth_v1_demo_app_notifications",
        "summary": "Portal tour — notifications on the frozen demo tenant",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "name": "level",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/app/notifications/prefs": {
      "get": {
        "operationId": "get__api_growth_v1_app_notifications_prefs",
        "summary": "Client — Notification preferences (per user; defaults = B §3.6; compliance_incident and period_statement are mandatory)",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "level",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance",
            "sales_user",
            "Viewer",
            "Legal",
            "attendee"
          ]
        }
      },
      "put": {
        "operationId": "put__api_growth_v1_app_notifications_prefs",
        "summary": "Update notification preferences (events → channels, quiet hours, locale); 422 mandatory_event",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "events": {
                    "type": "object"
                  },
                  "quiet": {
                    "type": "object"
                  },
                  "locale": {
                    "type": "string",
                    "enum": [
                      "ar",
                      "en"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance",
            "sales_user",
            "Viewer",
            "Legal",
            "attendee"
          ]
        },
        "x-rate-limit-bucket": "write"
      }
    },
    "/api/growth/v1/demo/app/notifications/prefs": {
      "get": {
        "operationId": "get__api_growth_v1_demo_app_notifications_prefs",
        "summary": "Portal tour — notifications/prefs on the frozen demo tenant",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "name": "level",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/app/runway": {
      "get": {
        "operationId": "get__api_growth_v1_app_runway",
        "summary": "Client — List runway for the Accounts screen (months, RAG, universe, consumption)",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "level",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance",
            "sales_user",
            "Viewer",
            "Legal",
            "attendee"
          ]
        }
      }
    },
    "/api/growth/v1/demo/app/runway": {
      "get": {
        "operationId": "get__api_growth_v1_demo_app_runway",
        "summary": "Portal tour — runway on the frozen demo tenant",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "name": "level",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/app/meetings/{id}/rate": {
      "post": {
        "operationId": "post__api_growth_v1_app_meetings_id_rate",
        "summary": "Rate a held meeting (1–5 stars + would take again) — feeds the Team Lead's quality review",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "stars"
                ],
                "properties": {
                  "stars": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 5
                  },
                  "would_take_again": {
                    "type": "boolean"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance",
            "sales_user",
            "Viewer",
            "Legal",
            "attendee"
          ]
        },
        "x-rate-limit-bucket": "write"
      }
    },
    "/api/growth/v1/app/home": {
      "get": {
        "operationId": "get__api_growth_v1_app_home",
        "summary": "Client portal — home screen data (tenant-scoped)",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance",
            "sales_user",
            "Viewer",
            "Legal",
            "attendee"
          ]
        }
      }
    },
    "/api/growth/v1/demo/app/home": {
      "get": {
        "operationId": "get__api_growth_v1_demo_app_home",
        "summary": "Portal tour — home screen on the frozen demo tenant (demo: true)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/app/activity": {
      "get": {
        "operationId": "get__api_growth_v1_app_activity",
        "summary": "Client portal — activity screen data (tenant-scoped)",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance",
            "sales_user",
            "Viewer",
            "Legal",
            "attendee"
          ]
        }
      }
    },
    "/api/growth/v1/demo/app/activity": {
      "get": {
        "operationId": "get__api_growth_v1_demo_app_activity",
        "summary": "Portal tour — activity screen on the frozen demo tenant (demo: true)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/app/meetings": {
      "get": {
        "operationId": "get__api_growth_v1_app_meetings",
        "summary": "Client portal — meetings screen data (tenant-scoped)",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "tab",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "upcoming",
                "awaiting_decision",
                "counted",
                "not_counted",
                "all"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance",
            "sales_user",
            "Viewer",
            "Legal",
            "attendee"
          ]
        }
      }
    },
    "/api/growth/v1/demo/app/meetings": {
      "get": {
        "operationId": "get__api_growth_v1_demo_app_meetings",
        "summary": "Portal tour — meetings screen on the frozen demo tenant (demo: true)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "name": "tab",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/app/accounts": {
      "get": {
        "operationId": "get__api_growth_v1_app_accounts",
        "summary": "Client portal — accounts screen data (tenant-scoped)",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance",
            "sales_user",
            "Viewer",
            "Legal",
            "attendee"
          ]
        }
      },
      "post": {
        "operationId": "post__api_growth_v1_app_accounts",
        "summary": "Add a target account (registry check follows; client source)",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "name"
                ],
                "properties": {
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "domain": {
                    "type": "string"
                  },
                  "sector": {
                    "type": "string"
                  },
                  "registry_no": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Added",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance",
            "sales_user",
            "Viewer",
            "Legal"
          ]
        },
        "x-rate-limit-bucket": "write"
      }
    },
    "/api/growth/v1/demo/app/accounts": {
      "get": {
        "operationId": "get__api_growth_v1_demo_app_accounts",
        "summary": "Portal tour — accounts screen on the frozen demo tenant (demo: true)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/app/pipeline": {
      "get": {
        "operationId": "get__api_growth_v1_app_pipeline",
        "summary": "Client portal — pipeline screen data (tenant-scoped)",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance",
            "sales_user",
            "Viewer",
            "Legal",
            "attendee"
          ]
        }
      }
    },
    "/api/growth/v1/demo/app/pipeline": {
      "get": {
        "operationId": "get__api_growth_v1_demo_app_pipeline",
        "summary": "Portal tour — pipeline screen on the frozen demo tenant (demo: true)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/app/reports": {
      "get": {
        "operationId": "get__api_growth_v1_app_reports",
        "summary": "Client portal — reports screen data (tenant-scoped)",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance",
            "sales_user",
            "Viewer",
            "Legal",
            "attendee"
          ]
        }
      }
    },
    "/api/growth/v1/demo/app/reports": {
      "get": {
        "operationId": "get__api_growth_v1_demo_app_reports",
        "summary": "Portal tour — reports screen on the frozen demo tenant (demo: true)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/app/team": {
      "get": {
        "operationId": "get__api_growth_v1_app_team",
        "summary": "Client portal — team screen data (tenant-scoped)",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance",
            "sales_user",
            "Viewer",
            "Legal",
            "attendee"
          ]
        }
      }
    },
    "/api/growth/v1/demo/app/team": {
      "get": {
        "operationId": "get__api_growth_v1_demo_app_team",
        "summary": "Portal tour — team screen on the frozen demo tenant (demo: true)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/app/ledger": {
      "get": {
        "operationId": "get__api_growth_v1_app_ledger",
        "summary": "Client portal — ledger screen data (tenant-scoped)",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance",
            "sales_user",
            "Viewer",
            "Legal"
          ]
        }
      }
    },
    "/api/growth/v1/demo/app/ledger": {
      "get": {
        "operationId": "get__api_growth_v1_demo_app_ledger",
        "summary": "Portal tour — ledger screen on the frozen demo tenant (demo: true)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/app/compliance": {
      "get": {
        "operationId": "get__api_growth_v1_app_compliance",
        "summary": "Client portal — compliance screen data (tenant-scoped)",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance",
            "sales_user",
            "Viewer",
            "Legal"
          ]
        }
      }
    },
    "/api/growth/v1/demo/app/compliance": {
      "get": {
        "operationId": "get__api_growth_v1_demo_app_compliance",
        "summary": "Portal tour — compliance screen on the frozen demo tenant (demo: true)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/app/automations": {
      "get": {
        "operationId": "get__api_growth_v1_app_automations",
        "summary": "Client portal — automations screen data (tenant-scoped)",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance",
            "sales_user",
            "Viewer",
            "Legal",
            "attendee"
          ]
        }
      }
    },
    "/api/growth/v1/demo/app/automations": {
      "get": {
        "operationId": "get__api_growth_v1_demo_app_automations",
        "summary": "Portal tour — automations screen on the frozen demo tenant (demo: true)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/app/accounts/{id}/exclude": {
      "post": {
        "operationId": "post__api_growth_v1_app_accounts_id_exclude",
        "summary": "Exclude an account → DNC immediately, sequences stop (irreversible from the UI)",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "reason": {
                    "type": "string",
                    "maxLength": 500
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance",
            "sales_user",
            "Viewer",
            "Legal"
          ]
        },
        "x-rate-limit-bucket": "write"
      }
    },
    "/api/growth/v1/app/exports/all": {
      "post": {
        "operationId": "post__api_growth_v1_app_exports_all",
        "summary": "Export all assets (owner, step-up) — generated in-cell, honest queued status",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Queued",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance"
          ],
          "stepUp": true
        },
        "x-rate-limit-bucket": "write"
      }
    },
    "/api/growth/v1/app/contract/notice": {
      "post": {
        "operationId": "post__api_growth_v1_app_contract_notice",
        "summary": "30-day notice after the launch month (owner, step-up) → notice_given",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Retries with the same key replay the original response."
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance"
          ],
          "stepUp": true
        },
        "x-rate-limit-bucket": "write"
      }
    },
    "/api/growth/v1/app/meetings/{id}": {
      "get": {
        "operationId": "get__api_growth_v1_app_meetings_id",
        "summary": "Meeting card (quality-score breakdown, criteria, three-step confirmation, reject countdown)",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance",
            "sales_user",
            "Viewer",
            "Legal",
            "attendee"
          ]
        }
      }
    },
    "/api/growth/v1/app/meetings/{id}/reject": {
      "post": {
        "operationId": "post__api_growth_v1_app_meetings_id_reject",
        "summary": "Reject a scored meeting within 2 business days (reason enum) → rejected_pending + G7",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "reason"
                ],
                "properties": {
                  "reason": {
                    "type": "string",
                    "enum": [
                      "wrong_person",
                      "out_of_scope",
                      "no_need",
                      "under_20_min",
                      "existing_customer"
                    ]
                  },
                  "note": {
                    "type": "string",
                    "maxLength": 1000
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance",
            "attendee"
          ]
        },
        "x-rate-limit-bucket": "write"
      }
    },
    "/api/growth/v1/app/meetings/{id}/accept": {
      "post": {
        "operationId": "post__api_growth_v1_app_meetings_id_accept",
        "summary": "Accept a scored meeting (required for a quality score of 55–69) → counted",
        "tags": [
          "Growth"
        ],
        "security": [
          {
            "cookieSession": []
          },
          {
            "bearer": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-auth": {
          "kind": "client",
          "roles": [
            "owner",
            "Admin",
            "Approver",
            "Finance",
            "attendee"
          ]
        },
        "x-rate-limit-bucket": "write"
      }
    },
    "/api/growth/v1/demo/ops/{desk}": {
      "get": {
        "operationId": "get__api_growth_v1_demo_ops_desk",
        "summary": "Ops tour — desk data on the demo tenant",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "name": "desk",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "dashboard",
                "queue",
                "accounts",
                "sequences",
                "approvals",
                "confirmations",
                "post-meeting",
                "replacements",
                "qa",
                "research",
                "csm",
                "compliance",
                "admin"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    },
    "/api/growth/v1/webhooks/telephony": {
      "post": {
        "operationId": "post__api_growth_v1_webhooks_telephony",
        "summary": "Inbound telephony webhook (HMAC-SHA256 X-Growth-Signature; honest 404 while unconfigured)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "description": "Signature invalid"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "description": "Adapter not configured"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-rate-limit-bucket": "webhooks"
      }
    },
    "/api/growth/v1/webhooks/whatsapp": {
      "post": {
        "operationId": "post__api_growth_v1_webhooks_whatsapp",
        "summary": "Inbound whatsapp webhook (HMAC-SHA256 X-Growth-Signature; honest 404 while unconfigured)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "description": "Signature invalid"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "description": "Adapter not configured"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-rate-limit-bucket": "webhooks"
      }
    },
    "/api/growth/v1/webhooks/sequencer": {
      "post": {
        "operationId": "post__api_growth_v1_webhooks_sequencer",
        "summary": "Inbound sequencer webhook (HMAC-SHA256 X-Growth-Signature; honest 404 while unconfigured)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "description": "Signature invalid"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "description": "Adapter not configured"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-rate-limit-bucket": "webhooks"
      }
    },
    "/api/growth/v1/webhooks/calendar": {
      "post": {
        "operationId": "post__api_growth_v1_webhooks_calendar",
        "summary": "Inbound calendar webhook (HMAC-SHA256 X-Growth-Signature; honest 404 while unconfigured)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "description": "Signature invalid"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "description": "Adapter not configured"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-rate-limit-bucket": "webhooks"
      }
    },
    "/api/growth/v1/webhooks/crm": {
      "post": {
        "operationId": "post__api_growth_v1_webhooks_crm",
        "summary": "Inbound crm webhook (HMAC-SHA256 X-Growth-Signature; honest 404 while unconfigured)",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "description": "Signature invalid"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "description": "Adapter not configured"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth",
        "x-rate-limit-bucket": "webhooks"
      }
    },
    "/api/growth/v1/openapi.json": {
      "get": {
        "operationId": "get__api_growth_v1_openapi.json",
        "summary": "OpenAPI 3.1 document generated from the Growth route table",
        "tags": [
          "Growth"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error"
          },
          "401": {
            "$ref": "#/components/responses/Error"
          },
          "403": {
            "$ref": "#/components/responses/Error"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "409": {
            "$ref": "#/components/responses/Error"
          },
          "422": {
            "$ref": "#/components/responses/Error"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-owner": "growth"
      }
    }
  },
  "components": {
    "securitySchemes": {
      "cookieSession": {
        "type": "apiKey",
        "in": "cookie",
        "name": "__Host-rp_session",
        "description": "Session cookie set after sign-in (rp_session on plain-HTTP development servers)."
      },
      "bearer": {
        "type": "http",
        "scheme": "bearer",
        "description": "Session token or OAuth 2.1 access token (MCP account tools)."
      },
      "oauth2": {
        "type": "oauth2",
        "description": "OAuth 2.1 authorisation code with PKCE (S256). Access tokens last 60 minutes; refresh tokens rotate on every use. Tokens never approve, pay or sign.",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://remote-pro.ai/api/oauth/authorize",
            "tokenUrl": "https://remote-pro.ai/api/oauth/token",
            "refreshUrl": "https://remote-pro.ai/api/oauth/token",
            "scopes": {
              "proposals:read": "Read your organisation's proposals and quotes",
              "proposals:write": "Create draft proposals in Client OS",
              "squads:read": "Read squads, roster and engineer status",
              "timesheets:read": "Read submitted and approved timesheets",
              "invoices:read": "Read invoices, credits and e-invoice files",
              "documents:read": "Read contract and certificate metadata"
            }
          }
        }
      }
    },
    "parameters": {
      "AcceptLanguage": {
        "name": "Accept-Language",
        "in": "header",
        "required": false,
        "schema": {
          "type": "string",
          "example": "ar"
        },
        "description": "en or ar; ?lang= overrides."
      }
    },
    "responses": {
      "Error": {
        "description": "Error envelope",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "error"
              ],
              "properties": {
                "error": {
                  "type": "object",
                  "required": [
                    "code",
                    "message_en",
                    "message_ar",
                    "status",
                    "message",
                    "i18n",
                    "request_id"
                  ],
                  "properties": {
                    "code": {
                      "type": "string",
                      "description": "Stable machine code, e.g. validation_failed, state, policy_denied."
                    },
                    "message_en": {
                      "type": "string"
                    },
                    "message_ar": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer"
                    },
                    "message": {
                      "type": "string",
                      "description": "Message in the negotiated language."
                    },
                    "i18n": {
                      "type": "object",
                      "properties": {
                        "en": {
                          "type": "string"
                        },
                        "ar": {
                          "type": "string"
                        }
                      }
                    },
                    "details": {
                      "description": "Field errors (422) or a state object (409: { required })",
                      "oneOf": [
                        {
                          "type": "null"
                        },
                        {
                          "type": "object"
                        },
                        {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "field": {
                                "type": "string"
                              },
                              "code": {
                                "type": "string"
                              },
                              "message": {
                                "type": "string"
                              },
                              "message_en": {
                                "type": "string"
                              },
                              "message_ar": {
                                "type": "string"
                              },
                              "i18n": {
                                "type": "object"
                              }
                            }
                          }
                        }
                      ]
                    },
                    "request_id": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "schemas": {
      "Error": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "code",
              "message_en",
              "message_ar",
              "status",
              "message",
              "i18n",
              "request_id"
            ],
            "properties": {
              "code": {
                "type": "string",
                "description": "Stable machine code, e.g. validation_failed, state, policy_denied."
              },
              "message_en": {
                "type": "string"
              },
              "message_ar": {
                "type": "string"
              },
              "status": {
                "type": "integer"
              },
              "message": {
                "type": "string",
                "description": "Message in the negotiated language."
              },
              "i18n": {
                "type": "object",
                "properties": {
                  "en": {
                    "type": "string"
                  },
                  "ar": {
                    "type": "string"
                  }
                }
              },
              "details": {
                "description": "Field errors (422) or a state object (409: { required })",
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "type": "object"
                  },
                  {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "field": {
                          "type": "string"
                        },
                        "code": {
                          "type": "string"
                        },
                        "message": {
                          "type": "string"
                        },
                        "message_en": {
                          "type": "string"
                        },
                        "message_ar": {
                          "type": "string"
                        },
                        "i18n": {
                          "type": "object"
                        }
                      }
                    }
                  }
                ]
              },
              "request_id": {
                "type": "string"
              }
            }
          }
        }
      }
    }
  }
}
