{
  "openapi": "3.1.0",
  "info": {
    "title": "Avi site API",
    "version": "1.0.0",
    "summary": "Read-only JSON access to Avi's documentation, pricing and security posture.",
    "description": "Avi is the AI assistant for real work (email, meetings, deals, documents, support), with automations, an AI-curated feed and custom apps.\n\nThis public API exposes the content of avi.run — every documentation page (as Markdown), the current plan and pricing, and the certifications, AI data handling and subprocessors from the trust page — so agents can answer questions about Avi without scraping HTML.\n\nIt needs no authentication, accepts only GET/HEAD/OPTIONS, sends `Access-Control-Allow-Origin: *`, and reports every error as RFC 9457 `application/problem+json` with a stable `code` and a `resolution` hint.\n\nBreaking changes ship under a new major path (`/api/v2`); `/api/v1` stays stable.",
    "contact": {
      "name": "Avi support (Serverless Inc.)",
      "email": "support@avi.run",
      "url": "https://avi.run/contact"
    },
    "termsOfService": "https://avi.run/terms"
  },
  "externalDocs": {
    "description": "Avi Public API documentation",
    "url": "https://avi.run/docs/api"
  },
  "servers": [
    {
      "url": "https://avi.run",
      "description": "Avi website"
    }
  ],
  "security": [],
  "tags": [
    {
      "name": "Meta",
      "description": "Discover the API itself."
    },
    {
      "name": "Docs",
      "description": "Avi's product and developer documentation."
    },
    {
      "name": "Pricing",
      "description": "Avi's plan, prices and credits."
    },
    {
      "name": "Trust",
      "description": "Avi's certifications, data handling and subprocessors."
    }
  ],
  "paths": {
    "/api/v1": {
      "get": {
        "operationId": "getApiIndex",
        "tags": [
          "Meta"
        ],
        "summary": "Describe the Avi site API",
        "description": "Returns the API name and version, links to this OpenAPI document and the API catalog, and every available operation with its absolute URL.",
        "responses": {
          "200": {
            "description": "The API index.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "name",
                    "version",
                    "description",
                    "openapi_url",
                    "api_catalog_url",
                    "documentation_url",
                    "operations"
                  ],
                  "properties": {
                    "name": {
                      "type": "string",
                      "description": "Name of the API."
                    },
                    "version": {
                      "type": "string",
                      "description": "Semantic version of this API description."
                    },
                    "description": {
                      "type": "string",
                      "description": "What the API offers."
                    },
                    "openapi_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "URL of this OpenAPI document."
                    },
                    "api_catalog_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "URL of the RFC 9727 API catalog."
                    },
                    "documentation_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Human-readable developer documentation."
                    },
                    "operations": {
                      "type": "array",
                      "description": "Every operation the API offers.",
                      "items": {
                        "type": "object",
                        "required": [
                          "method",
                          "path",
                          "operation_id",
                          "summary",
                          "url"
                        ],
                        "properties": {
                          "method": {
                            "type": "string",
                            "enum": [
                              "GET"
                            ],
                            "description": "HTTP method."
                          },
                          "path": {
                            "type": "string",
                            "description": "Path template, relative to the server URL."
                          },
                          "operation_id": {
                            "type": "string",
                            "description": "The operationId in this document."
                          },
                          "summary": {
                            "type": "string",
                            "description": "What the operation returns."
                          },
                          "url": {
                            "type": "string",
                            "description": "Absolute URL template."
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "The API is read-only; only GET, HEAD and OPTIONS are allowed.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/docs": {
      "get": {
        "operationId": "listDocs",
        "tags": [
          "Docs"
        ],
        "summary": "List Avi documentation pages",
        "description": "Lists every page of the Avi documentation with its slug, title, section, one-line summary, HTML URL, Markdown URL and API URL. Use a slug with getDoc to read a page.",
        "responses": {
          "200": {
            "description": "All documentation pages, in the order the docs present them.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "count"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "slug",
                          "title",
                          "section",
                          "summary",
                          "url",
                          "markdown_url",
                          "api_url"
                        ],
                        "properties": {
                          "slug": {
                            "type": "string",
                            "description": "Stable identifier of the page; pass it to getDoc."
                          },
                          "title": {
                            "type": "string",
                            "description": "Page title."
                          },
                          "section": {
                            "type": "string",
                            "description": "Docs section the page belongs to (Guides or Developers)."
                          },
                          "summary": {
                            "type": "string",
                            "description": "One-line description of the page."
                          },
                          "url": {
                            "type": "string",
                            "format": "uri",
                            "description": "The page on avi.run (HTML)."
                          },
                          "markdown_url": {
                            "type": "string",
                            "format": "uri",
                            "description": "The page as Markdown."
                          },
                          "api_url": {
                            "type": "string",
                            "format": "uri",
                            "description": "This page in the API (getDoc)."
                          }
                        }
                      },
                      "description": "All documentation pages."
                    },
                    "count": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "Number of pages in data."
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "The API is read-only; only GET, HEAD and OPTIONS are allowed.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/docs/{slug}": {
      "get": {
        "operationId": "getDoc",
        "tags": [
          "Docs"
        ],
        "summary": "Get an Avi documentation page",
        "description": "Returns one documentation page with its full Markdown source. Call listDocs first if you don't know the slug.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "The page's slug, as returned by listDocs (for example `getting-started` or `apps`).",
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9-]+$",
              "enum": [
                "getting-started",
                "orgs-and-projects",
                "chat",
                "tasks",
                "contacts",
                "wiki",
                "background-agents",
                "agents",
                "updates",
                "using-apps",
                "files",
                "data-types",
                "models",
                "billing",
                "appearance",
                "apps",
                "app-react-ui",
                "app-voice",
                "ui-components",
                "api"
              ]
            },
            "example": "getting-started"
          }
        ],
        "responses": {
          "200": {
            "description": "The documentation page.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "slug",
                    "title",
                    "section",
                    "summary",
                    "url",
                    "markdown_url",
                    "api_url",
                    "markdown"
                  ],
                  "properties": {
                    "slug": {
                      "type": "string",
                      "description": "Stable identifier of the page; pass it to getDoc."
                    },
                    "title": {
                      "type": "string",
                      "description": "Page title."
                    },
                    "section": {
                      "type": "string",
                      "description": "Docs section the page belongs to (Guides or Developers)."
                    },
                    "summary": {
                      "type": "string",
                      "description": "One-line description of the page."
                    },
                    "url": {
                      "type": "string",
                      "format": "uri",
                      "description": "The page on avi.run (HTML)."
                    },
                    "markdown_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "The page as Markdown."
                    },
                    "api_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "This page in the API (getDoc)."
                    },
                    "markdown": {
                      "type": "string",
                      "description": "Full page content as CommonMark/GFM Markdown."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No documentation page has this slug (code `doc_not_found`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "405": {
            "description": "The API is read-only; only GET, HEAD and OPTIONS are allowed.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/pricing": {
      "get": {
        "operationId": "getPricing",
        "tags": [
          "Pricing"
        ],
        "summary": "Get Avi pricing",
        "description": "Returns Avi's single plan: per-person monthly and annual prices in USD, the monthly credit grant, trial credits, top-ups, auto-refill, the automation credit ceiling, what is included, and the pricing FAQ.",
        "responses": {
          "200": {
            "description": "The current plan and pricing.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "plan",
                    "included",
                    "faqs",
                    "url",
                    "markdown_url"
                  ],
                  "properties": {
                    "plan": {
                      "type": "object",
                      "description": "Avi's single plan and how its credits work.",
                      "required": [
                        "name",
                        "currency",
                        "billing_options",
                        "annual_savings_percent",
                        "monthly_credits_per_person",
                        "credit_value_usd",
                        "trial",
                        "top_up",
                        "auto_refill",
                        "automation_daily_credit_ceiling"
                      ],
                      "properties": {
                        "name": {
                          "type": "string",
                          "description": "Plan name. Avi has a single plan."
                        },
                        "currency": {
                          "type": "string",
                          "description": "ISO 4217 currency of every price."
                        },
                        "billing_options": {
                          "type": "array",
                          "description": "Annual and monthly billing.",
                          "items": {
                            "type": "object",
                            "required": [
                              "interval",
                              "price_per_person_per_month",
                              "billed_amount_per_person"
                            ],
                            "properties": {
                              "interval": {
                                "type": "string",
                                "enum": [
                                  "year",
                                  "month"
                                ],
                                "description": "Billing interval."
                              },
                              "price_per_person_per_month": {
                                "type": "number",
                                "description": "Effective price per person per month."
                              },
                              "billed_amount_per_person": {
                                "type": "number",
                                "description": "Amount charged per person each interval."
                              }
                            }
                          }
                        },
                        "annual_savings_percent": {
                          "type": "number",
                          "description": "Saving of annual over monthly billing, in percent."
                        },
                        "monthly_credits_per_person": {
                          "type": "integer",
                          "description": "Credits each person adds to the shared pool every month."
                        },
                        "credit_value_usd": {
                          "type": "number",
                          "description": "Value of one credit in USD."
                        },
                        "trial": {
                          "type": "object",
                          "description": "The free trial every new organization starts with.",
                          "required": [
                            "credits",
                            "credits_at_signup",
                            "credits_for_first_connection",
                            "expires_after_days",
                            "card_required"
                          ],
                          "properties": {
                            "credits": {
                              "type": "integer",
                              "description": "Most free trial credits an organization can receive."
                            },
                            "credits_at_signup": {
                              "type": "integer",
                              "description": "Free trial credits granted at sign-up."
                            },
                            "credits_for_first_connection": {
                              "type": "integer",
                              "description": "Free trial credits added when the first account is connected."
                            },
                            "expires_after_days": {
                              "type": "integer",
                              "description": "Days after the most recent grant at which trial credits expire."
                            },
                            "card_required": {
                              "type": "boolean",
                              "description": "Whether the trial asks for a card."
                            }
                          }
                        },
                        "top_up": {
                          "type": "object",
                          "description": "A one-off credit purchase.",
                          "required": [
                            "credits",
                            "price_usd"
                          ],
                          "properties": {
                            "credits": {
                              "type": "integer",
                              "description": "Credits per top-up."
                            },
                            "price_usd": {
                              "type": "number",
                              "description": "Price of one top-up in USD."
                            }
                          }
                        },
                        "auto_refill": {
                          "type": "object",
                          "description": "Automatic top-ups when the credit balance runs low.",
                          "required": [
                            "threshold_credits",
                            "default_monthly_cap_usd"
                          ],
                          "properties": {
                            "threshold_credits": {
                              "type": "integer",
                              "description": "Balance at which auto-refill tops up."
                            },
                            "default_monthly_cap_usd": {
                              "type": "number",
                              "description": "Default monthly auto-refill spend cap in USD."
                            }
                          }
                        },
                        "automation_daily_credit_ceiling": {
                          "type": "integer",
                          "description": "Default daily credit ceiling of each automation."
                        }
                      }
                    },
                    "included": {
                      "type": "array",
                      "description": "What the plan includes.",
                      "items": {
                        "type": "object",
                        "required": [
                          "title",
                          "detail"
                        ],
                        "properties": {
                          "title": {
                            "type": "string",
                            "description": "Short name of the included feature."
                          },
                          "detail": {
                            "type": "string",
                            "description": "What the feature covers."
                          }
                        }
                      }
                    },
                    "faqs": {
                      "type": "array",
                      "description": "The pricing FAQ.",
                      "items": {
                        "type": "object",
                        "required": [
                          "group",
                          "question",
                          "answer"
                        ],
                        "properties": {
                          "group": {
                            "type": "string",
                            "description": "FAQ group the question belongs to."
                          },
                          "question": {
                            "type": "string",
                            "description": "The question."
                          },
                          "answer": {
                            "type": "string",
                            "description": "The answer."
                          }
                        }
                      }
                    },
                    "url": {
                      "type": "string",
                      "format": "uri",
                      "description": "The pricing page (HTML)."
                    },
                    "markdown_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "The pricing page as Markdown."
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "The API is read-only; only GET, HEAD and OPTIONS are allowed.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/trust": {
      "get": {
        "operationId": "getTrust",
        "tags": [
          "Trust"
        ],
        "summary": "Get Avi's security and trust details",
        "description": "Returns what the trust page states: certifications and audits with links to verify them (Google CASA AL2, SOC 2 Type II), how AI providers handle customer data (zero retention, no training), safeguards, data handling, every subprocessor with the data it receives, and the security contact. Use it to answer security-review questions about Avi.",
        "responses": {
          "200": {
            "description": "Avi's security and trust details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "summary",
                    "certifications",
                    "ai_data_handling",
                    "safeguards",
                    "data_handling",
                    "subprocessors",
                    "subprocessors_note",
                    "security_contact",
                    "privacy_policy_url",
                    "terms_url",
                    "url",
                    "markdown_url"
                  ],
                  "properties": {
                    "summary": {
                      "type": "string",
                      "description": "One-sentence overview of Avi's security posture."
                    },
                    "certifications": {
                      "type": "array",
                      "description": "Independent audits and assessments, with how to verify each.",
                      "items": {
                        "type": "object",
                        "required": [
                          "id",
                          "name",
                          "statuses",
                          "description",
                          "facts",
                          "links"
                        ],
                        "properties": {
                          "id": {
                            "type": "string",
                            "enum": [
                              "casa-al2",
                              "soc2-type2"
                            ],
                            "description": "Stable identifier."
                          },
                          "name": {
                            "type": "string",
                            "description": "Name of the certification or audit."
                          },
                          "statuses": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "description": "Where it stands, e.g. Certified or Audited team."
                          },
                          "description": {
                            "type": "string",
                            "description": "What it covers."
                          },
                          "facts": {
                            "type": "array",
                            "description": "Standard, assessor, validity and similar details.",
                            "items": {
                              "type": "object",
                              "required": [
                                "term",
                                "value"
                              ],
                              "properties": {
                                "term": {
                                  "type": "string",
                                  "description": "Fact name."
                                },
                                "value": {
                                  "type": "string",
                                  "description": "Fact value."
                                }
                              }
                            }
                          },
                          "links": {
                            "type": "array",
                            "description": "Proof: the certificate, a public registry entry, or where to request reports.",
                            "items": {
                              "type": "object",
                              "required": [
                                "label",
                                "url"
                              ],
                              "properties": {
                                "label": {
                                  "type": "string",
                                  "description": "What the link opens."
                                },
                                "url": {
                                  "type": "string",
                                  "format": "uri",
                                  "description": "Absolute URL."
                                }
                              }
                            }
                          }
                        }
                      }
                    },
                    "ai_data_handling": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "id",
                          "title",
                          "body"
                        ],
                        "properties": {
                          "id": {
                            "type": "string",
                            "description": "Stable identifier of the point."
                          },
                          "title": {
                            "type": "string",
                            "description": "Short statement."
                          },
                          "body": {
                            "type": "string",
                            "description": "The commitment in full."
                          }
                        }
                      },
                      "description": "What happens to customer data when AI models process it."
                    },
                    "safeguards": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "id",
                          "title",
                          "body"
                        ],
                        "properties": {
                          "id": {
                            "type": "string",
                            "description": "Stable identifier of the point."
                          },
                          "title": {
                            "type": "string",
                            "description": "Short statement."
                          },
                          "body": {
                            "type": "string",
                            "description": "The commitment in full."
                          }
                        }
                      },
                      "description": "Security safeguards across the service."
                    },
                    "data_handling": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "id",
                          "title",
                          "body"
                        ],
                        "properties": {
                          "id": {
                            "type": "string",
                            "description": "Stable identifier of the point."
                          },
                          "title": {
                            "type": "string",
                            "description": "Short statement."
                          },
                          "body": {
                            "type": "string",
                            "description": "The commitment in full."
                          }
                        }
                      },
                      "description": "Sharing, retention, agreements and data-subject rights."
                    },
                    "subprocessors": {
                      "type": "array",
                      "description": "Every vendor whose systems process customer data to run Avi.",
                      "items": {
                        "type": "object",
                        "required": [
                          "name",
                          "purpose",
                          "data"
                        ],
                        "properties": {
                          "name": {
                            "type": "string",
                            "description": "Vendor name."
                          },
                          "purpose": {
                            "type": "string",
                            "description": "What Avi uses it for."
                          },
                          "data": {
                            "type": "string",
                            "description": "The customer data it receives."
                          }
                        }
                      }
                    },
                    "subprocessors_note": {
                      "type": "string",
                      "description": "What does not count as a subprocessor."
                    },
                    "security_contact": {
                      "type": "string",
                      "format": "email",
                      "description": "Where to send security questionnaires and vulnerability reports."
                    },
                    "privacy_policy_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "The Privacy Policy (HTML; append .md for Markdown)."
                    },
                    "terms_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "The Terms of Service (HTML; append .md for Markdown)."
                    },
                    "url": {
                      "type": "string",
                      "format": "uri",
                      "description": "The trust page (HTML)."
                    },
                    "markdown_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "The trust page as Markdown."
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "The API is read-only; only GET, HEAD and OPTIONS are allowed.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ApiIndex": {
        "type": "object",
        "required": [
          "name",
          "version",
          "description",
          "openapi_url",
          "api_catalog_url",
          "documentation_url",
          "operations"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the API."
          },
          "version": {
            "type": "string",
            "description": "Semantic version of this API description."
          },
          "description": {
            "type": "string",
            "description": "What the API offers."
          },
          "openapi_url": {
            "type": "string",
            "format": "uri",
            "description": "URL of this OpenAPI document."
          },
          "api_catalog_url": {
            "type": "string",
            "format": "uri",
            "description": "URL of the RFC 9727 API catalog."
          },
          "documentation_url": {
            "type": "string",
            "format": "uri",
            "description": "Human-readable developer documentation."
          },
          "operations": {
            "type": "array",
            "description": "Every operation the API offers.",
            "items": {
              "type": "object",
              "required": [
                "method",
                "path",
                "operation_id",
                "summary",
                "url"
              ],
              "properties": {
                "method": {
                  "type": "string",
                  "enum": [
                    "GET"
                  ],
                  "description": "HTTP method."
                },
                "path": {
                  "type": "string",
                  "description": "Path template, relative to the server URL."
                },
                "operation_id": {
                  "type": "string",
                  "description": "The operationId in this document."
                },
                "summary": {
                  "type": "string",
                  "description": "What the operation returns."
                },
                "url": {
                  "type": "string",
                  "description": "Absolute URL template."
                }
              }
            }
          }
        }
      },
      "DocSummary": {
        "type": "object",
        "required": [
          "slug",
          "title",
          "section",
          "summary",
          "url",
          "markdown_url",
          "api_url"
        ],
        "properties": {
          "slug": {
            "type": "string",
            "description": "Stable identifier of the page; pass it to getDoc."
          },
          "title": {
            "type": "string",
            "description": "Page title."
          },
          "section": {
            "type": "string",
            "description": "Docs section the page belongs to (Guides or Developers)."
          },
          "summary": {
            "type": "string",
            "description": "One-line description of the page."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "The page on avi.run (HTML)."
          },
          "markdown_url": {
            "type": "string",
            "format": "uri",
            "description": "The page as Markdown."
          },
          "api_url": {
            "type": "string",
            "format": "uri",
            "description": "This page in the API (getDoc)."
          }
        }
      },
      "DocList": {
        "type": "object",
        "required": [
          "data",
          "count"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "slug",
                "title",
                "section",
                "summary",
                "url",
                "markdown_url",
                "api_url"
              ],
              "properties": {
                "slug": {
                  "type": "string",
                  "description": "Stable identifier of the page; pass it to getDoc."
                },
                "title": {
                  "type": "string",
                  "description": "Page title."
                },
                "section": {
                  "type": "string",
                  "description": "Docs section the page belongs to (Guides or Developers)."
                },
                "summary": {
                  "type": "string",
                  "description": "One-line description of the page."
                },
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "The page on avi.run (HTML)."
                },
                "markdown_url": {
                  "type": "string",
                  "format": "uri",
                  "description": "The page as Markdown."
                },
                "api_url": {
                  "type": "string",
                  "format": "uri",
                  "description": "This page in the API (getDoc)."
                }
              }
            },
            "description": "All documentation pages."
          },
          "count": {
            "type": "integer",
            "minimum": 0,
            "description": "Number of pages in data."
          }
        }
      },
      "Doc": {
        "type": "object",
        "required": [
          "slug",
          "title",
          "section",
          "summary",
          "url",
          "markdown_url",
          "api_url",
          "markdown"
        ],
        "properties": {
          "slug": {
            "type": "string",
            "description": "Stable identifier of the page; pass it to getDoc."
          },
          "title": {
            "type": "string",
            "description": "Page title."
          },
          "section": {
            "type": "string",
            "description": "Docs section the page belongs to (Guides or Developers)."
          },
          "summary": {
            "type": "string",
            "description": "One-line description of the page."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "The page on avi.run (HTML)."
          },
          "markdown_url": {
            "type": "string",
            "format": "uri",
            "description": "The page as Markdown."
          },
          "api_url": {
            "type": "string",
            "format": "uri",
            "description": "This page in the API (getDoc)."
          },
          "markdown": {
            "type": "string",
            "description": "Full page content as CommonMark/GFM Markdown."
          }
        }
      },
      "Pricing": {
        "type": "object",
        "required": [
          "plan",
          "included",
          "faqs",
          "url",
          "markdown_url"
        ],
        "properties": {
          "plan": {
            "type": "object",
            "description": "Avi's single plan and how its credits work.",
            "required": [
              "name",
              "currency",
              "billing_options",
              "annual_savings_percent",
              "monthly_credits_per_person",
              "credit_value_usd",
              "trial",
              "top_up",
              "auto_refill",
              "automation_daily_credit_ceiling"
            ],
            "properties": {
              "name": {
                "type": "string",
                "description": "Plan name. Avi has a single plan."
              },
              "currency": {
                "type": "string",
                "description": "ISO 4217 currency of every price."
              },
              "billing_options": {
                "type": "array",
                "description": "Annual and monthly billing.",
                "items": {
                  "type": "object",
                  "required": [
                    "interval",
                    "price_per_person_per_month",
                    "billed_amount_per_person"
                  ],
                  "properties": {
                    "interval": {
                      "type": "string",
                      "enum": [
                        "year",
                        "month"
                      ],
                      "description": "Billing interval."
                    },
                    "price_per_person_per_month": {
                      "type": "number",
                      "description": "Effective price per person per month."
                    },
                    "billed_amount_per_person": {
                      "type": "number",
                      "description": "Amount charged per person each interval."
                    }
                  }
                }
              },
              "annual_savings_percent": {
                "type": "number",
                "description": "Saving of annual over monthly billing, in percent."
              },
              "monthly_credits_per_person": {
                "type": "integer",
                "description": "Credits each person adds to the shared pool every month."
              },
              "credit_value_usd": {
                "type": "number",
                "description": "Value of one credit in USD."
              },
              "trial": {
                "type": "object",
                "description": "The free trial every new organization starts with.",
                "required": [
                  "credits",
                  "credits_at_signup",
                  "credits_for_first_connection",
                  "expires_after_days",
                  "card_required"
                ],
                "properties": {
                  "credits": {
                    "type": "integer",
                    "description": "Most free trial credits an organization can receive."
                  },
                  "credits_at_signup": {
                    "type": "integer",
                    "description": "Free trial credits granted at sign-up."
                  },
                  "credits_for_first_connection": {
                    "type": "integer",
                    "description": "Free trial credits added when the first account is connected."
                  },
                  "expires_after_days": {
                    "type": "integer",
                    "description": "Days after the most recent grant at which trial credits expire."
                  },
                  "card_required": {
                    "type": "boolean",
                    "description": "Whether the trial asks for a card."
                  }
                }
              },
              "top_up": {
                "type": "object",
                "description": "A one-off credit purchase.",
                "required": [
                  "credits",
                  "price_usd"
                ],
                "properties": {
                  "credits": {
                    "type": "integer",
                    "description": "Credits per top-up."
                  },
                  "price_usd": {
                    "type": "number",
                    "description": "Price of one top-up in USD."
                  }
                }
              },
              "auto_refill": {
                "type": "object",
                "description": "Automatic top-ups when the credit balance runs low.",
                "required": [
                  "threshold_credits",
                  "default_monthly_cap_usd"
                ],
                "properties": {
                  "threshold_credits": {
                    "type": "integer",
                    "description": "Balance at which auto-refill tops up."
                  },
                  "default_monthly_cap_usd": {
                    "type": "number",
                    "description": "Default monthly auto-refill spend cap in USD."
                  }
                }
              },
              "automation_daily_credit_ceiling": {
                "type": "integer",
                "description": "Default daily credit ceiling of each automation."
              }
            }
          },
          "included": {
            "type": "array",
            "description": "What the plan includes.",
            "items": {
              "type": "object",
              "required": [
                "title",
                "detail"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "description": "Short name of the included feature."
                },
                "detail": {
                  "type": "string",
                  "description": "What the feature covers."
                }
              }
            }
          },
          "faqs": {
            "type": "array",
            "description": "The pricing FAQ.",
            "items": {
              "type": "object",
              "required": [
                "group",
                "question",
                "answer"
              ],
              "properties": {
                "group": {
                  "type": "string",
                  "description": "FAQ group the question belongs to."
                },
                "question": {
                  "type": "string",
                  "description": "The question."
                },
                "answer": {
                  "type": "string",
                  "description": "The answer."
                }
              }
            }
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "The pricing page (HTML)."
          },
          "markdown_url": {
            "type": "string",
            "format": "uri",
            "description": "The pricing page as Markdown."
          }
        }
      },
      "Trust": {
        "type": "object",
        "required": [
          "summary",
          "certifications",
          "ai_data_handling",
          "safeguards",
          "data_handling",
          "subprocessors",
          "subprocessors_note",
          "security_contact",
          "privacy_policy_url",
          "terms_url",
          "url",
          "markdown_url"
        ],
        "properties": {
          "summary": {
            "type": "string",
            "description": "One-sentence overview of Avi's security posture."
          },
          "certifications": {
            "type": "array",
            "description": "Independent audits and assessments, with how to verify each.",
            "items": {
              "type": "object",
              "required": [
                "id",
                "name",
                "statuses",
                "description",
                "facts",
                "links"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "enum": [
                    "casa-al2",
                    "soc2-type2"
                  ],
                  "description": "Stable identifier."
                },
                "name": {
                  "type": "string",
                  "description": "Name of the certification or audit."
                },
                "statuses": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "Where it stands, e.g. Certified or Audited team."
                },
                "description": {
                  "type": "string",
                  "description": "What it covers."
                },
                "facts": {
                  "type": "array",
                  "description": "Standard, assessor, validity and similar details.",
                  "items": {
                    "type": "object",
                    "required": [
                      "term",
                      "value"
                    ],
                    "properties": {
                      "term": {
                        "type": "string",
                        "description": "Fact name."
                      },
                      "value": {
                        "type": "string",
                        "description": "Fact value."
                      }
                    }
                  }
                },
                "links": {
                  "type": "array",
                  "description": "Proof: the certificate, a public registry entry, or where to request reports.",
                  "items": {
                    "type": "object",
                    "required": [
                      "label",
                      "url"
                    ],
                    "properties": {
                      "label": {
                        "type": "string",
                        "description": "What the link opens."
                      },
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Absolute URL."
                      }
                    }
                  }
                }
              }
            }
          },
          "ai_data_handling": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "id",
                "title",
                "body"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Stable identifier of the point."
                },
                "title": {
                  "type": "string",
                  "description": "Short statement."
                },
                "body": {
                  "type": "string",
                  "description": "The commitment in full."
                }
              }
            },
            "description": "What happens to customer data when AI models process it."
          },
          "safeguards": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "id",
                "title",
                "body"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Stable identifier of the point."
                },
                "title": {
                  "type": "string",
                  "description": "Short statement."
                },
                "body": {
                  "type": "string",
                  "description": "The commitment in full."
                }
              }
            },
            "description": "Security safeguards across the service."
          },
          "data_handling": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "id",
                "title",
                "body"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Stable identifier of the point."
                },
                "title": {
                  "type": "string",
                  "description": "Short statement."
                },
                "body": {
                  "type": "string",
                  "description": "The commitment in full."
                }
              }
            },
            "description": "Sharing, retention, agreements and data-subject rights."
          },
          "subprocessors": {
            "type": "array",
            "description": "Every vendor whose systems process customer data to run Avi.",
            "items": {
              "type": "object",
              "required": [
                "name",
                "purpose",
                "data"
              ],
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Vendor name."
                },
                "purpose": {
                  "type": "string",
                  "description": "What Avi uses it for."
                },
                "data": {
                  "type": "string",
                  "description": "The customer data it receives."
                }
              }
            }
          },
          "subprocessors_note": {
            "type": "string",
            "description": "What does not count as a subprocessor."
          },
          "security_contact": {
            "type": "string",
            "format": "email",
            "description": "Where to send security questionnaires and vulnerability reports."
          },
          "privacy_policy_url": {
            "type": "string",
            "format": "uri",
            "description": "The Privacy Policy (HTML; append .md for Markdown)."
          },
          "terms_url": {
            "type": "string",
            "format": "uri",
            "description": "The Terms of Service (HTML; append .md for Markdown)."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "The trust page (HTML)."
          },
          "markdown_url": {
            "type": "string",
            "format": "uri",
            "description": "The trust page as Markdown."
          }
        }
      },
      "Problem": {
        "type": "object",
        "description": "RFC 9457 problem details.",
        "required": [
          "type",
          "title",
          "status",
          "detail",
          "instance",
          "code",
          "resolution",
          "documentation_url"
        ],
        "properties": {
          "type": {
            "type": "string",
            "format": "uri",
            "description": "URI identifying the problem type."
          },
          "title": {
            "type": "string",
            "description": "Short summary of the problem type."
          },
          "status": {
            "type": "integer",
            "description": "HTTP status code."
          },
          "detail": {
            "type": "string",
            "description": "Explanation specific to this occurrence."
          },
          "instance": {
            "type": "string",
            "description": "The request path that failed."
          },
          "code": {
            "type": "string",
            "enum": [
              "api_route_not_found",
              "doc_not_found",
              "method_not_allowed"
            ],
            "description": "Stable machine-readable error code."
          },
          "resolution": {
            "type": "string",
            "description": "How to fix the request."
          },
          "documentation_url": {
            "type": "string",
            "format": "uri",
            "description": "Where the error codes are documented."
          }
        }
      }
    }
  }
}