provider Projects GET
/workspaces/{workspace_gid}/projects/search @utdk/asana
/workspaces/{workspace_gid}/projects/search Search projects in a workspace
<b>Required scope: </b><code>projects:read</code>
To mirror the functionality of the Asana web app's advanced search feature, the Asana API has a project search endpoint that allows you to build complex filters to find and retrieve the exact data you need.
#### Premium access
Like the Asana web product's advance search feature, this search endpoint will only be available to premium Asana users. A user is premium if any of the following is true:
- The workspace in which the search is being performed is a premium workspace
- The user is a member of a premium team inside the workspace
Even if a user is only a member of a premium team inside a non-premium workspace, search will allow them to find data anywhere in the workspace, not just inside the premium team. Making a search request using credentials of a non-premium user will result in a `402 Payment Required` error.
#### Pagination
Search results are not stable; repeating the same query multiple times may return the data in a different order, even if the data do not change. Because of this, the traditional [pagination](/docs/pagination) available elsewhere in the Asana API is not available here. However, you can paginate manually by sorting the search results by their creation time and then modifying each subsequent query to exclude data you have already seen. Page sizes are limited to a maximum of 100 items, and can be specified by the `limit` query parameter.
#### Eventual consistency
Changes in Asana (regardless of whether they’re made though the web product or the API) are forwarded to our search infrastructure to be indexed. This process can take between 10 and 60 seconds to complete under normal operation, and longer during some production incidents. Making a change to a project that would alter its presence in a particular search query will not be reflected immediately. This is also true of the advanced search feature in the web product.
Because of this delay, the search endpoint is not suited for use cases that require immediate consistency after writes. If you need read-your-write behavior or strongly consistent results, we recommend using [Get multiple projects](/reference/getprojects) instead.
#### Rate limits
You may receive a `429 Too Many Requests` response if you hit any of our [rate limits](/docs/rate-limits).
#### Custom field parameters
| Parameter name | Custom field type | Accepted type |
|---|---|---|
| custom_fields.{gid}.is_set | All | Boolean |
| custom_fields.{gid}.value | Text | String |
| custom_fields.{gid}.value | Number | Number |
| custom_fields.{gid}.value | Enum | Enum option ID |
| custom_fields.{gid}.starts_with | Text only | String |
| custom_fields.{gid}.ends_with | Text only | String |
| custom_fields.{gid}.contains | Text only | String |
| custom_fields.{gid}.less_than | Number only | Number |
| custom_fields.{gid}.greater_than | Number only | Number |
For example, if the gid of the custom field is 12345, the query parameter to find projects where it is set would be `custom_fields.12345.is_set=true`. To match an exact value for an enum custom field, use the gid of the desired enum option and not the name of the enum option: `custom_fields.12345.value=67890`.
**Not Supported**: searching for multiple exact matches of a custom field, searching for multi-enum custom field
- workspace_gid path required
- Globally unique identifier for the workspace or organization.
- string
- opt_pretty query
- Provides “pretty” output. Provides the response in a “pretty” format. In the case of JSON this means doing proper line breaking and indentation to make it readable. This will take extra time and increase the response size so it is advisable only to use this during debugging.
- boolean
- text query
- Performs full-text search on the project name.
- string
- sort_by query
- One of `due_date`, `created_at`, `completed_at`, or `modified_at`, defaults to `modified_at`.
- enum: due_date, created_at, completed_at, modified_at
- sort_ascending query
- Default `false`.
- boolean
- completed query
- Filter on project completion status.
- boolean
- teams.any query
- Comma-separated list of team IDs.
- string
- owner.any query
- Comma-separated list of user identifiers to filter on as project owners. This can either be the string "me", an email, or the gid of a user.
- string
- members.any query
- Comma-separated list of user identifiers to filter on as members. This can either be the string "me", an email, or the gid of a user.
- string
- members.not query
- Comma-separated list of user identifiers to exclude as members. This can either be the string "me", an email, or the gid of a user.
- string
- portfolios.any query
- Comma-separated list of portfolio IDs to filter on.
- string
- completed_on query
- ISO 8601 date string or `null`.
- string
- completed_on.before query
- ISO 8601 date string.
- string
- completed_on.after query
- ISO 8601 date string.
- string
- completed_at.before query
- ISO 8601 datetime string.
- string
- completed_at.after query
- ISO 8601 datetime string.
- string
- created_on query
- ISO 8601 date string or `null`.
- string
- created_on.before query
- ISO 8601 date string.
- string
- created_on.after query
- ISO 8601 date string.
- string
- created_at.before query
- ISO 8601 datetime string.
- string
- created_at.after query
- ISO 8601 datetime string.
- string
- due_on query
- ISO 8601 date string or `null`.
- string
- due_on.before query
- ISO 8601 date string.
- string
- due_on.after query
- ISO 8601 date string.
- string
- due_at.before query
- ISO 8601 datetime string.
- string
- due_at.after query
- ISO 8601 datetime string.
- string
- start_on query
- ISO 8601 date string or `null`.
- string
- start_on.before query
- ISO 8601 date string.
- string
- start_on.after query
- ISO 8601 date string.
- string
- opt_fields query
- This endpoint returns a resource which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.
- array
Try it
Authentication
Configure credentials for Asana
Gateway
The gateway proxies requests and injects credentials server-side. Configure credentials above, then enter your gateway URL.
Saved automatically to browser storage.
Code snippet
Updates live as you fill in the form above.
TypeScript
import asana from '@utdk/asana';
await asana.searchprojectsforworkspace({
"sort_by": "modified_at",
"sort_ascending": false
})