---
title: "Read one entity set"
method: GET
path: "/odata/{entitySet}"
tags: ["odata"]
---

# Read one entity set

`GET /odata/{entitySet}`

## Request

- Base URL: `https://api.onplana.com/api`
- URL: `https://api.onplana.com/api/odata/{entitySet}`
- Auth: one of:
  - API key in header `Authorization`
  - HTTP bearer

Returns rows of the named set in an OData v4 JSON envelope. Server-paged: `$top` defaults to 500 and is capped at 1000; a full page carries `@odata.nextLink`, follow it until a short page. `$filter` supports one `<Property> eq '<value>'` clause on the set's key-like columns (ProjectId, TaskId, ResourceId, ...); `$expand`, `$apply` and `$search` are refused with a 400 rather than silently ignored. Visibility is the project list's: a token sees the projects its owner can see, TimesheetLines are the owner's own unless they can view all projects, and a project-scoped token sees only its projects.

## Path parameters

- `entitySet` 'Projects' | 'Tasks' | 'Assignments' | 'Resources' | 'TimesheetLines' | 'CustomFieldValues' | 'TaskBaselines', required

## Query parameters

- `$top` integer
- `$skip` integer
- `$count` boolean
- `$filter` string

## Response `200`

`{ "@odata.context", "@odata.count"?, "value": [...], "@odata.nextLink"? }`

## Other responses

- `400`: Unsupported query option or malformed filter, as an OData error `{ error: { code, message } }`.
- `404`: Unknown entity set.

---

[API](https://skmtc.dev/onplana/apis/onplana-api.md) · [All operations](https://skmtc.dev/onplana/apis/onplana-api/llms.txt) · [OpenAPI document](https://skmtc.dev/onplana/apis/onplana-api/revisions/c3d6c89e9dc8?raw)
