{"id":50971327,"url":"https://github.com/opastorello/unifi-api-docs","last_synced_at":"2026-06-19T02:32:31.707Z","repository":{"id":362606142,"uuid":"1259949233","full_name":"opastorello/unifi-api-docs","owner":"opastorello","description":"Espelho automatico e versionado da documentacao oficial da API UniFi (Site Manager, Network, Protect, Mobility) - OpenAPI + Markdown, atualizado diariamente por CI","archived":false,"fork":false,"pushed_at":"2026-06-05T04:28:27.000Z","size":643,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-05T05:03:27.369Z","etag":null,"topics":["api","api-docs","api-documentation","cloud-connector","mcp","openapi","rest-api","site-manager","ubiquiti","unifi","unifi-network","unifi-protect"],"latest_commit_sha":null,"homepage":"https://opastorello.github.io/unifi-api-docs/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/opastorello.png","metadata":{"files":{"readme":"README.en.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-05T02:41:56.000Z","updated_at":"2026-06-05T04:28:31.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/opastorello/unifi-api-docs","commit_stats":null,"previous_names":["opastorello/unifi-api-docs"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/opastorello/unifi-api-docs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opastorello%2Funifi-api-docs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opastorello%2Funifi-api-docs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opastorello%2Funifi-api-docs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opastorello%2Funifi-api-docs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/opastorello","download_url":"https://codeload.github.com/opastorello/unifi-api-docs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opastorello%2Funifi-api-docs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34515405,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-19T02:00:06.005Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","api-docs","api-documentation","cloud-connector","mcp","openapi","rest-api","site-manager","ubiquiti","unifi","unifi-network","unifi-protect"],"created_at":"2026-06-19T02:32:30.639Z","updated_at":"2026-06-19T02:32:31.699Z","avatar_url":"https://github.com/opastorello.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📡 UniFi API Docs\n\n**🌐 Languages:** English · [Português](./README.md)\n**🔗 Site (interactive reference):** \u003chttps://opastorello.github.io/unifi-api-docs/\u003e\n\nAn **automatic, versioned** mirror of the official UniFi API documentation\n([developer.ui.com](https://developer.ui.com)), ready for humans and AIs/LLMs (Markdown + OpenAPI).\n\n\u003c!-- badges:start --\u003e\n![files](https://img.shields.io/badge/files-79-blue) ![versions](https://img.shields.io/badge/versions-34_in_4_apps-orange) ![operations](https://img.shields.io/badge/operations-1138-blueviolet) ![updated](https://img.shields.io/badge/updated-2026--06--02-brightgreen)\n\u003c!-- badges:end --\u003e\n\n\u003e ⚠️ **Unofficial** mirror, kept for reference and automation. The authoritative source is always [developer.ui.com](https://developer.ui.com).\n\n---\n\n## What it is\n\nFor each **application** (Site Manager, Network, Protect, Mobility) and each published **version**, this repo stores:\n\n- **`\u003capp\u003e/\u003cversion\u003e/openapi.json`** - the full **OpenAPI** spec (all paths, schemas, examples). Source of truth.\n- **`\u003capp\u003e/\u003cversion\u003e/reference.md`** - a Markdown reference generated from the OpenAPI (index, parameters, body, response and **Local**/**Remote** cURL examples).\n\nQuick-access indexes:\n\n- **[`llms.txt`](./llms.txt)** - index following the [llmstxt.org](https://llmstxt.org) convention, made for LLMs.\n- **[`catalog.json`](./catalog.json)** - JSON catalog (apps → versions → counts).\n- **[`skill.md`](./skill.md)** - ready-to-use skill for agents querying the API.\n\n\u003e ℹ️ The `openapi.json` files are a **faithful** mirror of the source. Some of Ubiquiti's 3.1.0 specs have minor OpenAPI-schema deviations (e.g. empty `info.license` on Network; a missing `description` on Protect), kept as published. They are valid, usable JSON - only strict validators complain.\n\n---\n\n## Connection modes (Local × Remote)\n\nThe per-app APIs (Network / Protect / Mobility) run **locally on each console** and can be reached two ways:\n\n| | 🏠 Local | ☁️ Remote (Cloud Connector) |\n|---|---|---|\n| **Header** | `X-API-KEY` | `X-API-Key` |\n| **Key** | console → *Integrations* | unifi.ui.com → *Settings → API Keys* |\n| **Local network?** | required | not needed (works behind CGNAT) |\n| **Requirement** | - | console firmware ≥ 5.0.3 |\n\n**🏠 Local** - straight to the console:\n\n```bash\ncurl -H \"X-API-KEY: $LOCAL_KEY\" \\\n  \"https://\u003cconsole\u003e/proxy/\u003capp\u003e/integration/v1/…\"\n```\n\n**☁️ Remote** - via cloud, no local network access:\n\n```bash\ncurl -H \"X-API-Key: $SITE_MANAGER_KEY\" \\\n  \"https://api.ui.com/v1/connector/consoles/{id}/\u003capp\u003e/integration/v1/…\"\n```\n\nThe path after `/integration` is **identical** in both modes. **Site Manager** is the multi-site cloud API (`https://api.ui.com/v1/…`) and includes the **Cloud Connector** used by Remote mode.\n\n---\n\n## 📚 Catalog\n\n\u003c!-- catalog:start --\u003e\n| App | Latest | Categories | Operations | Paths | OpenAPI | Reference | Official docs |\n|---|---|---:|---:|---:|---|---|---|\n| **network** | `v10.3.58` | 13 | 73 | 44 | [json](network/v10.3.58/openapi.json) | [md](network/v10.3.58/reference.md) | [docs](https://developer.ui.com/network/v10.3.58) |\n| **protect** | `v7.1.46` | 22 | 73 | 54 | [json](protect/v7.1.46/openapi.json) | [md](protect/v7.1.46/reference.md) | [docs](https://developer.ui.com/protect/v7.1.46) |\n| **site-manager** | `v1.0.0` | 1 | 9 | 9 | [json](site-manager/v1.0.0/openapi.json) | [md](site-manager/v1.0.0/reference.md) | [docs](https://developer.ui.com/site-manager/v1.0.0) |\n| **mobility** | `v1.0.0` | 4 | 8 | 7 | [json](mobility/v1.0.0/openapi.json) | [md](mobility/v1.0.0/reference.md) | [docs](https://developer.ui.com/mobility/v1.0.0) |\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e📜 Full version history - 34 versions\u003c/b\u003e\u003c/summary\u003e\n\n**network**\n\n| Version | Categories | Operations | Paths | Updated | OpenAPI | Reference | Official docs |\n|---|---:|---:|---:|---|---|---|---|\n| `v10.3.58` ⭐ | 13 | 73 | 44 | 2026-06-02 | [json](network/v10.3.58/openapi.json) | [md](network/v10.3.58/reference.md) | [docs](https://developer.ui.com/network/v10.3.58) |\n| `v10.1.84` | 12 | 67 | 38 | 2026-06-02 | [json](network/v10.1.84/openapi.json) | [md](network/v10.1.84/reference.md) | [docs](https://developer.ui.com/network/v10.1.84) |\n| `v10.0.162` | 11 | 50 | 32 | 2026-06-02 | [json](network/v10.0.162/openapi.json) | [md](network/v10.0.162/reference.md) | [docs](https://developer.ui.com/network/v10.0.162) |\n| `v9.5.21` | 5 | 15 | 12 | 2026-06-02 | [json](network/v9.5.21/openapi.json) | [md](network/v9.5.21/reference.md) | [docs](https://developer.ui.com/network/v9.5.21) |\n| `v9.4.19` | 5 | 15 | 12 | 2026-06-02 | [json](network/v9.4.19/openapi.json) | [md](network/v9.4.19/reference.md) | [docs](https://developer.ui.com/network/v9.4.19) |\n| `v9.4.17` | 5 | 15 | 12 | 2026-06-02 | [json](network/v9.4.17/openapi.json) | [md](network/v9.4.17/reference.md) | [docs](https://developer.ui.com/network/v9.4.17) |\n| `v9.3.45` | 5 | 15 | 12 | 2026-06-02 | [json](network/v9.3.45/openapi.json) | [md](network/v9.3.45/reference.md) | [docs](https://developer.ui.com/network/v9.3.45) |\n| `v9.3.43` | 5 | 15 | 12 | 2026-06-02 | [json](network/v9.3.43/openapi.json) | [md](network/v9.3.43/reference.md) | [docs](https://developer.ui.com/network/v9.3.43) |\n| `v9.2.87` | 5 | 15 | 12 | 2026-06-02 | [json](network/v9.2.87/openapi.json) | [md](network/v9.2.87/reference.md) | [docs](https://developer.ui.com/network/v9.2.87) |\n| `v9.2.86` | 5 | 15 | 12 | 2026-06-02 | [json](network/v9.2.86/openapi.json) | [md](network/v9.2.86/reference.md) | [docs](https://developer.ui.com/network/v9.2.86) |\n| `v9.1.120` | 5 | 15 | 12 | 2026-06-02 | [json](network/v9.1.120/openapi.json) | [md](network/v9.1.120/reference.md) | [docs](https://developer.ui.com/network/v9.1.120) |\n\n**protect**\n\n| Version | Categories | Operations | Paths | Updated | OpenAPI | Reference | Official docs |\n|---|---:|---:|---:|---|---|---|---|\n| `v7.1.46` ⭐ | 22 | 73 | 54 | 2026-06-02 | [json](protect/v7.1.46/openapi.json) | [md](protect/v7.1.46/reference.md) | [docs](https://developer.ui.com/protect/v7.1.46) |\n| `v7.1.42` | 22 | 73 | 54 | 2026-06-02 | [json](protect/v7.1.42/openapi.json) | [md](protect/v7.1.42/reference.md) | [docs](https://developer.ui.com/protect/v7.1.42) |\n| `v7.0.107` | 12 | 35 | 25 | 2026-06-02 | [json](protect/v7.0.107/openapi.json) | [md](protect/v7.0.107/reference.md) | [docs](https://developer.ui.com/protect/v7.0.107) |\n| `v7.0.104` | 12 | 35 | 25 | 2026-06-02 | [json](protect/v7.0.104/openapi.json) | [md](protect/v7.0.104/reference.md) | [docs](https://developer.ui.com/protect/v7.0.104) |\n| `v7.0.94` | 12 | 35 | 25 | 2026-06-02 | [json](protect/v7.0.94/openapi.json) | [md](protect/v7.0.94/reference.md) | [docs](https://developer.ui.com/protect/v7.0.94) |\n| `v6.2.88` | 12 | 35 | 25 | 2026-06-02 | [json](protect/v6.2.88/openapi.json) | [md](protect/v6.2.88/reference.md) | [docs](https://developer.ui.com/protect/v6.2.88) |\n| `v6.2.87` | 12 | 35 | 25 | 2026-06-02 | [json](protect/v6.2.87/openapi.json) | [md](protect/v6.2.87/reference.md) | [docs](https://developer.ui.com/protect/v6.2.87) |\n| `v6.2.83` | 12 | 35 | 25 | 2026-06-02 | [json](protect/v6.2.83/openapi.json) | [md](protect/v6.2.83/reference.md) | [docs](https://developer.ui.com/protect/v6.2.83) |\n| `v6.2.72` | 12 | 35 | 25 | 2026-06-02 | [json](protect/v6.2.72/openapi.json) | [md](protect/v6.2.72/reference.md) | [docs](https://developer.ui.com/protect/v6.2.72) |\n| `v6.1.79` | 12 | 35 | 25 | 2026-06-02 | [json](protect/v6.1.79/openapi.json) | [md](protect/v6.1.79/reference.md) | [docs](https://developer.ui.com/protect/v6.1.79) |\n| `v6.1.78` | 12 | 35 | 25 | 2026-06-02 | [json](protect/v6.1.78/openapi.json) | [md](protect/v6.1.78/reference.md) | [docs](https://developer.ui.com/protect/v6.1.78) |\n| `v6.1.75` | 12 | 35 | 25 | 2026-06-02 | [json](protect/v6.1.75/openapi.json) | [md](protect/v6.1.75/reference.md) | [docs](https://developer.ui.com/protect/v6.1.75) |\n| `v6.1.68` | 12 | 35 | 25 | 2026-06-02 | [json](protect/v6.1.68/openapi.json) | [md](protect/v6.1.68/reference.md) | [docs](https://developer.ui.com/protect/v6.1.68) |\n| `v6.1.65` | 12 | 35 | 25 | 2026-06-02 | [json](protect/v6.1.65/openapi.json) | [md](protect/v6.1.65/reference.md) | [docs](https://developer.ui.com/protect/v6.1.65) |\n| `v6.0.53` | 12 | 35 | 25 | 2026-06-02 | [json](protect/v6.0.53/openapi.json) | [md](protect/v6.0.53/reference.md) | [docs](https://developer.ui.com/protect/v6.0.53) |\n| `v6.0.47` | 12 | 35 | 25 | 2026-06-02 | [json](protect/v6.0.47/openapi.json) | [md](protect/v6.0.47/reference.md) | [docs](https://developer.ui.com/protect/v6.0.47) |\n| `v6.0.41` | 12 | 35 | 25 | 2026-06-02 | [json](protect/v6.0.41/openapi.json) | [md](protect/v6.0.41/reference.md) | [docs](https://developer.ui.com/protect/v6.0.41) |\n| `v5.3.48` | 12 | 35 | 25 | 2026-06-02 | [json](protect/v5.3.48/openapi.json) | [md](protect/v5.3.48/reference.md) | [docs](https://developer.ui.com/protect/v5.3.48) |\n| `v5.3.45` | 12 | 35 | 25 | 2026-06-02 | [json](protect/v5.3.45/openapi.json) | [md](protect/v5.3.45/reference.md) | [docs](https://developer.ui.com/protect/v5.3.45) |\n| `v5.3.41` | 12 | 35 | 25 | 2026-06-02 | [json](protect/v5.3.41/openapi.json) | [md](protect/v5.3.41/reference.md) | [docs](https://developer.ui.com/protect/v5.3.41) |\n| `v5.3.38` | 12 | 35 | 25 | 2026-06-02 | [json](protect/v5.3.38/openapi.json) | [md](protect/v5.3.38/reference.md) | [docs](https://developer.ui.com/protect/v5.3.38) |\n\n\u003c/details\u003e\n\u003c!-- catalog:end --\u003e\n\n---\n\n## Updating\n\n```bash\npython update_docs.py                 # every version of every app\npython update_docs.py --latest-only   # only the latest version of each app\npython update_docs.py --app network   # a specific app\npython update_docs.py --dry-run       # show what would change, without writing\npython update_readme.py               # refresh badges + catalog in the READMEs\npython validate.py                    # validate integrity (JSON, catalog, links)\n```\n\nNo browser or credentials required: `update_docs.py` reads the official `sitemap.xml`, discovers the `app/version` pairs, downloads each page's RSC payload (`RSC: 1` header) and extracts the embedded full OpenAPI. Pure Python standard library.\n\n## 🤖 Automatic updates (CI)\n\nThe [`.github/workflows/update-docs.yml`](./.github/workflows/update-docs.yml) workflow runs daily (and on demand), regenerates everything and commits **only when the upstream docs change** - so new versions show up on their own as soon as Ubiquiti publishes them.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopastorello%2Funifi-api-docs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopastorello%2Funifi-api-docs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopastorello%2Funifi-api-docs/lists"}