# Get project epics Endpoint: GET /projects/{id}/epics Version: v1 Security: http ## Path parameters: - `id` (string, required) ## Query parameters: - `findBy` (string) The field to search by Enum: "id", "external_id", "shortcode" - `page[size]` (integer) The number of results that will be returned per page. - `page[cursor]` (string) The cursor to start the pagination from. - `filter` (string) Allowed filter fields (with allowed operators): | Field | Type | Operators | |------|------|-----------| | title | string | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull | | po_number | string | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull | | created_at | datetime | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull | | tasks | Relation - uri (string) - title (string) - status (enum) | any, none, count, all | Filtering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL. You can check the full syntax at Docs Filtering section. Special values: - me.id — current authenticated user id (usable on fields of type id). Example: id eq me.id - now — current date-time. Example: dueOn lt now - sow/eow — start/end of week. Examples: dueOn gt sow, dueOn lt eow - som/eom — start/end of month. Examples: dueOn gt som, dueOn lt eom - today — special date for today; with eq it expands to the whole day range. Example: dueOn eq today - today±Nd — relative day offset. Examples: today-30d, today+5d. Example: "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")" - `computed_fields[alias]` (string) Dynamic computed relation fields (computed_fields[alias]) Declare ad-hoc aggregates per request using: computed_fields[] = relation.aggregate(args) Syntax: - Count: relation.count() or relation.count() - Sum/Avg/Min/Max: relation.sum() or relation.sum(, ) Where is written using the same Filter DSL and is validated against the relation's allowed fields. Use the prefix computed_fields. when referencing these aliases in filter or sort, e.g., filter=computed_fields.tasks_done gte 1 or sort=-computed_fields.tasks_done. Bare aliases are accepted for backward compatibility but deprecated. Allowed relations for computed_fields (deny-all by default): - tasks: aggregates: count, sum, avg, min, max; columns: effort_sum; coalesce default: 0 Example: ?computed_fields[tasks_done]=tasks.count(status%20eq%20%22Completed%22)&filter=computed_fields.tasks_done%20gt%200 Example: "computed_fields[tasks_done]=tasks.count(status%20eq%20%22Completed%22)" - `sort` (string) Available sorts are title, po_number, created_at, computed_fields..You can sort by multiple options by separating them with a comma. To sort in descending order, use - sign in front of the sort, for example: -title. Example: "sort=-created_at,title" ## Response 200 fields (application/json): - `data` (array, required) The list of items - `data.id` (string, required) - `data.title` (string, required) - `data.po_number` (string,null, required) - `data.computed_fields` (object) - `links` (array, required) - `meta` (object, required) - `meta.path` (string,null, required) Base path for paginator generated URLs. - `meta.per_page` (integer, required) Number of items shown per page. - `meta.next_cursor` (string,null, required) - `meta.next_cursor_url` (string,null, required) - `meta.prev_cursor` (string,null, required) - `meta.prev_cursor_url` (string,null, required) ## Response 401 fields (application/json): - `message` (string, required) Error overview. ## Response 404 fields (application/json): - `message` (string, required) Error overview. ## Response 422 fields (application/json): - `message` (string, required) Errors overview. - `errors` (object, required) A detailed description of each field that failed validation.