[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M74MMPZ7ZNX042ZCF6FFSSF2":3,"skill-same:01M74MMPZ7ZNX042ZCF6FFSSF2":65},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":15,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":34,"commitSha":35,"skillDirectory":36,"forksCount":13,"repositoryHtmlUrl":37,"repositoryHomepageUrl":6,"ownerHtmlUrl":38,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":39,"install":40,"resources":53},"01M74MMPZ7ZNX042ZCF6FFSSF2","clio",null,"Clio API integration with managed OAuth. Legal practice management including matters, contacts, activities, tasks, documents, calendar entries, time entries, and billing.\nUse this skill when users want to manage legal practice data in Clio Manage.\nFor other third party apps, use the api-gateway skill (https:\u002F\u002Fclawhub.ai\u002Fbyungkyu\u002Fapi-gateway).\nRequires network access and valid Maton API key.","meghal86\u002Fstacksignal","meghal86","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F37388715?v=4","01M6CS2EW8SK89GH52R2ZEN8QQ","01M728J5CGY456EETEFG6HJBTM",0,"MIT","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fclio\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fclio\u002FSKILL.md",[],[],"2026-11-11 15:11:14",false,"---\nname: clio\ndescription: |\n  Clio API integration with managed OAuth. Legal practice management including matters, contacts, activities, tasks, documents, calendar entries, time entries, and billing.\n  Use this skill when users want to manage legal practice data in Clio Manage.\n  For other third party apps, use the api-gateway skill (https:\u002F\u002Fclawhub.ai\u002Fbyungkyu\u002Fapi-gateway).\n  Requires network access and valid Maton API key.\nmetadata:\n  author: maton\n  version: \"1.0\"\n  clawdbot:\n    emoji: 🧠\n    homepage: \"https:\u002F\u002Fmaton.ai\"\n    requires:\n      env:\n        - MATON_API_KEY\n---\n\n# Clio\n\nAccess the Clio Manage API with managed OAuth authentication. Manage matters, contacts, activities, tasks, documents, calendar entries, time entries, and billing for legal practice management.\n\n## Quick Start\n\n```bash\n# List matters\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https:\u002F\u002Fgateway.maton.ai\u002Fclio\u002Fapi\u002Fv4\u002Fmatters?fields=id,display_number,description,status')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n## Base URL\n\n```\nhttps:\u002F\u002Fgateway.maton.ai\u002Fclio\u002F{native-api-path}\n```\n\nReplace `{native-api-path}` with the actual Clio API endpoint path. The gateway proxies requests to `app.clio.com` and automatically injects your OAuth token.\n\n## Authentication\n\nAll requests require the Maton API key in the Authorization header:\n\n```\nAuthorization: Bearer $MATON_API_KEY\n```\n\n**Environment Variable:** Set your API key as `MATON_API_KEY`:\n\n```bash\nexport MATON_API_KEY=\"YOUR_API_KEY\"\n```\n\n### Getting Your API Key\n\n1. Sign in or create an account at [maton.ai](https:\u002F\u002Fmaton.ai)\n2. Go to [maton.ai\u002Fsettings](https:\u002F\u002Fmaton.ai\u002Fsettings)\n3. Copy your API key\n\n## Connection Management\n\nManage your Clio OAuth connections at `https:\u002F\u002Fctrl.maton.ai`.\n\n### List Connections\n\n```bash\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https:\u002F\u002Fctrl.maton.ai\u002Fconnections?app=clio&status=ACTIVE')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n### Create Connection\n\n```bash\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\ndata = json.dumps({'app': 'clio'}).encode()\nreq = urllib.request.Request('https:\u002F\u002Fctrl.maton.ai\u002Fconnections', data=data, method='POST')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Content-Type', 'application\u002Fjson')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n### Get Connection\n\n```bash\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https:\u002F\u002Fctrl.maton.ai\u002Fconnections\u002F{connection_id}')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n**Response:**\n```json\n{\n  \"connection\": {\n    \"connection_id\": \"21fd90f9-5935-43cd-b6c8-bde9d915ca80\",\n    \"status\": \"ACTIVE\",\n    \"creation_time\": \"2025-12-08T07:20:53.488460Z\",\n    \"last_updated_time\": \"2026-01-31T20:03:32.593153Z\",\n    \"url\": \"https:\u002F\u002Fconnect.maton.ai\u002F?session_token=...\",\n    \"app\": \"clio\",\n    \"metadata\": {}\n  }\n}\n```\n\nOpen the returned `url` in a browser to complete OAuth authorization.\n\n### Delete Connection\n\n```bash\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https:\u002F\u002Fctrl.maton.ai\u002Fconnections\u002F{connection_id}', method='DELETE')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n### Specifying Connection\n\nIf you have multiple Clio connections, specify which one to use with the `Maton-Connection` header:\n\n```bash\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https:\u002F\u002Fgateway.maton.ai\u002Fclio\u002Fapi\u002Fv4\u002Fmatters')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Maton-Connection', '21fd90f9-5935-43cd-b6c8-bde9d915ca80')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\nIf omitted, the gateway uses the default (oldest) active connection.\n\n## API Reference\n\n### Field Selection\n\nBy default, Clio returns minimal fields (`id`, `etag`). Use the `fields` parameter to request specific fields:\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fmatters?fields=id,display_number,description,status\n```\n\nFor nested resources, use curly bracket syntax:\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Factivities?fields=id,type,matter{id,description}\n```\n\n### Matters\n\n#### List Matters\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fmatters?fields=id,display_number,description,status,client_reference\n```\n\n#### Get Matter\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fmatters\u002F{id}?fields=id,display_number,description,status,open_date,close_date\n```\n\n#### Create Matter\n\n```bash\nPOST \u002Fclio\u002Fapi\u002Fv4\u002Fmatters\nContent-Type: application\u002Fjson\n\n{\n  \"data\": {\n    \"description\": \"New Legal Matter\",\n    \"status\": \"open\",\n    \"client\": {\"id\": 12345}\n  }\n}\n```\n\n#### Update Matter\n\n```bash\nPATCH \u002Fclio\u002Fapi\u002Fv4\u002Fmatters\u002F{id}\nContent-Type: application\u002Fjson\n\n{\n  \"data\": {\n    \"description\": \"Updated Matter Description\",\n    \"status\": \"closed\"\n  }\n}\n```\n\n#### Delete Matter\n\n```bash\nDELETE \u002Fclio\u002Fapi\u002Fv4\u002Fmatters\u002F{id}\n```\n\n### Contacts\n\n#### List Contacts\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fcontacts?fields=id,name,type,primary_email_address,primary_phone_number\n```\n\n#### Get Contact\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fcontacts\u002F{id}?fields=id,name,type,first_name,last_name,company\n```\n\n#### Create Contact (Person)\n\n```bash\nPOST \u002Fclio\u002Fapi\u002Fv4\u002Fcontacts\nContent-Type: application\u002Fjson\n\n{\n  \"data\": {\n    \"type\": \"Person\",\n    \"first_name\": \"John\",\n    \"last_name\": \"Doe\",\n    \"email_addresses\": [\n      {\"name\": \"Work\", \"address\": \"john@example.com\", \"default_email\": true}\n    ]\n  }\n}\n```\n\n#### Create Contact (Company)\n\n```bash\nPOST \u002Fclio\u002Fapi\u002Fv4\u002Fcontacts\nContent-Type: application\u002Fjson\n\n{\n  \"data\": {\n    \"type\": \"Company\",\n    \"name\": \"Acme Corporation\"\n  }\n}\n```\n\n#### Update Contact\n\n```bash\nPATCH \u002Fclio\u002Fapi\u002Fv4\u002Fcontacts\u002F{id}\nContent-Type: application\u002Fjson\n\n{\n  \"data\": {\n    \"first_name\": \"Jane\"\n  }\n}\n```\n\n#### Delete Contact\n\n```bash\nDELETE \u002Fclio\u002Fapi\u002Fv4\u002Fcontacts\u002F{id}\n```\n\n### Activities\n\n#### List Activities\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Factivities?fields=id,type,date,quantity,matter{id,description}\n```\n\n#### Get Activity\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Factivities\u002F{id}?fields=id,type,date,quantity,note\n```\n\n#### Create Activity\n\n```bash\nPOST \u002Fclio\u002Fapi\u002Fv4\u002Factivities\nContent-Type: application\u002Fjson\n\n{\n  \"data\": {\n    \"type\": \"TimeEntry\",\n    \"date\": \"2026-02-11\",\n    \"quantity\": 3600,\n    \"matter\": {\"id\": 12345},\n    \"note\": \"Legal research\"\n  }\n}\n```\n\n#### Update Activity\n\n```bash\nPATCH \u002Fclio\u002Fapi\u002Fv4\u002Factivities\u002F{id}\nContent-Type: application\u002Fjson\n\n{\n  \"data\": {\n    \"note\": \"Updated note\"\n  }\n}\n```\n\n#### Delete Activity\n\n```bash\nDELETE \u002Fclio\u002Fapi\u002Fv4\u002Factivities\u002F{id}\n```\n\n### Tasks\n\n#### List Tasks\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Ftasks?fields=id,name,status,due_at,priority,matter{id,description}\n```\n\n#### Get Task\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Ftasks\u002F{id}?fields=id,name,description,status,due_at,priority\n```\n\n#### Create Task\n\nRequires `assignee` with both `id` and `type` (\"User\" or \"Contact\"):\n\n```bash\nPOST \u002Fclio\u002Fapi\u002Fv4\u002Ftasks\nContent-Type: application\u002Fjson\n\n{\n  \"data\": {\n    \"name\": \"Review contract\",\n    \"due_at\": \"2026-02-15T17:00:00Z\",\n    \"priority\": \"Normal\",\n    \"assignee\": {\"id\": 12345, \"type\": \"User\"},\n    \"matter\": {\"id\": 67890}\n  }\n}\n```\n\n#### Update Task\n\n```bash\nPATCH \u002Fclio\u002Fapi\u002Fv4\u002Ftasks\u002F{id}\nContent-Type: application\u002Fjson\n\n{\n  \"data\": {\n    \"status\": \"complete\"\n  }\n}\n```\n\n#### Delete Task\n\n```bash\nDELETE \u002Fclio\u002Fapi\u002Fv4\u002Ftasks\u002F{id}\n```\n\n### Calendar Entries\n\n#### List Calendar Entries\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fcalendar_entries?fields=id,summary,start_at,end_at,matter{id,description}\n```\n\n#### Get Calendar Entry\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fcalendar_entries\u002F{id}?fields=id,summary,description,start_at,end_at,location\n```\n\n#### Create Calendar Entry\n\nRequires `calendar_owner` with `id` and `type`:\n\n```bash\nPOST \u002Fclio\u002Fapi\u002Fv4\u002Fcalendar_entries\nContent-Type: application\u002Fjson\n\n{\n  \"data\": {\n    \"summary\": \"Client Meeting\",\n    \"start_at\": \"2026-02-15T10:00:00Z\",\n    \"end_at\": \"2026-02-15T11:00:00Z\",\n    \"calendar_owner\": {\"id\": 12345, \"type\": \"User\"}\n  }\n}\n```\n\n**Note:** Associating a matter with a calendar entry during creation may return a 404 error. To link a matter, update the calendar entry after creation using PATCH.\n\n#### Update Calendar Entry\n\n```bash\nPATCH \u002Fclio\u002Fapi\u002Fv4\u002Fcalendar_entries\u002F{id}\nContent-Type: application\u002Fjson\n\n{\n  \"data\": {\n    \"summary\": \"Updated Meeting Title\"\n  }\n}\n```\n\n#### Delete Calendar Entry\n\n```bash\nDELETE \u002Fclio\u002Fapi\u002Fv4\u002Fcalendar_entries\u002F{id}\n```\n\n### Documents\n\n#### List Documents\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fdocuments?fields=id,name,content_type,size,matter{id,description}\n```\n\n#### Get Document\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fdocuments\u002F{id}?fields=id,name,content_type,size,created_at\n```\n\n#### Download Document\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fdocuments\u002F{id}\u002Fdownload\n```\n\n### Users\n\n#### Get Current User\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fusers\u002Fwho_am_i?fields=id,name,email,enabled\n```\n\n#### List Users\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fusers?fields=id,name,email,enabled,rate\n```\n\n### Bills\n\n#### List Bills\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fbills?fields=id,number,issued_at,due_at,total,balance,state\n```\n\n#### Get Bill\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fbills\u002F{id}?fields=id,number,issued_at,due_at,total,balance,state\n```\n\n## Pagination\n\nClio uses cursor-based pagination. Response includes pagination metadata:\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fmatters?fields=id,description&limit=50\n```\n\nResponse includes pagination info in the `meta` object:\n\n```json\n{\n  \"data\": [...],\n  \"meta\": {\n    \"paging\": {\n      \"next\": \"https:\u002F\u002Fapp.clio.com\u002Fapi\u002Fv4\u002Fmatters?page_token=xyz123\"\n    },\n    \"records\": 50\n  }\n}\n```\n\nUse the `page_token` parameter to fetch the next page:\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fmatters?fields=id,description&page_token=xyz123\n```\n\n## Code Examples\n\n### JavaScript\n\n```javascript\nconst response = await fetch(\n  'https:\u002F\u002Fgateway.maton.ai\u002Fclio\u002Fapi\u002Fv4\u002Fmatters?fields=id,display_number,description',\n  {\n    headers: {\n      'Authorization': `Bearer ${process.env.MATON_API_KEY}`\n    }\n  }\n);\nconst data = await response.json();\n```\n\n### Python\n\n```python\nimport os\nimport requests\n\nresponse = requests.get(\n    'https:\u002F\u002Fgateway.maton.ai\u002Fclio\u002Fapi\u002Fv4\u002Fmatters',\n    headers={'Authorization': f'Bearer {os.environ[\"MATON_API_KEY\"]}'},\n    params={'fields': 'id,display_number,description'}\n)\ndata = response.json()\n```\n\n## Notes\n\n- Field selection is important - default responses only include `id` and `etag`\n- Nested resources use curly bracket syntax: `matter{id,description}`\n- Only one level of nesting is supported\n- Contact types: `Person` or `Company`\n- Task assignees require both `id` and `type` (\"User\" or \"Contact\")\n- Calendar entries require `calendar_owner` with `id` and `type`; associating a matter during creation may fail - use PATCH to link matters after creation\n- Activity quantity is in seconds (3600 = 1 hour)\n- Contact records limited to 20 email addresses, phone numbers, and addresses each\n- Activities, Documents, and Bills endpoints require additional OAuth scopes beyond the basic integration\n- IMPORTANT: When using curl commands, use `curl -g` when URLs contain brackets to disable glob parsing\n- IMPORTANT: When piping curl output to `jq` or other commands, environment variables like `$MATON_API_KEY` may not expand correctly in some shell environments\n\n## Error Handling\n\n| Status | Meaning |\n|--------|---------|\n| 400 | Missing Clio connection or bad request |\n| 401 | Invalid or missing Maton API key |\n| 404 | Resource not found |\n| 429 | Rate limited (50 req\u002Fmin during peak hours) |\n| 4xx\u002F5xx | Passthrough error from Clio API |\n\n### Rate Limit Headers\n\nClio includes rate limit headers in responses:\n- `X-RateLimit-Limit` - Maximum requests in 60-second window\n- `X-RateLimit-Remaining` - Requests remaining in current window\n- `X-RateLimit-Reset` - Unix timestamp for window reset\n- `Retry-After` - Seconds to wait (when throttled)\n\n## Resources\n\n- [Clio API Documentation](https:\u002F\u002Fdocs.developers.clio.com\u002Fapi-reference\u002F)\n- [Clio Fields Guide](https:\u002F\u002Fdocs.developers.clio.com\u002Fapi-docs\u002Fclio-manage\u002Ffields\u002F)\n- [Clio Rate Limits](https:\u002F\u002Fdocs.developers.clio.com\u002Fapi-docs\u002Fclio-manage\u002Frate-limits\u002F)\n- [Clio Permissions](https:\u002F\u002Fdocs.developers.clio.com\u002Fapi-docs\u002Fpermissions\u002F)\n- [Maton Community](https:\u002F\u002Fdiscord.com\u002Finvite\u002FdBfFAcefs2)\n- [Maton Support](mailto:support@maton.ai)\n","# Clio\n\nAccess the Clio Manage API with managed OAuth authentication. Manage matters, contacts, activities, tasks, documents, calendar entries, time entries, and billing for legal practice management.\n\n## Quick Start\n\n```bash\n# List matters\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https:\u002F\u002Fgateway.maton.ai\u002Fclio\u002Fapi\u002Fv4\u002Fmatters?fields=id,display_number,description,status')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n## Base URL\n\n```\nhttps:\u002F\u002Fgateway.maton.ai\u002Fclio\u002F{native-api-path}\n```\n\nReplace `{native-api-path}` with the actual Clio API endpoint path. The gateway proxies requests to `app.clio.com` and automatically injects your OAuth token.\n\n## Authentication\n\nAll requests require the Maton API key in the Authorization header:\n\n```\nAuthorization: Bearer $MATON_API_KEY\n```\n\n**Environment Variable:** Set your API key as `MATON_API_KEY`:\n\n```bash\nexport MATON_API_KEY=\"YOUR_API_KEY\"\n```\n\n### Getting Your API Key\n\n1. Sign in or create an account at [maton.ai](https:\u002F\u002Fmaton.ai)\n2. Go to [maton.ai\u002Fsettings](https:\u002F\u002Fmaton.ai\u002Fsettings)\n3. Copy your API key\n\n## Connection Management\n\nManage your Clio OAuth connections at `https:\u002F\u002Fctrl.maton.ai`.\n\n### List Connections\n\n```bash\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https:\u002F\u002Fctrl.maton.ai\u002Fconnections?app=clio&status=ACTIVE')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n### Create Connection\n\n```bash\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\ndata = json.dumps({'app': 'clio'}).encode()\nreq = urllib.request.Request('https:\u002F\u002Fctrl.maton.ai\u002Fconnections', data=data, method='POST')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Content-Type', 'application\u002Fjson')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n### Get Connection\n\n```bash\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https:\u002F\u002Fctrl.maton.ai\u002Fconnections\u002F{connection_id}')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n**Response:**\n```json\n{\n  \"connection\": {\n    \"connection_id\": \"21fd90f9-5935-43cd-b6c8-bde9d915ca80\",\n    \"status\": \"ACTIVE\",\n    \"creation_time\": \"2025-12-08T07:20:53.488460Z\",\n    \"last_updated_time\": \"2026-01-31T20:03:32.593153Z\",\n    \"url\": \"https:\u002F\u002Fconnect.maton.ai\u002F?session_token=...\",\n    \"app\": \"clio\",\n    \"metadata\": {}\n  }\n}\n```\n\nOpen the returned `url` in a browser to complete OAuth authorization.\n\n### Delete Connection\n\n```bash\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https:\u002F\u002Fctrl.maton.ai\u002Fconnections\u002F{connection_id}', method='DELETE')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n### Specifying Connection\n\nIf you have multiple Clio connections, specify which one to use with the `Maton-Connection` header:\n\n```bash\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https:\u002F\u002Fgateway.maton.ai\u002Fclio\u002Fapi\u002Fv4\u002Fmatters')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Maton-Connection', '21fd90f9-5935-43cd-b6c8-bde9d915ca80')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\nIf omitted, the gateway uses the default (oldest) active connection.\n\n## API Reference\n\n### Field Selection\n\nBy default, Clio returns minimal fields (`id`, `etag`). Use the `fields` parameter to request specific fields:\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fmatters?fields=id,display_number,description,status\n```\n\nFor nested resources, use curly bracket syntax:\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Factivities?fields=id,type,matter{id,description}\n```\n\n### Matters\n\n#### List Matters\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fmatters?fields=id,display_number,description,status,client_reference\n```\n\n#### Get Matter\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fmatters\u002F{id}?fields=id,display_number,description,status,open_date,close_date\n```\n\n#### Create Matter\n\n```bash\nPOST \u002Fclio\u002Fapi\u002Fv4\u002Fmatters\nContent-Type: application\u002Fjson\n\n{\n  \"data\": {\n    \"description\": \"New Legal Matter\",\n    \"status\": \"open\",\n    \"client\": {\"id\": 12345}\n  }\n}\n```\n\n#### Update Matter\n\n```bash\nPATCH \u002Fclio\u002Fapi\u002Fv4\u002Fmatters\u002F{id}\nContent-Type: application\u002Fjson\n\n{\n  \"data\": {\n    \"description\": \"Updated Matter Description\",\n    \"status\": \"closed\"\n  }\n}\n```\n\n#### Delete Matter\n\n```bash\nDELETE \u002Fclio\u002Fapi\u002Fv4\u002Fmatters\u002F{id}\n```\n\n### Contacts\n\n#### List Contacts\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fcontacts?fields=id,name,type,primary_email_address,primary_phone_number\n```\n\n#### Get Contact\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fcontacts\u002F{id}?fields=id,name,type,first_name,last_name,company\n```\n\n#### Create Contact (Person)\n\n```bash\nPOST \u002Fclio\u002Fapi\u002Fv4\u002Fcontacts\nContent-Type: application\u002Fjson\n\n{\n  \"data\": {\n    \"type\": \"Person\",\n    \"first_name\": \"John\",\n    \"last_name\": \"Doe\",\n    \"email_addresses\": [\n      {\"name\": \"Work\", \"address\": \"john@example.com\", \"default_email\": true}\n    ]\n  }\n}\n```\n\n#### Create Contact (Company)\n\n```bash\nPOST \u002Fclio\u002Fapi\u002Fv4\u002Fcontacts\nContent-Type: application\u002Fjson\n\n{\n  \"data\": {\n    \"type\": \"Company\",\n    \"name\": \"Acme Corporation\"\n  }\n}\n```\n\n#### Update Contact\n\n```bash\nPATCH \u002Fclio\u002Fapi\u002Fv4\u002Fcontacts\u002F{id}\nContent-Type: application\u002Fjson\n\n{\n  \"data\": {\n    \"first_name\": \"Jane\"\n  }\n}\n```\n\n#### Delete Contact\n\n```bash\nDELETE \u002Fclio\u002Fapi\u002Fv4\u002Fcontacts\u002F{id}\n```\n\n### Activities\n\n#### List Activities\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Factivities?fields=id,type,date,quantity,matter{id,description}\n```\n\n#### Get Activity\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Factivities\u002F{id}?fields=id,type,date,quantity,note\n```\n\n#### Create Activity\n\n```bash\nPOST \u002Fclio\u002Fapi\u002Fv4\u002Factivities\nContent-Type: application\u002Fjson\n\n{\n  \"data\": {\n    \"type\": \"TimeEntry\",\n    \"date\": \"2026-02-11\",\n    \"quantity\": 3600,\n    \"matter\": {\"id\": 12345},\n    \"note\": \"Legal research\"\n  }\n}\n```\n\n#### Update Activity\n\n```bash\nPATCH \u002Fclio\u002Fapi\u002Fv4\u002Factivities\u002F{id}\nContent-Type: application\u002Fjson\n\n{\n  \"data\": {\n    \"note\": \"Updated note\"\n  }\n}\n```\n\n#### Delete Activity\n\n```bash\nDELETE \u002Fclio\u002Fapi\u002Fv4\u002Factivities\u002F{id}\n```\n\n### Tasks\n\n#### List Tasks\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Ftasks?fields=id,name,status,due_at,priority,matter{id,description}\n```\n\n#### Get Task\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Ftasks\u002F{id}?fields=id,name,description,status,due_at,priority\n```\n\n#### Create Task\n\nRequires `assignee` with both `id` and `type` (\"User\" or \"Contact\"):\n\n```bash\nPOST \u002Fclio\u002Fapi\u002Fv4\u002Ftasks\nContent-Type: application\u002Fjson\n\n{\n  \"data\": {\n    \"name\": \"Review contract\",\n    \"due_at\": \"2026-02-15T17:00:00Z\",\n    \"priority\": \"Normal\",\n    \"assignee\": {\"id\": 12345, \"type\": \"User\"},\n    \"matter\": {\"id\": 67890}\n  }\n}\n```\n\n#### Update Task\n\n```bash\nPATCH \u002Fclio\u002Fapi\u002Fv4\u002Ftasks\u002F{id}\nContent-Type: application\u002Fjson\n\n{\n  \"data\": {\n    \"status\": \"complete\"\n  }\n}\n```\n\n#### Delete Task\n\n```bash\nDELETE \u002Fclio\u002Fapi\u002Fv4\u002Ftasks\u002F{id}\n```\n\n### Calendar Entries\n\n#### List Calendar Entries\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fcalendar_entries?fields=id,summary,start_at,end_at,matter{id,description}\n```\n\n#### Get Calendar Entry\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fcalendar_entries\u002F{id}?fields=id,summary,description,start_at,end_at,location\n```\n\n#### Create Calendar Entry\n\nRequires `calendar_owner` with `id` and `type`:\n\n```bash\nPOST \u002Fclio\u002Fapi\u002Fv4\u002Fcalendar_entries\nContent-Type: application\u002Fjson\n\n{\n  \"data\": {\n    \"summary\": \"Client Meeting\",\n    \"start_at\": \"2026-02-15T10:00:00Z\",\n    \"end_at\": \"2026-02-15T11:00:00Z\",\n    \"calendar_owner\": {\"id\": 12345, \"type\": \"User\"}\n  }\n}\n```\n\n**Note:** Associating a matter with a calendar entry during creation may return a 404 error. To link a matter, update the calendar entry after creation using PATCH.\n\n#### Update Calendar Entry\n\n```bash\nPATCH \u002Fclio\u002Fapi\u002Fv4\u002Fcalendar_entries\u002F{id}\nContent-Type: application\u002Fjson\n\n{\n  \"data\": {\n    \"summary\": \"Updated Meeting Title\"\n  }\n}\n```\n\n#### Delete Calendar Entry\n\n```bash\nDELETE \u002Fclio\u002Fapi\u002Fv4\u002Fcalendar_entries\u002F{id}\n```\n\n### Documents\n\n#### List Documents\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fdocuments?fields=id,name,content_type,size,matter{id,description}\n```\n\n#### Get Document\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fdocuments\u002F{id}?fields=id,name,content_type,size,created_at\n```\n\n#### Download Document\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fdocuments\u002F{id}\u002Fdownload\n```\n\n### Users\n\n#### Get Current User\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fusers\u002Fwho_am_i?fields=id,name,email,enabled\n```\n\n#### List Users\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fusers?fields=id,name,email,enabled,rate\n```\n\n### Bills\n\n#### List Bills\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fbills?fields=id,number,issued_at,due_at,total,balance,state\n```\n\n#### Get Bill\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fbills\u002F{id}?fields=id,number,issued_at,due_at,total,balance,state\n```\n\n## Pagination\n\nClio uses cursor-based pagination. Response includes pagination metadata:\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fmatters?fields=id,description&limit=50\n```\n\nResponse includes pagination info in the `meta` object:\n\n```json\n{\n  \"data\": [...],\n  \"meta\": {\n    \"paging\": {\n      \"next\": \"https:\u002F\u002Fapp.clio.com\u002Fapi\u002Fv4\u002Fmatters?page_token=xyz123\"\n    },\n    \"records\": 50\n  }\n}\n```\n\nUse the `page_token` parameter to fetch the next page:\n\n```bash\nGET \u002Fclio\u002Fapi\u002Fv4\u002Fmatters?fields=id,description&page_token=xyz123\n```\n\n## Code Examples\n\n### JavaScript\n\n```javascript\nconst response = await fetch(\n  'https:\u002F\u002Fgateway.maton.ai\u002Fclio\u002Fapi\u002Fv4\u002Fmatters?fields=id,display_number,description',\n  {\n    headers: {\n      'Authorization': `Bearer ${process.env.MATON_API_KEY}`\n    }\n  }\n);\nconst data = await response.json();\n```\n\n### Python\n\n```python\nimport os\nimport requests\n\nresponse = requests.get(\n    'https:\u002F\u002Fgateway.maton.ai\u002Fclio\u002Fapi\u002Fv4\u002Fmatters',\n    headers={'Authorization': f'Bearer {os.environ[\"MATON_API_KEY\"]}'},\n    params={'fields': 'id,display_number,description'}\n)\ndata = response.json()\n```\n\n## Notes\n\n- Field selection is important - default responses only include `id` and `etag`\n- Nested resources use curly bracket syntax: `matter{id,description}`\n- Only one level of nesting is supported\n- Contact types: `Person` or `Company`\n- Task assignees require both `id` and `type` (\"User\" or \"Contact\")\n- Calendar entries require `calendar_owner` with `id` and `type`; associating a matter during creation may fail - use PATCH to link matters after creation\n- Activity quantity is in seconds (3600 = 1 hour)\n- Contact records limited to 20 email addresses, phone numbers, and addresses each\n- Activities, Documents, and Bills endpoints require additional OAuth scopes beyond the basic integration\n- IMPORTANT: When using curl commands, use `curl -g` when URLs contain brackets to disable glob parsing\n- IMPORTANT: When piping curl output to `jq` or other commands, environment variables like `$MATON_API_KEY` may not expand correctly in some shell environments\n\n## Error Handling\n\n| Status | Meaning |\n|--------|---------|\n| 400 | Missing Clio connection or bad request |\n| 401 | Invalid or missing Maton API key |\n| 404 | Resource not found |\n| 429 | Rate limited (50 req\u002Fmin during peak hours) |\n| 4xx\u002F5xx | Passthrough error from Clio API |\n\n### Rate Limit Headers\n\nClio includes rate limit headers in responses:\n- `X-RateLimit-Limit` - Maximum requests in 60-second window\n- `X-RateLimit-Remaining` - Requests remaining in current window\n- `X-RateLimit-Reset` - Unix timestamp for window reset\n- `Retry-After` - Seconds to wait (when throttled)\n\n## Resources\n\n- [Clio API Documentation](https:\u002F\u002Fdocs.developers.clio.com\u002Fapi-reference\u002F)\n- [Clio Fields Guide](https:\u002F\u002Fdocs.developers.clio.com\u002Fapi-docs\u002Fclio-manage\u002Ffields\u002F)\n- [Clio Rate Limits](https:\u002F\u002Fdocs.developers.clio.com\u002Fapi-docs\u002Fclio-manage\u002Frate-limits\u002F)\n- [Clio Permissions](https:\u002F\u002Fdocs.developers.clio.com\u002Fapi-docs\u002Fpermissions\u002F)\n- [Maton Community](https:\u002F\u002Fdiscord.com\u002Finvite\u002FdBfFAcefs2)\n- [Maton Support](mailto:support@maton.ai)\n",{"name":5,"metadata":24,"description":33},{"author":25,"version":26,"clawdbot":27},"maton","1.0",{"emoji":28,"homepage":29,"requires":30},"🧠","https:\u002F\u002Fmaton.ai",{"env":31},[32],"MATON_API_KEY","Clio API integration with managed OAuth. Legal practice management including matters, contacts, activities, tasks, documents, calendar entries, time entries, and billing.\nUse this skill when users want to manage legal practice data in Clio Manage.\nFor other third party apps, use the api-gateway skill (https:\u002F\u002Fclawhub.ai\u002Fbyungkyu\u002Fapi-gateway).\nRequires network access and valid Maton API key.\n","main","54afe4b75ed2eb8f0feabb2f5b57dfa4bcbb3c44",".agents\u002Fskills\u002Fclio","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal","https:\u002F\u002Fgithub.com\u002Fmeghal86","2026-05-17 14:11:28",{"source":8,"skillName":5,"commands":41,"prompt":51,"zipAvailable":52},[42,45,48],{"tool":43,"command":44},"npx","npx skills add meghal86\u002Fstacksignal --skill clio",{"tool":46,"command":47},"bunx","bunx skills add meghal86\u002Fstacksignal --skill clio",{"tool":49,"command":50},"pnpm","pnpm dlx skills add meghal86\u002Fstacksignal --skill clio","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fclio\u002FSKILL.md",true,[54,60],{"path":55,"resourceType":56,"resourceTypeDesc":57,"sizeBytes":58,"sourceHtmlUrl":59},"_meta.json","REFERENCE","参考文档",262,"https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fclio\u002F_meta.json",{"path":61,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":64,"sourceHtmlUrl":15},"LICENSE.txt","LICENSE","许可证",1072,[66,75,83,91,99,106],{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":70,"sourceHtmlUrl":71,"categories":72,"keywords":73,"publishedAt":74},"01M78XH0FRP65NYEDHF2BT7NB1","zvukogram","Text-to-Speech via Zvukogram API with SSML support. Use when you need to generate speech from text, create podcasts, voice notifications, or work with audio. Supports speed control, stress marks, English word transcription, and audio fragment merging.","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzvukogram\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzvukogram\u002FSKILL.md",[],[],"2026-11-15 14:19:17",{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":79,"sourceHtmlUrl":80,"categories":81,"keywords":82,"publishedAt":74},"01M78XEND5ASXYB6MN8AQQGJAF","zohomail","Zoho Mail API integration with managed OAuth. Send, receive, and manage emails, folders, and labels.\nUse this skill when users want to send emails, read messages, manage folders, or work with email labels in Zoho Mail.\nFor other third party apps, use the api-gateway skill (https:\u002F\u002Fclawhub.ai\u002Fbyungkyu\u002Fapi-gateway).\nRequires network access and valid Maton API key.","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzohomail\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzohomail\u002FSKILL.md",[],[],{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":87,"sourceHtmlUrl":88,"categories":89,"keywords":90,"publishedAt":74},"01M78XEBBV3C6DRZFAJXP6RDKS","zoho-recruit","Zoho Recruit API integration with managed OAuth. Manage candidates, job openings, interviews, and recruitment workflows.\nUse this skill when users want to read, create, update, or search recruitment data like candidates, job openings, interviews, and applications in Zoho Recruit.\nFor other third party apps, use the api-gateway skill (https:\u002F\u002Fclawhub.ai\u002Fbyungkyu\u002Fapi-gateway).\nRequires network access and valid Maton API key.","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzoho-recruit\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzoho-recruit\u002FSKILL.md",[],[],{"skillNo":92,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":95,"sourceHtmlUrl":96,"categories":97,"keywords":98,"publishedAt":74},"01M78XE5CQG75DZWYSKGXFR99T","zoho-people","Zoho People API integration with managed OAuth. Manage employees, departments, designations, attendance, and leave.\nUse this skill when users want to read, create, update, or query HR data like employees, departments, designations, and forms in Zoho People.\nFor other third party apps, use the api-gateway skill (https:\u002F\u002Fclawhub.ai\u002Fbyungkyu\u002Fapi-gateway).\nRequires network access and valid Maton API key.","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzoho-people\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzoho-people\u002FSKILL.md",[],[],{"skillNo":100,"name":101,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":102,"sourceHtmlUrl":103,"categories":104,"keywords":105,"publishedAt":74},"01M78XDZKMZAJYFJJFT7MR5ZN2","zoho-mail","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzoho-mail\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzoho-mail\u002FSKILL.md",[],[],{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":110,"sourceHtmlUrl":111,"categories":112,"keywords":113,"publishedAt":74},"01M78XDST8JK0WVDA1F3VPNWXD","zoho-inventory","Zoho Inventory API integration with managed OAuth. Manage items, sales orders, invoices, purchase orders, bills, contacts, and shipments.\nUse this skill when users want to read, create, update, or delete inventory items, sales orders, invoices, purchase orders, bills, or other inventory records in Zoho Inventory.\nFor other third party apps, use the api-gateway skill (https:\u002F\u002Fclawhub.ai\u002Fbyungkyu\u002Fapi-gateway).\nRequires network access and valid Maton API key.","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzoho-inventory\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzoho-inventory\u002FSKILL.md",[],[]]