{"openapi":"3.1.0","info":{"title":"Glitter AI API","version":"1.0.0","description":"The Glitter AI API reads the guides, teams and members a key may see. It is read-only in v1.\n\n## Authentication\n\nEvery request carries an API key as a bearer token:\n\n```\nAuthorization: Bearer glt_live_…\n```\n\nA team admin creates a key under **My Team → API**; an organization admin creates one under **Organization Settings → API**. A key belongs to one team, or to one organization and then reaches every team in it. A key sees every guide of its teams, drafts included, as a team admin does; only a guide whose recording is still processing stays out. The full key is shown once, at creation.\n\n## Scopes\n\nA key carries the scopes it was created with: `guides:read`, `teams:read`, `members:read`. A request outside the key's scopes answers `403 scope_missing`.\n\n## Pagination\n\nLists take `limit` (1 to 100, default 50) and return `next_cursor`. Pass it back as `cursor` for the next page; `null` means the last page. Cursors are opaque.\n\n## Errors\n\nEvery refusal is one JSON shape (RFC 9457) with a stable `code` to switch on:\n\n```json\n{ \"type\": \"https://www.glitter.io/developers/api-reference#errors\", \"title\": \"Not found\", \"status\": 404,\n  \"detail\": \"No guide 9c2f… is visible to this key.\", \"code\": \"not_found\", \"request_id\": \"…\" }\n```\n\n| Code | Status | Meaning |\n|---|---|---|\n| `invalid_key` | 401 | The bearer is missing, malformed, unknown or revoked. |\n| `key_expired` | 401 | The key passed its expiry. Create a new one. |\n| `scope_missing` | 403 | The key lacks the scope this endpoint needs. |\n| `api_disabled` | 403 | The organization turned API access off. |\n| `team_keys_disabled` | 403 | The organization allows organization keys only. |\n| `rate_limited` | 429 | 600 requests per minute per key. `Retry-After` says when. |\n| `invalid_request` | 400 | A parameter is wrong; `detail` names it. |\n| `not_found` | 404 | Nothing the key may see has that id. |\n| `internal_error` | 500 | Our fault. Quote `request_id` to support. |\n\nEvery response carries `X-Request-Id`, `RateLimit-Limit` and `RateLimit-Remaining`.\n\n## Webhooks\n\nGlitter will POST a JSON envelope to an endpoint URL you add under **My Team → API** or **Organization Settings → API** when a guide is created, updated, deleted, finishes processing or fails, and when someone joins, leaves or changes role on a team. Pick the events when you add the endpoint. The Webhooks group below lists every event with its schema and an example; the [Webhooks guide](https://www.glitter.io/developers/webhooks) covers setup, delivery, retries, verification and troubleshooting.\n\nEvery guide in the team sends events, drafts included, which is what a team admin sees in the app; `placement.team_guides` tells a draft from a guide in Team Guides. The payload carries the guide's summary and where it lives (`placement`), never its body: call `GET /guides/{guideId}` with your key for the content, in `markdown_body`. `changed` lists the columns a `guide.updated` event is about. Edits inside one minute arrive as one event.\n\nEvery delivery carries these headers:\n\n```\nContent-Type: application/json\nUser-Agent: Glitter-Webhooks/1\nX-Glitter-Event: guide.updated\nX-Glitter-Delivery: 7c1d…\nX-Glitter-Signature: sha256=9f2c…\n```\n\n**Checking the signature is optional.** It is an HMAC-SHA256 of the raw body with the endpoint's signing key, which you will find behind **Reveal** on the endpoint's row. Complete verifiers in seven languages are behind that same button; the Node and Python ones:\n\n```javascript\nimport { createHmac, timingSafeEqual } from 'node:crypto';\n\n// rawBody: the request body exactly as received, before any JSON parsing\nexport function verifyGlitterWebhook(rawBody, signatureHeader, signingKey) {\n  const expected = 'sha256=' + createHmac('sha256', signingKey).update(rawBody).digest('hex');\n  const given = signatureHeader ?? '';\n  return expected.length === given.length && timingSafeEqual(Buffer.from(expected), Buffer.from(given));\n}\n\n// Express\napp.post('/glitter', express.raw({ type: 'application/json' }), (req, res) => {\n  if (!verifyGlitterWebhook(req.body, req.get('X-Glitter-Signature'), process.env.GLITTER_SIGNING_KEY)) return res.sendStatus(401);\n  const event = JSON.parse(req.body);\n  res.sendStatus(200);\n});\n```\n\n```python\nimport hashlib\nimport hmac\nimport os\n\nfrom flask import Flask, abort, request\n\napp = Flask(__name__)\n\n\ndef verify_glitter_webhook(raw_body: bytes, signature_header: str | None, signing_key: str) -> bool:\n    expected = \"sha256=\" + hmac.new(signing_key.encode(), raw_body, hashlib.sha256).hexdigest()\n    return hmac.compare_digest(expected, signature_header or \"\")\n\n\n@app.post(\"/glitter\")\ndef glitter():\n    if not verify_glitter_webhook(request.get_data(), request.headers.get(\"X-Glitter-Signature\"), os.environ[\"GLITTER_SIGNING_KEY\"]):\n        abort(401)\n    event = request.get_json()\n    return \"\", 200\n```\n\nVerify the raw bytes as received, before any JSON parsing. Rotating the key replaces it at once; deliveries that fail while you update your server are retried.\n\nAnswer any 2xx within 10 seconds. Glitter will not follow redirects. On any other answer Glitter will retry up to 8 times over about a day. After a day of nothing but failures the endpoint will pause and the admins of its home will get one email; a 410 pauses it at once. Resume from the endpoint's menu, with the option to redeliver what was missed. Every attempt, with the request and the answer, is under **Deliveries**, where any one can be sent again. Glitter sends from no fixed IP addresses, so the signature is the way to know a request is Glitter's."},"servers":[{"url":"https://www.glitter.io/api/v1","description":"Production"}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"Glitter API key","description":"A key created under My Team → API or Organization Settings → API."}},"schemas":{"ApiKeyHome":{"type":"object","properties":{"type":{"type":"string","enum":["team","organization"]},"id":{"type":"string"}},"required":["type","id"]},"ApiKeyHomeType":{"type":"string","enum":["team","organization"]},"ApiScope":{"type":"string","enum":["guides:read","teams:read","members:read"]},"CreateApiKeyBody":{"type":"object","properties":{"name":{"type":"string","minLength":1},"scopes":{"type":"array","items":{"type":"string"},"minItems":1},"expires_in_days":{"anyOf":[{"oneOf":[{"type":"string"},{"type":"string"},{"type":"string"}]},{"type":"null"}]}},"required":["name","scopes","expires_in_days"]},"GuideListItem":{"type":"object","properties":{"team_id":{"type":["string","null"]},"created_at":{"type":["string","null"]},"id":{"type":"string"},"title":{"type":["string","null"]},"description":{"type":["string","null"]},"owner_name":{"type":["string","null"]},"icon_url":{"type":["string","null"]},"permalink":{"type":["string","null"]},"publish_status":{"type":["string","null"],"enum":["DRAFT","PUBLISHED"]},"updated_at":{"type":["string","null"]},"locked":{"type":"boolean","description":"Past the plan's guide limit: the guide opens as a short cut, in the app and through the API alike."}},"required":["locked"]},"GuideLockRow":{"type":"object","properties":{"profile_id":{"type":["string","null"]},"team_id":{"type":"object"},"created_at":{"type":"object"}},"required":["profile_id","team_id","created_at"]},"GuideParams":{},"GuideResource":{"type":"object","properties":{"team_id":{"type":["string","null"]},"created_at":{"type":["string","null"]},"id":{"type":"string"},"title":{"type":["string","null"]},"description":{"type":["string","null"]},"owner_name":{"type":["string","null"]},"icon_url":{"type":["string","null"]},"permalink":{"type":["string","null"]},"publish_status":{"type":["string","null"],"enum":["DRAFT","PUBLISHED"]},"updated_at":{"type":["string","null"]},"language":{"type":"string"},"text_direction":{"type":"string","enum":["rtl","ltr"]},"app_version":{"type":["string","null"]},"thumbnail_url":{"type":["string","null"]},"tags":{"type":["array","null"],"items":{"type":"string"}},"folder_id":{"type":["string","null"]},"is_public":{"type":"boolean"},"markdown_body":{"type":"string","description":"The guide as markdown, the same text Export to markdown produces; a preview closes with the notice."},"brand_color":{"type":["string","null"],"description":"The team's brand color, null for Glitter's default."},"locked":{"type":"boolean","description":"Past the plan's guide limit: markdown_body is the short cut the guide's public page shows."},"notice":{"type":["string","null"],"description":"Null when the plan includes full guides through the API; otherwise why the guide stops where it does."}},"required":["markdown_body","brand_color","locked","notice"]},"GuideResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"team_id":{"type":["string","null"]},"created_at":{"type":["string","null"]},"id":{"type":"string"},"title":{"type":["string","null"]},"description":{"type":["string","null"]},"owner_name":{"type":["string","null"]},"icon_url":{"type":["string","null"]},"permalink":{"type":["string","null"]},"publish_status":{"type":["string","null"],"enum":["DRAFT","PUBLISHED"]},"updated_at":{"type":["string","null"]},"language":{"type":"string"},"text_direction":{"type":"string","enum":["rtl","ltr"]},"app_version":{"type":["string","null"]},"thumbnail_url":{"type":["string","null"]},"tags":{"type":["array","null"],"items":{"type":"string"}},"folder_id":{"type":["string","null"]},"is_public":{"type":"boolean"},"markdown_body":{"type":"string","description":"The guide as markdown, the same text Export to markdown produces; a preview closes with the notice."},"brand_color":{"type":["string","null"],"description":"The team's brand color, null for Glitter's default."},"locked":{"type":"boolean","description":"Past the plan's guide limit: markdown_body is the short cut the guide's public page shows."},"notice":{"type":["string","null"],"description":"Null when the plan includes full guides through the API; otherwise why the guide stops where it does."}},"required":["markdown_body","brand_color","locked","notice"]}},"required":["data"]},"GuidesPage":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"team_id":{"type":["string","null"]},"created_at":{"type":["string","null"]},"id":{"type":"string"},"title":{"type":["string","null"]},"description":{"type":["string","null"]},"owner_name":{"type":["string","null"]},"icon_url":{"type":["string","null"]},"permalink":{"type":["string","null"]},"publish_status":{"type":["string","null"],"enum":["DRAFT","PUBLISHED"]},"updated_at":{"type":["string","null"]},"locked":{"type":"boolean","description":"Past the plan's guide limit: the guide opens as a short cut, in the app and through the API alike."}},"required":["locked"]},"description":"Pass as `cursor` to fetch the next page; null on the last page."},"next_cursor":{"type":["string","null"],"description":"Pass as `cursor` to fetch the next page; null on the last page."}},"required":["data","next_cursor"]},"GuidesQuery":{"type":"object","properties":{"team_id":{"type":"string","format":"uuid","description":"Narrow to one team. Omit for every team the key reaches."},"q":{"type":"string","minLength":2,"maxLength":200,"description":"Case-insensitive match on the guide title."},"limit":{"default":50,"description":"Rows per page, 1 to 100.","type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string","description":"The next_cursor of the previous page."}},"required":[]},"Json":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean","enum":[false]},{"type":"boolean","enum":[true]},{"type":"object","additionalProperties":{"oneOf":[{"type":"object"},{"type":"string"},{"type":"number"},{"type":"boolean","enum":[false]},{"type":"boolean","enum":[true]},{"type":"object"},{"type":"array","items":{"type":"object"}}]}},{"type":"object"}]},"KeyResource":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"home":{"type":"object","properties":{"type":{"type":"string","enum":["team","organization"]},"id":{"type":"string"}},"required":["type","id"]},"scopes":{"type":"array","items":{"type":"string","enum":["guides:read","teams:read","members:read"]}},"expires_at":{"type":["string","null"]}},"required":["id","name","home","scopes","expires_at"]},"MembersResponse":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":["string","null"]},"email":{"type":"string"},"avatar_url":{"type":["string","null"]},"role":{"type":"string","enum":["EDITOR","VIEWER","ADMIN"]},"joined_at":{"type":["string","null"]}},"required":["id","name","email","avatar_url","role","joined_at"]}}},"required":["data"]},"MemberSummary":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":["string","null"]},"email":{"type":"string"},"avatar_url":{"type":["string","null"]},"role":{"type":"string","enum":["EDITOR","VIEWER","ADMIN"]},"joined_at":{"type":["string","null"]}},"required":["id","name","email","avatar_url","role","joined_at"]},"OptionalTeamQuery":{"type":"object","properties":{"team_id":{"type":"string","format":"uuid","description":"Narrow to one team. Omit for every team the key reaches."}}},"PublishStatusType":{"type":"string","enum":["DRAFT","PUBLISHED"]},"TeamAccessRoleType":{"type":"string","enum":["EDITOR","VIEWER","ADMIN"]},"TeamQuery":{"type":"object","properties":{"team_id":{"type":"string","format":"uuid","description":"The team to read. Call GET /teams to find ids."}},"required":["team_id"]},"TeamsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":["string","null"]},"role":{"type":["string","null"],"enum":["EDITOR","VIEWER","ADMIN"],"description":"the caller's role; a person has one, a key has none"}},"required":["id","name","role"]}}},"required":["data"]},"TeamSummary":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":["string","null"]},"role":{"type":["string","null"],"enum":["EDITOR","VIEWER","ADMIN"],"description":"the caller's role; a person has one, a key has none"}},"required":["id","name","role"]},"TextDirectionType":{"type":"string","enum":["rtl","ltr"]},"VerifyKeyResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"home":{"type":"object","properties":{"type":{"type":"string","enum":["team","organization"]},"id":{"type":"string"}},"required":["type","id"]},"scopes":{"type":"array","items":{"type":"string","enum":["guides:read","teams:read","members:read"]}},"expires_at":{"type":["string","null"]}},"required":["id","name","home","scopes","expires_at"]}},"required":["data"]},"GuideCreatedEvent":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"team_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"organization_id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"type":{"type":"string","const":"guide.created"},"data":{"type":"object","properties":{"guide":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"type":["string","null"]},"description":{"type":["string","null"]},"permalink":{"type":["string","null"]},"updated_at":{"type":["string","null"]},"team_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"folder_id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"language":{"type":"string"},"url":{"type":"string","format":"uri","description":"The guide in Glitter."}},"required":["id","title","description","permalink","updated_at","team_id","folder_id","language","url"],"additionalProperties":false},"placement":{"type":"object","properties":{"team_guides":{"type":"boolean","description":"In Team Guides (moved out of Drafts)."},"public_link":{"type":"boolean","description":"Readable by anyone with the share link."}},"required":["team_guides","public_link"],"additionalProperties":false},"changed":{"type":"array","items":{"type":"string"},"description":"Columns that changed, for guide.updated; empty otherwise."}},"required":["guide","placement","changed"],"additionalProperties":false}},"required":["id","created_at","team_id","organization_id","type","data"],"additionalProperties":false},"GuideUpdatedEvent":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"team_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"organization_id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"type":{"type":"string","const":"guide.updated"},"data":{"type":"object","properties":{"guide":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"type":["string","null"]},"description":{"type":["string","null"]},"permalink":{"type":["string","null"]},"updated_at":{"type":["string","null"]},"team_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"folder_id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"language":{"type":"string"},"url":{"type":"string","format":"uri","description":"The guide in Glitter."}},"required":["id","title","description","permalink","updated_at","team_id","folder_id","language","url"],"additionalProperties":false},"placement":{"type":"object","properties":{"team_guides":{"type":"boolean","description":"In Team Guides (moved out of Drafts)."},"public_link":{"type":"boolean","description":"Readable by anyone with the share link."}},"required":["team_guides","public_link"],"additionalProperties":false},"changed":{"type":"array","items":{"type":"string"},"description":"Columns that changed, for guide.updated; empty otherwise."}},"required":["guide","placement","changed"],"additionalProperties":false}},"required":["id","created_at","team_id","organization_id","type","data"],"additionalProperties":false},"GuideDeletedEvent":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"team_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"organization_id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"type":{"type":"string","const":"guide.deleted"},"data":{"type":"object","properties":{"guide":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"team_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["id","team_id"],"additionalProperties":false}},"required":["guide"],"additionalProperties":false}},"required":["id","created_at","team_id","organization_id","type","data"],"additionalProperties":false},"GuideReadyEvent":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"team_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"organization_id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"type":{"type":"string","const":"guide.ready"},"data":{"type":"object","properties":{"guide":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"type":["string","null"]},"description":{"type":["string","null"]},"permalink":{"type":["string","null"]},"updated_at":{"type":["string","null"]},"team_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"folder_id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"language":{"type":"string"},"url":{"type":"string","format":"uri","description":"The guide in Glitter."}},"required":["id","title","description","permalink","updated_at","team_id","folder_id","language","url"],"additionalProperties":false},"placement":{"type":"object","properties":{"team_guides":{"type":"boolean","description":"In Team Guides (moved out of Drafts)."},"public_link":{"type":"boolean","description":"Readable by anyone with the share link."}},"required":["team_guides","public_link"],"additionalProperties":false},"changed":{"type":"array","items":{"type":"string"},"description":"Columns that changed, for guide.updated; empty otherwise."}},"required":["guide","placement","changed"],"additionalProperties":false}},"required":["id","created_at","team_id","organization_id","type","data"],"additionalProperties":false},"GuideFailedEvent":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"team_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"organization_id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"type":{"type":"string","const":"guide.failed"},"data":{"type":"object","properties":{"guide":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"type":["string","null"]},"description":{"type":["string","null"]},"permalink":{"type":["string","null"]},"updated_at":{"type":["string","null"]},"team_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"folder_id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"language":{"type":"string"},"url":{"type":"string","format":"uri","description":"The guide in Glitter."}},"required":["id","title","description","permalink","updated_at","team_id","folder_id","language","url"],"additionalProperties":false},"placement":{"type":"object","properties":{"team_guides":{"type":"boolean","description":"In Team Guides (moved out of Drafts)."},"public_link":{"type":"boolean","description":"Readable by anyone with the share link."}},"required":["team_guides","public_link"],"additionalProperties":false},"changed":{"type":"array","items":{"type":"string"},"description":"Columns that changed, for guide.updated; empty otherwise."}},"required":["guide","placement","changed"],"additionalProperties":false}},"required":["id","created_at","team_id","organization_id","type","data"],"additionalProperties":false},"MemberJoinedEvent":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"team_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"organization_id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"type":{"type":"string","const":"member.joined"},"data":{"type":"object","properties":{"member":{"type":"object","properties":{"user_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"email":{"type":"string"},"name":{"type":["string","null"]},"role":{"type":"string"},"team_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["user_id","email","name","role","team_id"],"additionalProperties":false}},"required":["member"],"additionalProperties":false}},"required":["id","created_at","team_id","organization_id","type","data"],"additionalProperties":false},"MemberLeftEvent":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"team_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"organization_id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"type":{"type":"string","const":"member.left"},"data":{"type":"object","properties":{"member":{"type":"object","properties":{"user_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"email":{"type":"string"},"name":{"type":["string","null"]},"role":{"type":"string"},"team_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["user_id","email","name","role","team_id"],"additionalProperties":false}},"required":["member"],"additionalProperties":false}},"required":["id","created_at","team_id","organization_id","type","data"],"additionalProperties":false},"MemberRoleChangedEvent":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"team_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"organization_id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"type":{"type":"string","const":"member.role_changed"},"data":{"type":"object","properties":{"member":{"type":"object","properties":{"user_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"email":{"type":"string"},"name":{"type":["string","null"]},"role":{"type":"string"},"team_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["user_id","email","name","role","team_id"],"additionalProperties":false}},"required":["member"],"additionalProperties":false}},"required":["id","created_at","team_id","organization_id","type","data"],"additionalProperties":false},"PingEvent":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"team_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"organization_id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"type":{"type":"string","const":"ping"},"data":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}},"required":["id","created_at","team_id","organization_id","type","data"],"additionalProperties":false}},"responses":{"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","examples":["https://www.glitter.io/developers/api-reference#errors"]},"title":{"type":"string","examples":["Invalid request"]},"status":{"type":"integer"},"detail":{"type":"string","examples":["limit: Too big"]},"code":{"type":"string","examples":["invalid_request"]},"request_id":{"type":"string","examples":["3f2a9c1e-7b4d-4e0a-9c2f-1d5e6a7b8c9d"]}}}}}},"401":{"description":"Invalid or expired key","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","examples":["https://www.glitter.io/developers/api-reference#errors"]},"title":{"type":"string","examples":["Invalid API key"]},"status":{"type":"integer"},"detail":{"type":"string","examples":["This API key is not known."]},"code":{"type":"string","examples":["invalid_key"]},"request_id":{"type":"string","examples":["3f2a9c1e-7b4d-4e0a-9c2f-1d5e6a7b8c9d"]}}}}}},"403":{"description":"Scope missing or API turned off","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","examples":["https://www.glitter.io/developers/api-reference#errors"]},"title":{"type":"string","examples":["Scope missing"]},"status":{"type":"integer"},"detail":{"type":"string","examples":["This key lacks the members:read scope."]},"code":{"type":"string","examples":["scope_missing"]},"request_id":{"type":"string","examples":["3f2a9c1e-7b4d-4e0a-9c2f-1d5e6a7b8c9d"]}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","examples":["https://www.glitter.io/developers/api-reference#errors"]},"title":{"type":"string","examples":["Not found"]},"status":{"type":"integer"},"detail":{"type":"string","examples":["No guide is visible to this key."]},"code":{"type":"string","examples":["not_found"]},"request_id":{"type":"string","examples":["3f2a9c1e-7b4d-4e0a-9c2f-1d5e6a7b8c9d"]}}}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","examples":["https://www.glitter.io/developers/api-reference#errors"]},"title":{"type":"string","examples":["Too many requests"]},"status":{"type":"integer"},"detail":{"type":"string","examples":["600 requests per minute per key."]},"code":{"type":"string","examples":["rate_limited"]},"request_id":{"type":"string","examples":["3f2a9c1e-7b4d-4e0a-9c2f-1d5e6a7b8c9d"]}}}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","examples":["https://www.glitter.io/developers/api-reference#errors"]},"title":{"type":"string","examples":["Something went wrong"]},"status":{"type":"integer"},"detail":{"type":"string","examples":["Something went wrong on our side."]},"code":{"type":"string","examples":["internal_error"]},"request_id":{"type":"string","examples":["3f2a9c1e-7b4d-4e0a-9c2f-1d5e6a7b8c9d"]}}}}}}}},"security":[{"BearerAuth":[]}],"tags":[{"name":"Guides"},{"name":"Teams"},{"name":"Members"},{"name":"Authentication"},{"name":"Webhooks"}],"paths":{"/auth/verify":{"get":{"operationId":"verifyKey","summary":"Verify your key","description":"Confirms the key works and returns what it is: its name, home (one team or one organization), scopes and expiry. The first call to make after wiring a key in.","tags":["Authentication"],"parameters":[],"security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyKeyResponse"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/guides":{"get":{"operationId":"listGuides","summary":"List or search guides","description":"Every guide the key reaches, drafts included, newest first. Narrow to a team with team_id, search titles with q, and page with limit and cursor.","tags":["Guides"],"parameters":[{"in":"query","name":"team_id","required":false,"schema":{"type":"string","format":"uuid"},"description":"Narrow to one team. Omit for every team the key reaches."},{"in":"query","name":"q","required":false,"schema":{"type":"string","minLength":2,"maxLength":200},"description":"Case-insensitive match on the guide title."},{"in":"query","name":"limit","required":false,"schema":{"default":50,"type":"integer","minimum":1,"maximum":100},"description":"Rows per page, 1 to 100."},{"in":"query","name":"cursor","required":false,"schema":{"type":"string"},"description":"The next_cursor of the previous page."}],"security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GuidesPage"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/guides/{guideId}":{"get":{"operationId":"getGuide","summary":"Get one guide","description":"By id or permalink: metadata with markdown_body, the same text Export to markdown produces, screenshots as image links. On a plan without full API access markdown_body is the same preview a file export gets, `locked` guides are cut to their public preview, and `notice` (also closing markdown_body) says so.","tags":["Guides"],"parameters":[],"security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GuideResponse"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/members":{"get":{"operationId":"listMembers","summary":"List team members","description":"Name, email, avatar and role of every member of one team the key reaches. Needs the members:read scope.","tags":["Members"],"parameters":[{"in":"query","name":"team_id","required":true,"schema":{"type":"string","format":"uuid"},"description":"The team to read. Call GET /teams to find ids."}],"security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembersResponse"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/teams":{"get":{"operationId":"listTeams","summary":"List teams","description":"The teams the key reaches: its own team, or every team of its organization, including teams that join later.","tags":["Teams"],"parameters":[],"security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamsResponse"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}}},"webhooks":{"guide.created":{"post":{"operationId":"guide.created","summary":"A guide is created","description":"A guide was created in the team, or moved into it from another team. Drafts count; `placement.team_guides` says whether it is in Team Guides.","tags":["Webhooks"],"parameters":[{"name":"X-Glitter-Event","in":"header","required":true,"description":"The event name, the same as `type` in the body.","schema":{"type":"string"}},{"name":"X-Glitter-Delivery","in":"header","required":true,"description":"One id per attempt; the same event retried carries a new one.","schema":{"type":"string","format":"uuid"}},{"name":"X-Glitter-Signature","in":"header","required":true,"description":"`sha256=` followed by the hex HMAC-SHA256 of the raw body with the endpoint's signing key.","schema":{"type":"string"}},{"name":"User-Agent","in":"header","required":true,"description":"Glitter-Webhooks/1","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GuideCreatedEvent"},"example":{"id":"0d6c1a2b-3e4f-4a5b-8c6d-7e8f9a0b1c2d","created_at":"2026-10-11T13:20:45Z","team_id":"4b1e7c2a-9d3f-4e8b-a1c6-0f5d2e7b9a34","organization_id":"9c0a4b2d-1e3f-4a5b-9c7d-2e4f6a8b0c1d","type":"guide.created","data":{"guide":{"id":"7d2e5f1a-3c4b-4d6e-8f9a-0b1c2d3e4f5a","title":"Set up SSO in Okta","description":null,"permalink":"set-up-sso-in-okta-7d2e5f1a","url":"https://www.glitter.io/share/7d2e5f1a-3c4b-4d6e-8f9a-0b1c2d3e4f5a","updated_at":"2026-10-11T13:20:12+00:00","team_id":"4b1e7c2a-9d3f-4e8b-a1c6-0f5d2e7b9a34","folder_id":null,"language":"english"},"placement":{"team_guides":true,"public_link":false},"changed":[]}}}}},"responses":{"2XX":{"description":"Received. Any 2xx within 10 seconds counts; anything else is retried."}}}},"guide.updated":{"post":{"operationId":"guide.updated","summary":"A guide changes: title, content, folder, access","description":"A guide changed, draft or not. `changed` lists the columns that moved: title, description, body, permalink, language, folder_id, publish_status, team_role, is_public. Edits inside one minute arrive as one event.","tags":["Webhooks"],"parameters":[{"name":"X-Glitter-Event","in":"header","required":true,"description":"The event name, the same as `type` in the body.","schema":{"type":"string"}},{"name":"X-Glitter-Delivery","in":"header","required":true,"description":"One id per attempt; the same event retried carries a new one.","schema":{"type":"string","format":"uuid"}},{"name":"X-Glitter-Signature","in":"header","required":true,"description":"`sha256=` followed by the hex HMAC-SHA256 of the raw body with the endpoint's signing key.","schema":{"type":"string"}},{"name":"User-Agent","in":"header","required":true,"description":"Glitter-Webhooks/1","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GuideUpdatedEvent"},"example":{"id":"0d6c1a2b-3e4f-4a5b-8c6d-7e8f9a0b1c2d","created_at":"2026-10-11T13:20:45Z","team_id":"4b1e7c2a-9d3f-4e8b-a1c6-0f5d2e7b9a34","organization_id":"9c0a4b2d-1e3f-4a5b-9c7d-2e4f6a8b0c1d","type":"guide.updated","data":{"guide":{"id":"7d2e5f1a-3c4b-4d6e-8f9a-0b1c2d3e4f5a","title":"Set up SSO in Okta","description":null,"permalink":"set-up-sso-in-okta-7d2e5f1a","url":"https://www.glitter.io/share/7d2e5f1a-3c4b-4d6e-8f9a-0b1c2d3e4f5a","updated_at":"2026-10-11T13:20:12+00:00","team_id":"4b1e7c2a-9d3f-4e8b-a1c6-0f5d2e7b9a34","folder_id":null,"language":"english"},"placement":{"team_guides":true,"public_link":false},"changed":["title","body"]}}}}},"responses":{"2XX":{"description":"Received. Any 2xx within 10 seconds counts; anything else is retried."}}}},"guide.deleted":{"post":{"operationId":"guide.deleted","summary":"A guide is deleted","description":"A guide was deleted, or moved out of this team. Only the id and team id are sent.","tags":["Webhooks"],"parameters":[{"name":"X-Glitter-Event","in":"header","required":true,"description":"The event name, the same as `type` in the body.","schema":{"type":"string"}},{"name":"X-Glitter-Delivery","in":"header","required":true,"description":"One id per attempt; the same event retried carries a new one.","schema":{"type":"string","format":"uuid"}},{"name":"X-Glitter-Signature","in":"header","required":true,"description":"`sha256=` followed by the hex HMAC-SHA256 of the raw body with the endpoint's signing key.","schema":{"type":"string"}},{"name":"User-Agent","in":"header","required":true,"description":"Glitter-Webhooks/1","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GuideDeletedEvent"},"example":{"id":"0d6c1a2b-3e4f-4a5b-8c6d-7e8f9a0b1c2d","created_at":"2026-10-11T13:20:45Z","team_id":"4b1e7c2a-9d3f-4e8b-a1c6-0f5d2e7b9a34","organization_id":"9c0a4b2d-1e3f-4a5b-9c7d-2e4f6a8b0c1d","type":"guide.deleted","data":{"guide":{"id":"7d2e5f1a-3c4b-4d6e-8f9a-0b1c2d3e4f5a","team_id":"4b1e7c2a-9d3f-4e8b-a1c6-0f5d2e7b9a34"}}}}}},"responses":{"2XX":{"description":"Received. Any 2xx within 10 seconds counts; anything else is retried."}}}},"guide.ready":{"post":{"operationId":"guide.ready","summary":"A guide finishes processing","description":"Processing of a recording or an import finished and the guide has its steps.","tags":["Webhooks"],"parameters":[{"name":"X-Glitter-Event","in":"header","required":true,"description":"The event name, the same as `type` in the body.","schema":{"type":"string"}},{"name":"X-Glitter-Delivery","in":"header","required":true,"description":"One id per attempt; the same event retried carries a new one.","schema":{"type":"string","format":"uuid"}},{"name":"X-Glitter-Signature","in":"header","required":true,"description":"`sha256=` followed by the hex HMAC-SHA256 of the raw body with the endpoint's signing key.","schema":{"type":"string"}},{"name":"User-Agent","in":"header","required":true,"description":"Glitter-Webhooks/1","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GuideReadyEvent"},"example":{"id":"0d6c1a2b-3e4f-4a5b-8c6d-7e8f9a0b1c2d","created_at":"2026-10-11T13:20:45Z","team_id":"4b1e7c2a-9d3f-4e8b-a1c6-0f5d2e7b9a34","organization_id":"9c0a4b2d-1e3f-4a5b-9c7d-2e4f6a8b0c1d","type":"guide.ready","data":{"guide":{"id":"7d2e5f1a-3c4b-4d6e-8f9a-0b1c2d3e4f5a","title":"Set up SSO in Okta","description":null,"permalink":"set-up-sso-in-okta-7d2e5f1a","url":"https://www.glitter.io/share/7d2e5f1a-3c4b-4d6e-8f9a-0b1c2d3e4f5a","updated_at":"2026-10-11T13:20:12+00:00","team_id":"4b1e7c2a-9d3f-4e8b-a1c6-0f5d2e7b9a34","folder_id":null,"language":"english"},"placement":{"team_guides":true,"public_link":false},"changed":[]}}}}},"responses":{"2XX":{"description":"Received. Any 2xx within 10 seconds counts; anything else is retried."}}}},"guide.failed":{"post":{"operationId":"guide.failed","summary":"Processing fails","description":"Processing failed. The guide is still there; its owner sees the error in Glitter.","tags":["Webhooks"],"parameters":[{"name":"X-Glitter-Event","in":"header","required":true,"description":"The event name, the same as `type` in the body.","schema":{"type":"string"}},{"name":"X-Glitter-Delivery","in":"header","required":true,"description":"One id per attempt; the same event retried carries a new one.","schema":{"type":"string","format":"uuid"}},{"name":"X-Glitter-Signature","in":"header","required":true,"description":"`sha256=` followed by the hex HMAC-SHA256 of the raw body with the endpoint's signing key.","schema":{"type":"string"}},{"name":"User-Agent","in":"header","required":true,"description":"Glitter-Webhooks/1","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GuideFailedEvent"},"example":{"id":"0d6c1a2b-3e4f-4a5b-8c6d-7e8f9a0b1c2d","created_at":"2026-10-11T13:20:45Z","team_id":"4b1e7c2a-9d3f-4e8b-a1c6-0f5d2e7b9a34","organization_id":"9c0a4b2d-1e3f-4a5b-9c7d-2e4f6a8b0c1d","type":"guide.failed","data":{"guide":{"id":"7d2e5f1a-3c4b-4d6e-8f9a-0b1c2d3e4f5a","title":"Set up SSO in Okta","description":null,"permalink":"set-up-sso-in-okta-7d2e5f1a","url":"https://www.glitter.io/share/7d2e5f1a-3c4b-4d6e-8f9a-0b1c2d3e4f5a","updated_at":"2026-10-11T13:20:12+00:00","team_id":"4b1e7c2a-9d3f-4e8b-a1c6-0f5d2e7b9a34","folder_id":null,"language":"english"},"placement":{"team_guides":true,"public_link":false},"changed":[]}}}}},"responses":{"2XX":{"description":"Received. Any 2xx within 10 seconds counts; anything else is retried."}}}},"member.joined":{"post":{"operationId":"member.joined","summary":"Someone joins the team","description":"A person joined the team.","tags":["Webhooks"],"parameters":[{"name":"X-Glitter-Event","in":"header","required":true,"description":"The event name, the same as `type` in the body.","schema":{"type":"string"}},{"name":"X-Glitter-Delivery","in":"header","required":true,"description":"One id per attempt; the same event retried carries a new one.","schema":{"type":"string","format":"uuid"}},{"name":"X-Glitter-Signature","in":"header","required":true,"description":"`sha256=` followed by the hex HMAC-SHA256 of the raw body with the endpoint's signing key.","schema":{"type":"string"}},{"name":"User-Agent","in":"header","required":true,"description":"Glitter-Webhooks/1","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberJoinedEvent"},"example":{"id":"0d6c1a2b-3e4f-4a5b-8c6d-7e8f9a0b1c2d","created_at":"2026-10-11T13:20:45Z","team_id":"4b1e7c2a-9d3f-4e8b-a1c6-0f5d2e7b9a34","organization_id":"9c0a4b2d-1e3f-4a5b-9c7d-2e4f6a8b0c1d","type":"member.joined","data":{"member":{"user_id":"a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d","email":"dana@example.com","name":"Dana Levi","role":"EDITOR","team_id":"4b1e7c2a-9d3f-4e8b-a1c6-0f5d2e7b9a34"}}}}}},"responses":{"2XX":{"description":"Received. Any 2xx within 10 seconds counts; anything else is retried."}}}},"member.left":{"post":{"operationId":"member.left","summary":"Someone leaves","description":"A person left the team or was removed.","tags":["Webhooks"],"parameters":[{"name":"X-Glitter-Event","in":"header","required":true,"description":"The event name, the same as `type` in the body.","schema":{"type":"string"}},{"name":"X-Glitter-Delivery","in":"header","required":true,"description":"One id per attempt; the same event retried carries a new one.","schema":{"type":"string","format":"uuid"}},{"name":"X-Glitter-Signature","in":"header","required":true,"description":"`sha256=` followed by the hex HMAC-SHA256 of the raw body with the endpoint's signing key.","schema":{"type":"string"}},{"name":"User-Agent","in":"header","required":true,"description":"Glitter-Webhooks/1","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberLeftEvent"},"example":{"id":"0d6c1a2b-3e4f-4a5b-8c6d-7e8f9a0b1c2d","created_at":"2026-10-11T13:20:45Z","team_id":"4b1e7c2a-9d3f-4e8b-a1c6-0f5d2e7b9a34","organization_id":"9c0a4b2d-1e3f-4a5b-9c7d-2e4f6a8b0c1d","type":"member.left","data":{"member":{"user_id":"a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d","email":"dana@example.com","name":"Dana Levi","role":"EDITOR","team_id":"4b1e7c2a-9d3f-4e8b-a1c6-0f5d2e7b9a34"}}}}}},"responses":{"2XX":{"description":"Received. Any 2xx within 10 seconds counts; anything else is retried."}}}},"member.role_changed":{"post":{"operationId":"member.role_changed","summary":"A role changes","description":"A person's role on the team changed. `role` is the new role.","tags":["Webhooks"],"parameters":[{"name":"X-Glitter-Event","in":"header","required":true,"description":"The event name, the same as `type` in the body.","schema":{"type":"string"}},{"name":"X-Glitter-Delivery","in":"header","required":true,"description":"One id per attempt; the same event retried carries a new one.","schema":{"type":"string","format":"uuid"}},{"name":"X-Glitter-Signature","in":"header","required":true,"description":"`sha256=` followed by the hex HMAC-SHA256 of the raw body with the endpoint's signing key.","schema":{"type":"string"}},{"name":"User-Agent","in":"header","required":true,"description":"Glitter-Webhooks/1","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberRoleChangedEvent"},"example":{"id":"0d6c1a2b-3e4f-4a5b-8c6d-7e8f9a0b1c2d","created_at":"2026-10-11T13:20:45Z","team_id":"4b1e7c2a-9d3f-4e8b-a1c6-0f5d2e7b9a34","organization_id":"9c0a4b2d-1e3f-4a5b-9c7d-2e4f6a8b0c1d","type":"member.role_changed","data":{"member":{"user_id":"a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d","email":"dana@example.com","name":"Dana Levi","role":"EDITOR","team_id":"4b1e7c2a-9d3f-4e8b-a1c6-0f5d2e7b9a34"}}}}}},"responses":{"2XX":{"description":"Received. Any 2xx within 10 seconds counts; anything else is retried."}}}},"ping":{"post":{"operationId":"ping","summary":"Test event","description":"Sent by **Send test event** on an endpoint, through the same path as every other delivery.","tags":["Webhooks"],"parameters":[{"name":"X-Glitter-Event","in":"header","required":true,"description":"The event name, the same as `type` in the body.","schema":{"type":"string"}},{"name":"X-Glitter-Delivery","in":"header","required":true,"description":"One id per attempt; the same event retried carries a new one.","schema":{"type":"string","format":"uuid"}},{"name":"X-Glitter-Signature","in":"header","required":true,"description":"`sha256=` followed by the hex HMAC-SHA256 of the raw body with the endpoint's signing key.","schema":{"type":"string"}},{"name":"User-Agent","in":"header","required":true,"description":"Glitter-Webhooks/1","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PingEvent"},"example":{"id":"0d6c1a2b-3e4f-4a5b-8c6d-7e8f9a0b1c2d","created_at":"2026-10-11T13:20:45Z","team_id":"4b1e7c2a-9d3f-4e8b-a1c6-0f5d2e7b9a34","organization_id":"9c0a4b2d-1e3f-4a5b-9c7d-2e4f6a8b0c1d","type":"ping","data":{"message":"Hello from Glitter"}}}}},"responses":{"2XX":{"description":"Received. Any 2xx within 10 seconds counts; anything else is retried."}}}}}}