# Clio Routing Reference **App name:** `clio` **Base URL proxied:** `app.clio.com` ## API Path Pattern ``` /clio/api/v4/{resource} ``` ## Field Selection By default, Clio returns minimal fields (`id`, `etag`). Always specify fields: ```bash GET /clio/api/v4/matters?fields=id,display_number,description,status ``` Nested resources use curly bracket syntax: ```bash GET /clio/api/v4/activities?fields=id,type,matter{id,description} ``` ## Common Endpoints ### Matters #### List Matters ```bash GET /clio/api/v4/matters?fields=id,display_number,description,status ``` #### Get Matter ```bash GET /clio/api/v4/matters/{id}?fields=id,display_number,description,status,open_date ``` #### Create Matter ```bash POST /clio/api/v4/matters Content-Type: application/json { "data": { "description": "New Legal Matter", "status": "open", "client": {"id": 12345} } } ``` #### Update Matter ```bash PATCH /clio/api/v4/matters/{id} Content-Type: application/json { "data": { "description": "Updated Description" } } ``` #### Delete Matter ```bash DELETE /clio/api/v4/matters/{id} ``` ### Contacts #### List Contacts ```bash GET /clio/api/v4/contacts?fields=id,name,type,primary_email_address ``` #### Get Contact ```bash GET /clio/api/v4/contacts/{id}?fields=id,name,type,first_name,last_name ``` #### Create Contact (Person) ```bash POST /clio/api/v4/contacts Content-Type: application/json { "data": { "type": "Person", "first_name": "John", "last_name": "Doe" } } ``` #### Create Contact (Company) ```bash POST /clio/api/v4/contacts Content-Type: application/json { "data": { "type": "Company", "name": "Acme Corporation" } } ``` #### Update Contact ```bash PATCH /clio/api/v4/contacts/{id} Content-Type: application/json { "data": { "first_name": "Jane" } } ``` #### Delete Contact ```bash DELETE /clio/api/v4/contacts/{id} ``` ### Activities #### List Activities ```bash GET /clio/api/v4/activities?fields=id,type,date,quantity,matter{id,description} ``` #### Get Activity ```bash GET /clio/api/v4/activities/{id}?fields=id,type,date,quantity,note ``` #### Create Activity ```bash POST /clio/api/v4/activities Content-Type: application/json { "data": { "type": "TimeEntry", "date": "2026-02-11", "quantity": 3600, "matter": {"id": 12345} } } ``` #### Update Activity ```bash PATCH /clio/api/v4/activities/{id} Content-Type: application/json { "data": { "note": "Updated note" } } ``` #### Delete Activity ```bash DELETE /clio/api/v4/activities/{id} ``` ### Tasks #### List Tasks ```bash GET /clio/api/v4/tasks?fields=id,name,status,due_at,priority ``` #### Get Task ```bash GET /clio/api/v4/tasks/{id}?fields=id,name,description,status,due_at ``` #### Create Task Requires `assignee` with `id` and `type`: ```bash POST /clio/api/v4/tasks Content-Type: application/json { "data": { "name": "Review contract", "due_at": "2026-02-15T17:00:00Z", "priority": "Normal", "assignee": {"id": 12345, "type": "User"}, "matter": {"id": 67890} } } ``` #### Update Task ```bash PATCH /clio/api/v4/tasks/{id} Content-Type: application/json { "data": { "status": "complete" } } ``` #### Delete Task ```bash DELETE /clio/api/v4/tasks/{id} ``` ### Calendar Entries #### List Calendar Entries ```bash GET /clio/api/v4/calendar_entries?fields=id,summary,start_at,end_at ``` #### Get Calendar Entry ```bash GET /clio/api/v4/calendar_entries/{id}?fields=id,summary,description,start_at,end_at ``` #### Create Calendar Entry Requires `calendar_owner` with `id` and `type`: ```bash POST /clio/api/v4/calendar_entries Content-Type: application/json { "data": { "summary": "Client Meeting", "start_at": "2026-02-15T10:00:00Z", "end_at": "2026-02-15T11:00:00Z", "calendar_owner": {"id": 12345, "type": "User"} } } ``` **Note:** Associating a matter during creation may return 404. Use PATCH to link matters after creation. #### Update Calendar Entry ```bash PATCH /clio/api/v4/calendar_entries/{id} Content-Type: application/json { "data": { "summary": "Updated Meeting" } } ``` #### Delete Calendar Entry ```bash DELETE /clio/api/v4/calendar_entries/{id} ``` ### Documents #### List Documents ```bash GET /clio/api/v4/documents?fields=id,name,content_type,size ``` #### Get Document ```bash GET /clio/api/v4/documents/{id}?fields=id,name,content_type,size,created_at ``` #### Download Document ```bash GET /clio/api/v4/documents/{id}/download ``` ### Users #### Get Current User ```bash GET /clio/api/v4/users/who_am_i?fields=id,name,email,enabled ``` #### List Users ```bash GET /clio/api/v4/users?fields=id,name,email,enabled ``` ### Bills #### List Bills ```bash GET /clio/api/v4/bills?fields=id,number,issued_at,due_at,total,balance,state ``` #### Get Bill ```bash GET /clio/api/v4/bills/{id}?fields=id,number,total,balance,state ``` ## Pagination Clio uses cursor-based pagination: ```bash GET /clio/api/v4/matters?fields=id,description&limit=50 ``` Response includes pagination in `meta`: ```json { "data": [...], "meta": { "paging": { "next": "https://app.clio.com/api/v4/matters?page_token=xyz123" } } } ``` Use `page_token` for next page: ```bash GET /clio/api/v4/matters?page_token=xyz123 ``` ## Notes - Always specify `fields` parameter - defaults are minimal (`id`, `etag` only) - Nested resources use curly brackets: `matter{id,description}` - Only one level of nesting supported - Contact types: `Person` or `Company` - Task assignees require both `id` and `type` ("User" or "Contact") - Calendar entries require `calendar_owner` with `id` and `type`; linking matters during creation may fail - use PATCH after creation - Activity quantity is in seconds (3600 = 1 hour) - Rate limit: 50 requests/minute during peak hours - Contact limits: max 20 emails, phones, and addresses each - Activities, Documents, and Bills endpoints require additional OAuth scopes ## Resources - [Clio API Documentation](https://docs.developers.clio.com/api-reference/) - [Clio Fields Guide](https://docs.developers.clio.com/api-docs/clio-manage/fields/) - [Clio Rate Limits](https://docs.developers.clio.com/api-docs/clio-manage/rate-limits/)