# Podio Routing Reference

**App name:** `podio`
**Base URL proxied:** `api.podio.com`

## API Path Pattern

```
/podio/{resource}/{id}/
```

Note: Many Podio endpoints use trailing slashes.

## Common Endpoints

### Organizations

#### List Organizations
```bash
GET /podio/org/
```

#### Get Organization
```bash
GET /podio/org/{org_id}
```

### Spaces (Workspaces)

#### List Spaces in Organization
```bash
GET /podio/space/org/{org_id}/
```

#### Get Space
```bash
GET /podio/space/{space_id}
```

#### Create Space
```bash
POST /podio/org/{org_id}/space/
Content-Type: application/json

{
  "name": "New Workspace",
  "privacy": "closed"
}
```

### Applications

#### List Apps in Space
```bash
GET /podio/app/space/{space_id}/
```

#### Get App
```bash
GET /podio/app/{app_id}
```

### Items

#### Filter Items
```bash
POST /podio/item/app/{app_id}/filter/
Content-Type: application/json

{
  "limit": 30,
  "offset": 0,
  "sort_by": "created_on",
  "sort_desc": true,
  "filters": {
    "status": [1, 2]
  }
}
```

#### Get Item
```bash
GET /podio/item/{item_id}
```

#### Create Item
```bash
POST /podio/item/app/{app_id}/
Content-Type: application/json

{
  "fields": {
    "title": "New Item",
    "status": 1
  }
}
```

#### Update Item
```bash
PUT /podio/item/{item_id}
Content-Type: application/json

{
  "fields": {
    "title": "Updated Title"
  }
}
```

#### Delete Item
```bash
DELETE /podio/item/{item_id}
```

### Tasks

Tasks require at least one filter: org, space, app, responsible, reference, created_by, or completed_by.

#### List Tasks
```bash
GET /podio/task/?org={org_id}
GET /podio/task/?space={space_id}
GET /podio/task/?app={app_id}&completed=false
```

#### Get Task
```bash
GET /podio/task/{task_id}
```

#### Create Task
```bash
POST /podio/task/
Content-Type: application/json

{
  "text": "Task description",
  "due_date": "[REDACTED_PHONE]",
  "ref_type": "item",
  "ref_id": [REDACTED_PHONE]
}
```

#### Complete Task
```bash
POST /podio/task/{task_id}/complete
```

#### Delete Task
```bash
DELETE /podio/task/{task_id}
```

### Comments

#### Get Comments on Object
```bash
GET /podio/comment/{type}/{id}/
```

Where `{type}` is: item, task, status, etc.

#### Add Comment
```bash
POST /podio/comment/{type}/{id}
Content-Type: application/json

{
  "value": "Comment text"
}
```

### User

#### Get User Status
```bash
GET /podio/user/status
```

## Pagination

Podio uses offset-based pagination:

```json
{
  "limit": 30,
  "offset": 0
}
```

Response includes counts:
```json
{
  "total": 150,
  "filtered": 45,
  "items": [...]
}
```

## Notes

- Organization, space, app, and item IDs are integers
- Many endpoints use trailing slashes (e.g., `/org/`, `/filter/`)
- Category/status fields use option IDs (integers), not text values
- Field values can be specified by field_id or external_id
- Deleting an item cascades to associated tasks
- Tasks require at least one filter parameter
- Use `silent=true` to suppress notifications
- Use `hook=false` to skip webhook triggers

## Resources

- [Podio API Documentation](https://developers.podio.com/doc)
- [Items API](https://developers.podio.com/doc/items)
- [Tasks API](https://developers.podio.com/doc/tasks)
- [Applications API](https://developers.podio.com/doc/applications)
- [Spaces API](https://developers.podio.com/doc/spaces)