Quire API API Reference
Introduction
Welcome to the reference for the Quire REST API!
The Quire REST API provides a broad set of operations and resources that:
- Consistently do repetitive or tedious tasks.
- Chain a process together for your team’s process and workflow.
Want to share your thoughts on how Quire API works for you? Tell us how you feel about using our API and what we can do to make it better.
REST is a web-service protocol for rapid development by using HTTP and JSON technology.
API Changelog
You can find the Changelog of the API Reference in the Quire Community.
Authentication
For full setup instructions, see our Complete Setup Guide on the Quire blog.
OAuth v2.0
Quire uses OAuth v2.0 to authenticate your app and access the Quire REST API on a user’s behalf—without requiring the user’s password.
Authenticating via OAuth2 requires the following steps:
- Register Your Application on Quire
- Ask a Quire User to Grant Access to Your Application
- Retrieve an Access Token
- Make Authenticated Requests
Register Your Application on Quire
1. Give your app a cool name
Your app deserves a cool name that lives up to its broad range of great features.
All of the app users will see this name in public, so think carefully!
2. Choose the Quire Organization that your app belongs to
You can choose an organization in Quire that your app belongs to.
If one day you decide to leave the organization, you will lose the authority to manage the app.
3. Redirect URL
When users grant your app authorization request, users will be directed to the configured URL that you’ve set.
4. Choose permission scopes
You can set permission on what your app can do with Quire. There are several options for you to choose from.
Note: If none of the options is selected, the app can only read user’s data.
5. Development Client ID and Client Secret
The Client ID and Client secret will be automatically generated as you create an app.
The Client ID is a unique ID to identify your app.
You should keep your client secret safe, which means you should never share your client secret with anyone. If you choose to regenerate the client secret, the old one will immediately become invalid.
6. Update your App
If your app hasn't been published to Quire App Directory, it will remain as unpublished status. You can still use the configured shareable link in the Developer App Console Distribution to share the app with other users for testing or integration.
When you make changes to the app, you can use the shareable link to access the development copy as well. Working on your development copy will not affect your live App Directory app. When your updated app is ready to be published and replaced the old version on Quire App Directory, your published app will have a different Client ID to the unpublished one.
There are two sets of Client ID and Client Secret.
Development set- should be used during developing and testing internally of the app.Production set- should be used once your app is ready and published on Quire App Directory.
Fulfill Authorization Request
Ask a Quire User to Grant Access to Your Application
Once registering your application, you can ask your user to grant access to your application.
The authorization endpoint lets users grant your app access to the requested permissions.
The authorization endpoint should look like this:
https://quire.io/oauth?client_id=your-client-ID&redirect_uri=your-redirect-uri
After your user clicks Allow, the access will be granted, and he will be redirected to the URL you specified in the redirect_uri parameter with an authorization code provided as a query parameter called code.
After your app is granted, you can have an authorization code to exchange access token for access Quire API. The redirect_uri is optional. If not being specified, we will automatically use the one that is previously detected in the app. If specified, the redirect URL must start with the prefix of the one that was previously detected in the app.
| Parameter | Value |
|---|---|
| client_id | {your-client-ID} |
| redirect_uri | Optional. The redirect URL after granted. If specified, it must match the redirect URL specified in your app's config. Otherwise, the configured URL will be used. |
| state | Optional. A random string generated by your app to protect from XSRF. |
Retrieve Access Token
To retrieve the access token, you have to post a request to https://quire.io/oauth/token with the following data:
| Parameter | Value |
|---|---|
| grant_type | authorization_code |
| code | {your-authorization-code} |
| client_id | {your-client-ID} |
| client_secret | {your-client-secret} |
curl -X POST \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=authorization_code&code=Your_code_from_previous_step&client_id=Your_app_client_id&client_secret=Your_app_client_secret" \
https://quire.io/oauth/token
Then, the access token will be returned in the response's body.
{
"access_token":"ACCESS_TOKEN",
"token_type": "bearer",
"expires_in":2592000,
"refresh_token":"REFRESH_TOKEN"
}
The token should be kept carefully and permanently since you need it to access every Quire API.
PKCE Support
Quire supports PKCE (RFC 7636) for public clients such as single-page apps. To use it:
- Add
code_challengeandcode_challenge_method=S256to the authorization request. - Send
code_verifierinstead ofclient_secretwhen exchanging the authorization code for a token.
Note: Only
S256is supported. PKCE tokens do not include arefresh_token.
Use Access Token to Access Quire API
In each request, the access token must be put in the header. The header name is Authorization and the value is Bearer your_token.
After you exchange the access token, your app can make requests to Quire API on behalf of the authorized users.
curl -H 'Authorization: Bearer {access_token}' \
https://quire.io/api/user/id/me
{
"email": "[email protected]",
"website": "https://coolwebsites.com",
"id": "My_ID",
"description": "This is *cool*!",
"url": "https://quire.io/u/My_ID",
"nameText": "My Name",
"nameHtml": "My Name",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"iconColor": "37",
"name": "My Name",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
Token Expiration
A refresh token might stop working for one of these reasons:
- The user has revoked your app's access.
- The refresh token has not been used for 6 months.
Publish App
By default, your app will be set as Private. You can change the app distribution to Public so that other Quire users can install your app to their workspace as well.
If your app is made available on Quire App Directory and you want to delete the app, you should communicate with your users first before depreciating the app.
WebHook
When one event on Quire is triggered, the system will send a payload to the webhook's configured URL.
A webhook is used by Quire to call an app, while Quire API is used by an app to call Quire. To receive these events, you have to specify a valid URL for Webhooks when configuring your app.
For a complete guide, see our blog post.
System Events
A system event is used to notify your app about system or app's activities.
Token Expiration
When the token has been expired or revoked, an event will be sent to your app. You can clean up your storage if necessary.
{
"type": "system",
"token": "hook-token-defined-by-you",
"secret": "secret-defined-by-you",
"data": {
"type": "token-revocation",
"token": "the-refresh-token"
}
}
Host Revocation
When the user revokes the grant to a host (either a project or an organization), an event will be sent to your app. You can clean up your storage if necessary.
{
"type": "system",
"token": "hook-token-defined-by-you",
"secret": "secret-defined-by-you",
"data": {
"type": "host-revocation",
"token": "the-refresh-token",
"host": "host-oid",
"otype": "host-type",
}
}
Notification Events
A notification is the information about an update (aka., an activity). Here is an example:
{
"type": "notification",
"token": "hook-token-defined-by-you",
"secret": "secret-defined-by-you",
"projectSummary": {
"oid": "project-oid-where-event-occurred",
"id": "project-id"
},
"organizationSummary": {
"oid": "organization-where-event-occurred",
"id": "organization-id"
},
"data": {
"type": 0, //activity's type
"when": "2019-09-30T08:20:12.000Z",
"what": {
"oid": "YxjapXXRCOYxoaiCT4tT3OQm", //OID of a task, project, or organization depending on type
"id": 101,
"name": "Brand new start",
"parent": {
"oid": "parent-oid",
"id": "parent-id",
"parent": {
"oid": "grand-parent-oid",
"id": "grand-parent-id",
}
}
},
"user": {
"oid": "1AbDEFed2A5031BEDDweqmde", //OID of the user
"id": "john.doer",
"name": "John Doer"
},
"message": "<a href=\"https://quire.io/u/john.doer\">John Doer</a> added <a href=\"https://quire.io/w/MyProjects/101\">Brand new start</a>",
"text": "John Doer added Brand new start",
"url": "https://quire.io/w/MyProjects/101"
}
}
-
The
datamap may also include an optionalvaluefield, which provides detailed information as a map. For example, for an assignment notification,valueincludes the assignee’s ID, name, and URL. -
If the notification is about a start or due change, the
datamap will include an additionalduefield. This value is a date/time formatted in the user’s locale and time zone. -
If the event notifies a task update and the task has a parent, the parent information is included in the
parentfield. Theparentfield is amapcontaining the task’s oid and id. If the task’s parent also has a parent, the map includes a nestedparentfield as well. -
The
projectSummaryandorganizationSummaryfields provide information about the project and organization where the event occurred. -
There is an additional field,
taskSummaries, for activities that can affect multiple tasks (for example, removing a task that has subtasks). This field is a list ofmapinstances. Eachmaprepresents a task that was changed. If any of that task's subtasks were also changed, they are included in the map’stasksfield.- Please refer to Activity Types | taskSummaries.
Registration for Notifications
For instructions on updating a project, see Update a project by OID.
If the app wants to receive notifications of a specific projects or tasks, it can
follow the projects or apps by sending a PUT request to the URL. To add a follower, the body of the request can be:
Syntax 1
{
"addFollowers": ["app"]
}
where app is a keyword. It indicates that the app would like to receives the notifications about the given target (a project or a task). That is, it'll add the app into the target's followers.
Syntax 2
In additions, you can specify additional information that will be passed as part of a notification in the following syntax.
"app|team|channel"
where app is a keyword while team and channel are application specific. That is, you can pass any value to team and channel.
Note:
teamandchannelcan not contain'|'.
For example,
{
"addFollowers": ["app|extra101"]
}
Then, the notification will carry additional field called team with the value "extra101":
{
"type": "notification",
"team": "extra101",
"data": {
//refer the Notifications section for details
}
}
Another example:
{
"addFollowers": ["app|extra101|channel9"]
}
You'll get:
{
"type": "notification",
"team": "extra101",
"channel": "channel9",
"data": {
//refer the Notifications section for details
}
}
Syntax 3
"app|team|channel|mine"
where both app and mine are keywords. It is similar to
Syntax 2, except it receives only notifications that match the notification setting of the user.
If you don't need both team and channel, you can specify: "app|||mine.
The notification setting can be found at
https://quire.io/w/YourProject?view=setting&tab=options#notifications
Syntax 4
"app|/path"
where app is a keyword, and /path is application specific. The path will be appended to the app's hook URL. For example, assume the app's hook URL is "https://super.app/hooks/standard", and the follower "app|/soc/id279/channel51". Then, the notification will be posted the following URL: "https://super.app/hooks/standard/soc/id279/channel51".
Syntax 5
If you'd like to pass additional information in this syntax, you can append it as follows.
"app|/path|channel"
For example, app|/soc/id8|box51. Then, box51 will be part of the JSON object sent to the hook URL.
{
"type": "notification",
"channel": "box51",
"data": {
//refer the Notifications section for details
}
}
Responding and Retries
When receiving the notification, your Web Hook shall return a status code between 200 and 299 to indicate success.
If a status code other than above is returned, we will retry 15 minutes later, then 1 hour later and 1 day later.
Activities Types
Rate Limits
To protect the stability of the API and keep it available to all users, Quire enforces multiple kinds of rate limiting. Requests that hit any of our rate limits will receive a 429 Too Many Requests response. We may change these quotas or add new quotas in the future.
Here are the limits for free plans.
| Plan | Maximum requests per organization, per minute | Maximum requests per organization, per hour |
|---|---|---|
| Free | 25 | 120 |
Note: the limit is per-organization. It sums up the total number of all accesses from all applications for each organization. For more quota, please refer to Pricing.
When a rate limit is exceeded, the response includes a standard
Retry-After header whose value is the number of seconds to wait before retrying. The value reflects the time until the offending per-minute or per-hour counter resets, so clients can back off precisely instead of guessing.
HTTP/1.1 429 Too Many Requests
Retry-After: 37
Content-Type: application/json
{"code": 429, "message": "..."}
Size limits
The size of each request can't be larger than 1MB. Requests that hit this limit will receive a 413 Content too large response.
Status Codes
| Code | Meaning | Description |
|---|---|---|
| 200 | Success | Request successful |
| 400 | Bad Request | You're using a wrong parameter, or passing incorrect data. |
| 401 | Unauthorized | Invalid or expired token. |
| 402 | Payment required | The organization’s subscription does not permit use of this app. |
| 403 | Forbidden | Not authorized to access the resource. |
| 404 | Not Found | The specified resource could not be found. |
| 405 | Method not allowed | Method not allowed or supported. |
| 409 | Conflict | There is already a resource with the same criteria. |
| 413 | Content too large | The request's content is larger than 1MB. |
| 418 | Not valid JSON content | The request's content doesn't appear to be JSON. |
| 429 | Too Many Requests | Exceeded the rate limit for API calls |
| 500 | Internal Server Error | There is an unexpected error. |
| 503 | Service Unavailable | Server is down for maintenance. |
Error Responses
The following JSON data is returned in the response body when an error occurs.
{
"code": a_number,
"message": "an error message here"
}
| Error Code | Meaning |
|---|---|
| 100 | General authentication error. |
| 400 | Bad request including wrong request body, wrong parameter and so on. |
| 401 | Invalid or expired token. |
| 403 | Forbidden. |
| 404 | Resource not found. |
| 405 | Method not allowed. |
| 413 | Request too large. |
| 429 | Too many invocations. |
| 469 | Quota exceeded, such as number of projects and number of members. |
| 500 | General invocation error. Most likely, an internal error. |
Quire MCP Server
Quire offers an MCP (Model Context Protocol) server that lets AI assistants — Claude, ChatGPT, Cursor, VS Code, and other MCP-compatible clients — work with your Quire workspace through natural language.
Once connected, the assistant can list and search your projects, create or update tasks and subtasks, post comments, manage tags, sublists, statuses, documents, chats, insights, and more — all on your behalf and within the permissions you grant.
Quire MCP is built on top of the same Quire REST API documented here, so anything an integration can do via REST is reachable from an AI assistant once it is connected.
Server URL
The Quire MCP server is hosted at:
https://mcp.quire.app/mcp
Authentication is handled by OAuth 2.1 — your AI assistant walks you through the standard authorization screen, you approve access for the workspaces you choose, and the assistant receives a token scoped to your account. No client ID or client secret needs to be configured by the end user.
The server speaks the Streamable HTTP transport and supports Dynamic Client Registration (RFC 7591) and PKCE (RFC 7636), so any compliant MCP client can connect with just the URL above.
What you can do
The Quire MCP server exposes the full Quire object model as MCP tools. At a high level:
| Category | What the AI can do |
|---|---|
| User & Organizations | Identify the current user, look up users, list and update organizations |
| Projects | List, search, and inspect projects; manage members, custom fields, and approval categories |
| Tasks | Create, update, move, transfer, complete, approve, and delete tasks; manage dates, peekaboo, and time logs; search across a project, folder, or organization |
| Bulk operations | Create, update, move, transfer, approve, or delete many tasks in one call |
| Subtasks & Sublists | Build task hierarchies, group tasks into sublists, and reorder within sublists |
| Comments & Attachments | Read and post comments on tasks and chats; attach files to tasks or comments |
| Tags & Statuses | Manage the project's tag library and workflow statuses |
| Documents | Create, read, update, and delete project documents |
| Chats & Insights | Start chat threads, post chat comments, and manage insight reports and their fields |
| Partners | List and inspect partner workspaces |
| URL resolver | Turn any pasted Quire URL (task, project, document, …) into the underlying object |
For the authoritative, always-up-to-date list of tools and their parameters, run tools/list from your MCP client after connecting.
Connect your AI assistant
You only need the server URL — the authorization flow is started by the client and completed in your browser.
Claude Desktop
- Open Settings → Connectors.
- Click Add custom connector.
- Enter a name (for example,
Quire) and the URLhttps://mcp.quire.app/mcp. - Save and click Connect. Claude Desktop will open a browser window where you can sign in to Quire and grant access.
Claude Code
Add the server with one command:
claude mcp add --transport http quire https://mcp.quire.app/mcp
Then trigger the OAuth flow from inside Claude Code:
/mcp
Pick quire, follow the link to authorize, and you're done.
Gemini CLI
Edit ~/.gemini/settings.json (user scope) or .gemini/settings.json (project scope):
{
"mcpServers": {
"quire": {
"httpUrl": "https://mcp.quire.app/mcp",
"authProviderType": "dynamic_discovery"
}
}
}
Restart Gemini CLI, then trigger OAuth:
/mcp auth quire
dynamic_discovery makes the CLI auto-detect the OAuth requirement, register a client, and open a browser to authorize. (OAuth requires that your local machine can receive a redirect on http://localhost:7777/oauth/callback.)
ChatGPT
ChatGPT supports remote MCP servers as Connectors (available on Plus, Pro, Business, Enterprise, and Edu plans).
- Open
chatgpt.comand go to Settings → Connectors. - Click Add connector.
- Enter a name (for example,
Quire) and the URLhttps://mcp.quire.app/mcp. - Sign in to Quire when prompted and approve access.
Perplexity
Perplexity supports remote MCP servers as Custom Connectors on paid plans (Pro, Max, Enterprise).
- Open
perplexity.aiand go to Settings → Connectors. - Click Add Connector → Advanced (or Add custom connector).
- Enter a name (for example,
Quire), set the URL tohttps://mcp.quire.app/mcp, and choose Streamable HTTP as the transport with OAuth as the authentication method. - Save, then click Connect and sign in to Quire to approve access.
Cursor
Add the following entry to your MCP settings (~/.cursor/mcp.json or
Settings → MCP):
{
"mcpServers": {
"quire": {
"url": "https://mcp.quire.app/mcp"
}
}
}
Reload Cursor and complete the OAuth flow when prompted.
VS Code (GitHub Copilot Chat)
Create or edit .vscode/mcp.json in your workspace (or the user-level equivalent):
{
"servers": {
"quire": {
"type": "http",
"url": "https://mcp.quire.app/mcp"
}
}
}
Open the Command Palette and run
MCP: List Servers, select quire, and start it. VS Code will open a browser to authorize.
Windsurf
Edit ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"quire": {
"serverUrl": "https://mcp.quire.app/mcp"
}
}
}
Restart Windsurf and authorize when prompted.
Other MCP clients
Any client that supports Streamable HTTP MCP servers with OAuth can connect — just point it at https://mcp.quire.app/mcp. For clients that only speak the older stdio transport, use a bridge such as
mcp-remote:
{
"mcpServers": {
"quire": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.quire.app/mcp"]
}
}
}
Authorization scopes
The first time you connect, Quire shows the standard authorization screen. You can choose:
- Which organizations and projects the assistant may access.
- What it may do — the same permission scopes that apply to regular Quire OAuth apps (see Authentication).
You can revoke access at any time from your Quire account settings, or by removing the connector from your AI client.
Privacy and rate limits
- Quire MCP requests count against the same per-organization API quotas as direct REST calls — see Rate Limits.
- Conversations with your AI assistant are not stored on Quire's servers; the MCP server only sees the individual tool calls the assistant makes on your behalf.
- All traffic is encrypted in transit (HTTPS); access tokens are never exposed to model output.
Troubleshooting
-
"Connection refused" or "Failed to authenticate" — make sure the URL is exactly
https://mcp.quire.app/mcp(with the/mcppath) and that your client supports the Streamable HTTP transport. -
Authorization screen never appears — some clients require you to manually trigger the OAuth flow (for example,
/mcpin Claude Code). Check the client's MCP server panel for an "authorize" button or status message. - The assistant can't see a project — confirm the project belongs to an organization you authorized, and that your Quire role on that project allows the action you're asking for.
-
Tool calls return
429 Too Many Requests— you have hit the per-organization rate limit. The assistant will receive aRetry-Aftervalue; wait that many seconds before retrying.
If a problem persists, contact Quire support with the timestamp of the failing request and (if shown) the request ID surfaced by the MCP client.
API Endpoint
https://quire.io/api
Schemes: https
Version: 1.0.0
chat
Chat channels.
Create a chat channel by owner OID.
Adds a new chat channel to the specified owner (currently only project).
Owner type. Currently only project is supported. If omitted, project is assumed; e.g., /abc123 is equivalent to /project/abc123.
Owner OID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) Description of the record (Markdown supported).
(Optional) Icon color index from Quire's predefined palette. Two-digit code [0-5][0-7]: first digit 0-5, second digit 0-7 (e.g. 00, 37, 57). NOT a CSS hex color.
(Optional) Icon image identifier.
Display name of the record (Markdown supported).
(Optional) ID for this record. If omitted, Quire generates one automatically. Must be unique within the project.
(Optional) OID of the external team this record belongs to.
(Optional) Target start date.
(Optional) Target due date.
Request Example
{
"description": "**Great** record to start with.",
"iconColor": "37",
"image": "icon-view-kanban",
"name": "Highlight 101",
"id": "Highlight101",
"partner": "rcBHBYXZSiyDRrHrWPutatfF",
"start": "2024-01-02",
"due": "2024-05-25"
}
OK — created chat channel.
Bad Request — body validation failed.
Forbidden — caller lacks permission to create a chat in this owner.
Not Found — parent owner does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?chat=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Create a chat channel by owner ID.
Adds a new chat channel to the specified owner by ID (currently only project).
Owner type. Currently only project is supported. If omitted, project is assumed; e.g., /id/foo is equivalent to /id/project/foo.
Owner ID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) Description of the record (Markdown supported).
(Optional) Icon color index from Quire's predefined palette. Two-digit code [0-5][0-7]: first digit 0-5, second digit 0-7 (e.g. 00, 37, 57). NOT a CSS hex color.
(Optional) Icon image identifier.
Display name of the record (Markdown supported).
(Optional) ID for this record. If omitted, Quire generates one automatically. Must be unique within the project.
(Optional) OID of the external team this record belongs to.
(Optional) Target start date.
(Optional) Target due date.
Request Example
{
"description": "**Great** record to start with.",
"iconColor": "37",
"image": "icon-view-kanban",
"name": "Highlight 101",
"id": "Highlight101",
"partner": "rcBHBYXZSiyDRrHrWPutatfF",
"start": "2024-01-02",
"due": "2024-05-25"
}
OK — created chat channel.
Bad Request — body validation failed.
Forbidden — caller lacks permission to create a chat in this owner.
Not Found — parent owner does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?chat=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Get a chat channel by ID.
Returns the full chat channel record for the given owner and channel ID.
Owner type. Currently only project is supported. If omitted, project is assumed; e.g., /id/foo is equivalent to /id/project/foo.
Owner ID.
Chat channel ID.
OK — chat channel record.
Not Found — chat does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?chat=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Get a chat channel by OID.
Returns the full chat channel record.
Chat channel OID.
OK — chat channel record.
Not Found — chat does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?chat=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
List chat channels by owner ID.
Returns all chat channel records for the given owner.
Owner type. Currently only project is supported. If omitted, project is assumed; e.g., /list/id/foo is equivalent to /list/id/project/foo.
Owner ID.
OK — list of chat channels (may be empty).
Not Found — parent owner does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"url": "https://quire.io/w/my_project?chat=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
]
List chat channels by owner OID.
Returns all chat channel records for the given owner.
Owner type. Currently only project is supported. If omitted, project is assumed; e.g., /list/abc123 is equivalent to /list/project/abc123.
Owner OID.
OK — list of chat channels (may be empty).
Not Found — parent owner does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"url": "https://quire.io/w/my_project?chat=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
]
Undo the removal of a chat channel by ID.
Restores a previously-removed chat channel. Idempotent: if the channel is not currently removed, this is a no-op and returns the current channel record.
Subject to the chat-channel-per-project quota: may return 429 Too Many Requests if the plan's chat-channel limit is already reached.
Owner type. Currently only project is supported. If omitted, project is assumed; e.g., /undo-remove/id/foo/bar is equivalent to /undo-remove/id/project/foo/bar.
Owner ID.
Chat channel ID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
OK — restored chat channel.
Forbidden — caller lacks permission to modify this chat.
Not Found — chat does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?chat=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Undo the removal of a chat channel by OID.
Restores a previously-removed chat channel. Idempotent: if the channel is not currently removed, this is a no-op and returns the current channel record.
Subject to the chat-channel-per-project quota: may return 429 Too Many Requests if the plan's chat-channel limit is already reached.
Chat channel OID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
OK — restored chat channel.
Forbidden — caller lacks permission to modify this chat.
Not Found — chat does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?chat=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Update a chat channel by ID.
Updates an existing chat channel and returns the updated record.
To archive or unarchive, set archived: true or archived: false in the body.
Owner type. Currently only project is supported. If omitted, project is assumed; e.g., /id/foo is equivalent to /id/project/foo.
Owner ID.
Chat channel ID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) New description for this record (Markdown supported).
(Optional) Archive toggle. Specify true to archive this record; specify false to unarchive.
(Optional) Target start date for this record.
(Optional) Target due date for this record.
(Optional) Icon color index from Quire's predefined palette. Two-digit code [0-5][0-7]: first digit 0-5, second digit 0-7 (e.g. 00, 37, 57). NOT a CSS hex color.
(Optional) Icon image for this record.
(Optional) New display name for this record.
(Optional) New ID for this record.
Request Example
{
"description": "**Great** record to start with.",
"archived": true,
"start": "2024-01-02",
"due": "2024-05-25",
"iconColor": "37",
"image": "icon-view-kanban",
"name": "Highlight 101",
"id": "Highlight101"
}
OK — updated chat channel.
Bad Request — body validation failed.
Forbidden — caller lacks permission to modify this chat.
Not Found — chat does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?chat=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Update a chat channel by OID.
Updates an existing chat channel and returns the updated record.
To archive or unarchive, set archived: true or archived: false in the body.
Chat channel OID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) New description for this record (Markdown supported).
(Optional) Archive toggle. Specify true to archive this record; specify false to unarchive.
(Optional) Target start date for this record.
(Optional) Target due date for this record.
(Optional) Icon color index from Quire's predefined palette. Two-digit code [0-5][0-7]: first digit 0-5, second digit 0-7 (e.g. 00, 37, 57). NOT a CSS hex color.
(Optional) Icon image for this record.
(Optional) New display name for this record.
(Optional) New ID for this record.
Request Example
{
"description": "**Great** record to start with.",
"archived": true,
"start": "2024-01-02",
"due": "2024-05-25",
"iconColor": "37",
"image": "icon-view-kanban",
"name": "Highlight 101",
"id": "Highlight101"
}
OK — updated chat channel.
Bad Request — body validation failed.
Forbidden — caller lacks permission to modify this chat.
Not Found — chat does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?chat=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Delete a chat channel by ID.
Deletes the specified chat channel.
Note: Returns
204 No Contentregardless of whether the chat exists.
Owner type. Currently only project is supported. If omitted, project is assumed; e.g., /id/foo is equivalent to /id/project/foo.
Owner ID.
Chat channel ID.
No Content
Response Content-Types: application/json
Delete a chat channel by OID.
Deletes the specified chat channel.
Note: Returns
204 No Contentregardless of whether the chat exists.
Chat channel OID.
No Content
Response Content-Types: application/json
comment
A comment that a user can add to a chat channel or a task.
Upload an attachment to a comment (by comment OID).
Uploads an attachment to an existing comment.
Comment OID.
Attachment file name, e.g., readme.txt.
Provide a meaningful extension so the browser can recognize the MIME type (e.g., revenue.pdf, contacts.json).
Alternatively, set the MIME type via the Content-Type header.
Request Example
"object"
OK — attachment record.
Bad Request — bad payload or filename.
Forbidden — caller lacks permission to attach to this comment.
Not Found — comment does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000
}
Add a new comment to a chat channel (by project ID and chat ID).
Adds a new comment to the specified chat channel.
Project ID.
Chat channel ID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
Content of the new comment (Markdown supported).
(Optional) If true, marks this comment as created by the app. Default: false (created by the authorizing user).
(Optional) Whether to pin this comment. Default: false.
Request Example
{
"description": "Adjust style",
"asUser": true,
"pinned": false
}
OK — created comment record.
Bad Request — body validation failed.
Forbidden — caller lacks permission to add a comment to this chat channel.
Not Found — chat channel does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"oid": "iDsPd.QP_qM.hN.Trymukn8b",
"description": "It is *cool*!",
"descriptionText": "It is cool!",
"descriptionHtml": "It is <i>cool</i>!",
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
],
"pinAt": "2018-12-22T02:06:58.158Z",
"pinBy": "#/definitions/SimpleIdentity",
"editedBy": "#/definitions/SimpleIdentity",
"url": "string",
"editedAt": "2018-12-22T02:06:58.158Z",
"owner": {
"url": "https://quire.io/w/my_id",
"type": "Project",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
Add a new comment to a chat channel (by chat OID).
Adds a new comment to the specified chat channel.
OID of the chat channel.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
Content of the new comment (Markdown supported).
(Optional) If true, marks this comment as created by the app. Default: false (created by the authorizing user).
(Optional) Whether to pin this comment. Default: false.
Request Example
{
"description": "Adjust style",
"asUser": true,
"pinned": false
}
OK — created comment record.
Bad Request — body validation failed.
Forbidden — caller lacks permission to add a comment to this chat channel.
Not Found — chat channel does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"oid": "iDsPd.QP_qM.hN.Trymukn8b",
"description": "It is *cool*!",
"descriptionText": "It is cool!",
"descriptionHtml": "It is <i>cool</i>!",
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
],
"pinAt": "2018-12-22T02:06:58.158Z",
"pinBy": "#/definitions/SimpleIdentity",
"editedBy": "#/definitions/SimpleIdentity",
"url": "string",
"editedAt": "2018-12-22T02:06:58.158Z",
"owner": {
"url": "https://quire.io/w/my_id",
"type": "Project",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
Add a new comment to a task (by task OID).
Adds a new comment to the specified task.
OID of the task.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
Content of the new comment (Markdown supported).
(Optional) If true, marks this comment as created by the app. Default: false (created by the authorizing user).
(Optional) Whether to pin this comment. Default: false.
Request Example
{
"description": "Adjust style",
"asUser": true,
"pinned": false
}
OK — created comment record.
Bad Request — body validation failed.
Forbidden — caller lacks permission to add a comment to this task.
Not Found — task does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"oid": "iDsPd.QP_qM.hN.Trymukn8b",
"description": "It is *cool*!",
"descriptionText": "It is cool!",
"descriptionHtml": "It is <i>cool</i>!",
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
],
"pinAt": "2018-12-22T02:06:58.158Z",
"pinBy": "#/definitions/SimpleIdentity",
"editedBy": "#/definitions/SimpleIdentity",
"url": "string",
"editedAt": "2018-12-22T02:06:58.158Z",
"owner": {
"url": "https://quire.io/w/my_id",
"type": "Project",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
Add a new comment to a task (by project ID and task ID).
Adds a new comment to the specified task.
Project ID.
Task ID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
Content of the new comment (Markdown supported).
(Optional) If true, marks this comment as created by the app. Default: false (created by the authorizing user).
(Optional) Whether to pin this comment. Default: false.
Request Example
{
"description": "Adjust style",
"asUser": true,
"pinned": false
}
OK — created comment record.
Bad Request — body validation failed.
Forbidden — caller lacks permission to add a comment to this task.
Not Found — task does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"oid": "iDsPd.QP_qM.hN.Trymukn8b",
"description": "It is *cool*!",
"descriptionText": "It is cool!",
"descriptionHtml": "It is <i>cool</i>!",
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
],
"pinAt": "2018-12-22T02:06:58.158Z",
"pinBy": "#/definitions/SimpleIdentity",
"editedBy": "#/definitions/SimpleIdentity",
"url": "string",
"editedAt": "2018-12-22T02:06:58.158Z",
"owner": {
"url": "https://quire.io/w/my_id",
"type": "Project",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
Get an existing comment (by comment OID).
Returns the full comment record.
Comment OID.
OK — comment record.
Not Found — comment does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"oid": "iDsPd.QP_qM.hN.Trymukn8b",
"description": "It is *cool*!",
"descriptionText": "It is cool!",
"descriptionHtml": "It is <i>cool</i>!",
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
],
"pinAt": "2018-12-22T02:06:58.158Z",
"pinBy": "#/definitions/SimpleIdentity",
"editedBy": "#/definitions/SimpleIdentity",
"url": "string",
"editedAt": "2018-12-22T02:06:58.158Z",
"owner": {
"url": "https://quire.io/w/my_id",
"type": "Project",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
Get all comments of a chat channel (by chat OID).
Returns all comments of the specified chat channel.
OID of the chat channel.
OK — list of comments (may be empty).
Not Found — chat channel does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"oid": "iDsPd.QP_qM.hN.Trymukn8b",
"description": "It is *cool*!",
"descriptionText": "It is cool!",
"descriptionHtml": "It is <i>cool</i>!",
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
],
"pinAt": "2018-12-22T02:06:58.158Z",
"pinBy": "#/definitions/SimpleIdentity",
"editedBy": "#/definitions/SimpleIdentity",
"url": "string",
"editedAt": "2018-12-22T02:06:58.158Z",
"owner": {
"url": "https://quire.io/w/my_id",
"type": "Project",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
]
Get all comments of a task (by project ID and task ID).
Returns all comments of the specified task.
Project ID.
Task ID.
OK — list of comments (may be empty).
Not Found — task does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"oid": "iDsPd.QP_qM.hN.Trymukn8b",
"description": "It is *cool*!",
"descriptionText": "It is cool!",
"descriptionHtml": "It is <i>cool</i>!",
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
],
"pinAt": "2018-12-22T02:06:58.158Z",
"pinBy": "#/definitions/SimpleIdentity",
"editedBy": "#/definitions/SimpleIdentity",
"url": "string",
"editedAt": "2018-12-22T02:06:58.158Z",
"owner": {
"url": "https://quire.io/w/my_id",
"type": "Project",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
]
Get all comments of a task (by task OID).
Returns all comments of the specified task.
OID of the task.
OK — list of comments (may be empty).
Not Found — task does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"oid": "iDsPd.QP_qM.hN.Trymukn8b",
"description": "It is *cool*!",
"descriptionText": "It is cool!",
"descriptionHtml": "It is <i>cool</i>!",
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
],
"pinAt": "2018-12-22T02:06:58.158Z",
"pinBy": "#/definitions/SimpleIdentity",
"editedBy": "#/definitions/SimpleIdentity",
"url": "string",
"editedAt": "2018-12-22T02:06:58.158Z",
"owner": {
"url": "https://quire.io/w/my_id",
"type": "Project",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
]
Undo the removal of a comment (by comment OID).
Restores a previously-removed comment. Idempotent: if the comment is not currently removed, this is a no-op and returns the current comment record.
Comment OID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
OK — restored comment record.
Forbidden — caller lacks permission to restore this comment.
Not Found — comment does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"oid": "iDsPd.QP_qM.hN.Trymukn8b",
"description": "It is *cool*!",
"descriptionText": "It is cool!",
"descriptionHtml": "It is <i>cool</i>!",
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
],
"pinAt": "2018-12-22T02:06:58.158Z",
"pinBy": "#/definitions/SimpleIdentity",
"editedBy": "#/definitions/SimpleIdentity",
"url": "string",
"editedAt": "2018-12-22T02:06:58.158Z",
"owner": {
"url": "https://quire.io/w/my_id",
"type": "Project",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
Update an existing comment (by comment OID).
Updates an existing comment and returns the updated record.
Comment OID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) New comment content (Markdown supported).
(Optional) Whether the comment is pinned.
Request Example
{
"description": "Adjust style",
"pinned": false
}
OK — updated comment record.
Bad Request — body validation failed.
Forbidden — caller lacks permission to modify this comment.
Not Found — comment does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"oid": "iDsPd.QP_qM.hN.Trymukn8b",
"description": "It is *cool*!",
"descriptionText": "It is cool!",
"descriptionHtml": "It is <i>cool</i>!",
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
],
"pinAt": "2018-12-22T02:06:58.158Z",
"pinBy": "#/definitions/SimpleIdentity",
"editedBy": "#/definitions/SimpleIdentity",
"url": "string",
"editedAt": "2018-12-22T02:06:58.158Z",
"owner": {
"url": "https://quire.io/w/my_id",
"type": "Project",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
Delete an existing comment (by comment OID).
Deletes an existing comment.
Note: Returns
204 No Contentregardless of whether the comment exists.
Comment OID.
No Content
Response Content-Types: application/json
doc
Documents.
Create a document by owner OID.
Adds a new document to the specified owner (project, organization, folder, or smart-folder).
Owner type. One of project, organization, folder, or smart-folder. If omitted, project is assumed; e.g., /abc123 is equivalent to /project/abc123.
Owner OID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) Description of the record (Markdown supported).
(Optional) Icon color index from Quire's predefined palette. Two-digit code [0-5][0-7]: first digit 0-5, second digit 0-7 (e.g. 00, 37, 57). NOT a CSS hex color.
(Optional) Icon image identifier.
Display name of the record (Markdown supported).
(Optional) ID for this record. If omitted, Quire generates one automatically. Must be unique within the project.
(Optional) OID of the external team this record belongs to.
(Optional) Target start date.
(Optional) Target due date.
Request Example
{
"description": "**Great** record to start with.",
"iconColor": "37",
"image": "icon-view-kanban",
"name": "Highlight 101",
"id": "Highlight101",
"partner": "rcBHBYXZSiyDRrHrWPutatfF",
"start": "2024-01-02",
"due": "2024-05-25"
}
OK — created doc record.
Bad Request — body validation failed.
Forbidden — caller lacks permission to create a doc in this owner.
Not Found — owner does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?doc=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Create a document by owner ID.
Adds a new document to the specified owner by ID (project, organization, folder, or smart-folder).
Owner type. One of project, organization, folder, or smart-folder. If omitted, project is assumed; e.g., /id/foo is equivalent to /id/project/foo.
Owner ID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) Description of the record (Markdown supported).
(Optional) Icon color index from Quire's predefined palette. Two-digit code [0-5][0-7]: first digit 0-5, second digit 0-7 (e.g. 00, 37, 57). NOT a CSS hex color.
(Optional) Icon image identifier.
Display name of the record (Markdown supported).
(Optional) ID for this record. If omitted, Quire generates one automatically. Must be unique within the project.
(Optional) OID of the external team this record belongs to.
(Optional) Target start date.
(Optional) Target due date.
Request Example
{
"description": "**Great** record to start with.",
"iconColor": "37",
"image": "icon-view-kanban",
"name": "Highlight 101",
"id": "Highlight101",
"partner": "rcBHBYXZSiyDRrHrWPutatfF",
"start": "2024-01-02",
"due": "2024-05-25"
}
OK — created doc record.
Bad Request — body validation failed.
Forbidden — caller lacks permission to create a doc in this owner.
Not Found — owner does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?doc=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Get a document by ID.
Returns the full document record for the given owner and document ID.
Owner type. One of project, organization, folder, or smart-folder. If omitted, project is assumed; e.g., /id/foo is equivalent to /id/project/foo.
Owner ID.
Document ID.
OK — doc record.
Not Found — doc does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?doc=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Get a document by OID.
Returns the full document record.
Document OID.
OK — doc record.
Not Found — doc does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?doc=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
List documents by owner ID.
Returns all documents for the specified owner.
Owner type. One of project, organization, folder, or smart-folder. If omitted, project is assumed; e.g., /list/id/foo is equivalent to /list/id/project/foo.
Owner ID.
OK — list of doc records (may be empty).
Not Found — owner does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"url": "https://quire.io/w/my_project?doc=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
]
List documents by owner OID.
Returns all documents for the specified owner.
Owner type. One of project, organization, folder, or smart-folder. If omitted, project is assumed; e.g., /list/abc123 is equivalent to /list/project/abc123.
Owner OID.
OK — list of doc records (may be empty).
Not Found — owner does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"url": "https://quire.io/w/my_project?doc=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
]
Undo the removal of a document by ID.
Restores a previously-removed document. Idempotent: if the document is not currently removed, this is a no-op and returns the current document record.
Subject to the document-per-owner quota: may return 429 Too Many Requests if the plan's document limit is already reached.
Owner type. One of project, organization, folder, or smart-folder. If omitted, project is assumed; e.g., /undo-remove/id/foo/bar is equivalent to /undo-remove/id/project/foo/bar.
Owner ID.
Document ID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
OK — restored doc record.
Forbidden — caller lacks permission to restore this doc.
Not Found — doc does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?doc=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Undo the removal of a document by OID.
Restores a previously-removed document. Idempotent: if the document is not currently removed, this is a no-op and returns the current document record.
Subject to the document-per-owner quota: may return 429 Too Many Requests if the plan's document limit is already reached.
OID of the document to restore.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
OK — restored doc record.
Forbidden — caller lacks permission to restore this doc.
Not Found — doc does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?doc=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Update a document by ID.
Updates an existing document and returns the updated record.
To archive or unarchive, set archived: true or archived: false in the body.
Owner type. One of project, organization, folder, or smart-folder. If omitted, project is assumed; e.g., /id/foo is equivalent to /id/project/foo.
Owner ID.
Document ID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) New description for this record (Markdown supported).
(Optional) Archive toggle. Specify true to archive this record; specify false to unarchive.
(Optional) Target start date for this record.
(Optional) Target due date for this record.
(Optional) Icon color index from Quire's predefined palette. Two-digit code [0-5][0-7]: first digit 0-5, second digit 0-7 (e.g. 00, 37, 57). NOT a CSS hex color.
(Optional) Icon image for this record.
(Optional) New display name for this record.
(Optional) New ID for this record.
Request Example
{
"description": "**Great** record to start with.",
"archived": true,
"start": "2024-01-02",
"due": "2024-05-25",
"iconColor": "37",
"image": "icon-view-kanban",
"name": "Highlight 101",
"id": "Highlight101"
}
OK — updated doc record.
Bad Request — body validation failed.
Forbidden — caller lacks permission to modify this doc.
Not Found — doc does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?doc=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Update a document by OID.
Updates an existing document and returns the updated record.
To archive or unarchive, set archived: true or archived: false in the body.
Document OID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) New description for this record (Markdown supported).
(Optional) Archive toggle. Specify true to archive this record; specify false to unarchive.
(Optional) Target start date for this record.
(Optional) Target due date for this record.
(Optional) Icon color index from Quire's predefined palette. Two-digit code [0-5][0-7]: first digit 0-5, second digit 0-7 (e.g. 00, 37, 57). NOT a CSS hex color.
(Optional) Icon image for this record.
(Optional) New display name for this record.
(Optional) New ID for this record.
Request Example
{
"description": "**Great** record to start with.",
"archived": true,
"start": "2024-01-02",
"due": "2024-05-25",
"iconColor": "37",
"image": "icon-view-kanban",
"name": "Highlight 101",
"id": "Highlight101"
}
OK — updated doc record.
Bad Request — body validation failed.
Forbidden — caller lacks permission to modify this doc.
Not Found — doc does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?doc=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Delete a document by ID.
Deletes the specified document.
Note: Returns
204 No Contentregardless of whether the doc exists.
Owner type. One of project, organization, folder, or smart-folder. If omitted, project is assumed; e.g., /id/foo is equivalent to /id/project/foo.
Owner ID.
Document ID.
No Content
Response Content-Types: application/json
Delete a document by OID.
Deletes the specified document.
Note: Returns
204 No Contentregardless of whether the doc exists.
Document OID.
No Content
Response Content-Types: application/json
insight
Insight views — configurable task views with filters and columns.
Add a custom-field definition to an insight view by ID.
Adds a custom-field definition to an insight view, identifying the insight by owner-type + owner ID + insight ID. Only formula and lookup field types are allowed on insight views. See also /insight/add-field/{oid} for the OID form.
Owner type.
Owner ID.
Insight ID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional, formula only) Expected result type.
(Required for formula) Formula expression.
(Optional) Conditional-format rules. Applicable to date, number, money, duration, lookup, and formula fields whose resultType resolves to one of those.
(Optional) Restrict access to non-guest members only.
(Optional, duration/formula only) Duration display format.
(Optional, date only) Include time-of-day in addition to the date.
(Required for lookup) Map from lookup key to numeric value. Keys are OIDs of the configured lookupType entity (e.g. user OIDs when lookupType=User). Values are numbers.
(Optional, lookup only) Source type for lookup keys. Default: User.
(Optional) Hide this field from the task detail panel.
(Optional, number/money only) Number of decimal digits. -1 means no rounding.
(Optional) Allow multiple values. Applies to select, user, task, and file (always true for file).
(Optional) Clear this field when duplicating a task.
(Required for select) Option list.
Unique name for this field. Must be a non-empty string and must not contain }, ", or \.
Field type. For insight views, only formula and lookup are accepted.
(Optional, number only) Format the value as a percentage.
(Optional, money/formula only) Currency symbol. When omitted on a money field, defaults to $.
Request Example
{
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"name": "Priority",
"type": "number",
"percent": false,
"currency": "USD"
}
OK — created field definition.
Bad Request — body validation failed.
Forbidden — caller lacks permission (or Admin scope required).
Not Found — insight or owner does not exist.
Too Many Requests — custom-field quota reached.
Response Content-Types: application/json
Response Example (200 OK)
{
"name": "Priority",
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"type": "number",
"percent": false,
"currency": "USD"
}
Add a custom-field definition to an insight view.
Adds a new
custom-field definition to the insight view (by OID). The response is the created field in public form (same shape as entries in Insight.fields, with an extra name key).
Only formula and lookup types are allowed on insight views; all other field types are rejected with 400.
Requires the Admin scope to invoke.
Insight OID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional, formula only) Expected result type.
(Required for formula) Formula expression.
(Optional) Conditional-format rules. Applicable to date, number, money, duration, lookup, and formula fields whose resultType resolves to one of those.
(Optional) Restrict access to non-guest members only.
(Optional, duration/formula only) Duration display format.
(Optional, date only) Include time-of-day in addition to the date.
(Required for lookup) Map from lookup key to numeric value. Keys are OIDs of the configured lookupType entity (e.g. user OIDs when lookupType=User). Values are numbers.
(Optional, lookup only) Source type for lookup keys. Default: User.
(Optional) Hide this field from the task detail panel.
(Optional, number/money only) Number of decimal digits. -1 means no rounding.
(Optional) Allow multiple values. Applies to select, user, task, and file (always true for file).
(Optional) Clear this field when duplicating a task.
(Required for select) Option list.
Unique name for this field. Must be a non-empty string and must not contain }, ", or \.
Field type. For insight views, only formula and lookup are accepted.
(Optional, number only) Format the value as a percentage.
(Optional, money/formula only) Currency symbol. When omitted on a money field, defaults to $.
Request Example
{
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"name": "Priority",
"type": "number",
"percent": false,
"currency": "USD"
}
OK — created field definition.
Bad Request — body validation failed.
Forbidden — caller lacks permission (or Admin scope required).
Not Found — insight does not exist.
Too Many Requests — custom-field quota reached.
Response Content-Types: application/json
Response Example (200 OK)
{
"name": "Priority",
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"type": "number",
"percent": false,
"currency": "USD"
}
Create an insight view by owner OID.
Adds a new insight view to the specified owner (project, organization, folder, or smart-folder).
Owner type. One of project, organization, folder, or smart-folder. If omitted, project is assumed; e.g., /abc123 is equivalent to /project/abc123.
Owner OID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) Description of the record (Markdown supported).
(Optional) Icon color index from Quire's predefined palette. Two-digit code [0-5][0-7]: first digit 0-5, second digit 0-7 (e.g. 00, 37, 57). NOT a CSS hex color.
(Optional) Icon image identifier.
Display name of the record (Markdown supported).
(Optional) ID for this record. If omitted, Quire generates one automatically. Must be unique within the project.
(Optional) OID of the external team this record belongs to.
(Optional) Target start date.
(Optional) Target due date.
Request Example
{
"description": "**Great** record to start with.",
"iconColor": "37",
"image": "icon-view-kanban",
"name": "Highlight 101",
"id": "Highlight101",
"partner": "rcBHBYXZSiyDRrHrWPutatfF",
"start": "2024-01-02",
"due": "2024-05-25"
}
OK — created insight record.
Bad Request — body validation failed.
Forbidden — caller lacks permission (or Admin scope required).
Not Found — owner does not exist.
Too Many Requests — insight quota reached.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?insight=View101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"fields": "object",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Create an insight view by owner ID.
Adds a new insight view to the specified owner by ID (project, organization, folder, or smart-folder).
Owner type. One of project, organization, folder, or smart-folder. If omitted, project is assumed; e.g., /id/foo is equivalent to /id/project/foo.
Owner ID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) Description of the record (Markdown supported).
(Optional) Icon color index from Quire's predefined palette. Two-digit code [0-5][0-7]: first digit 0-5, second digit 0-7 (e.g. 00, 37, 57). NOT a CSS hex color.
(Optional) Icon image identifier.
Display name of the record (Markdown supported).
(Optional) ID for this record. If omitted, Quire generates one automatically. Must be unique within the project.
(Optional) OID of the external team this record belongs to.
(Optional) Target start date.
(Optional) Target due date.
Request Example
{
"description": "**Great** record to start with.",
"iconColor": "37",
"image": "icon-view-kanban",
"name": "Highlight 101",
"id": "Highlight101",
"partner": "rcBHBYXZSiyDRrHrWPutatfF",
"start": "2024-01-02",
"due": "2024-05-25"
}
OK — created insight record.
Bad Request — body validation failed.
Forbidden — caller lacks permission (or Admin scope required).
Not Found — owner does not exist.
Too Many Requests — insight quota reached.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?insight=View101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"fields": "object",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Get an insight view by ID.
Returns the full insight record for the given owner and insight ID.
Owner type. One of project, organization, folder, or smart-folder. If omitted, project is assumed; e.g., /id/foo is equivalent to /id/project/foo.
Owner ID.
Insight ID.
OK — insight record.
Not Found — insight or owner does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?insight=View101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"fields": "object",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Get an insight view by OID.
Returns the full insight record.
Insight OID.
OK — insight record.
Not Found — insight does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?insight=View101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"fields": "object",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
List insight views by owner ID.
Returns all insight views for the specified owner.
Owner type. One of project, organization, folder, or smart-folder. If omitted, project is assumed; e.g., /list/id/foo is equivalent to /list/id/project/foo.
Owner ID.
OK — list of insight records (may be empty).
Not Found — owner does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"url": "https://quire.io/w/my_project?insight=View101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"fields": "object",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
]
List insight views by owner OID.
Returns all insight views for the specified owner.
Owner type. One of project, organization, folder, or smart-folder. If omitted, project is assumed; e.g., /list/abc123 is equivalent to /list/project/abc123.
Owner OID.
OK — list of insight records (may be empty).
Not Found — owner does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"url": "https://quire.io/w/my_project?insight=View101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"fields": "object",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
]
Reorder a custom-field definition on an insight view by ID.
Reorders a custom-field definition on an insight view, identifying the insight by owner-type + owner ID + insight ID. Pass ?before={otherName} to place the field before another; omit to move it to the end. See also /insight/move-field/{oid}/{fieldName} for the OID form.
Owner type.
Owner ID.
Insight ID.
Name of the field to move.
(Optional) Name of the field to insert before. If omitted, the field is moved to the end.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
OK — moved field definition.
Forbidden — caller lacks permission (or Admin scope required).
Not Found — insight or owner does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"name": "Priority",
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"type": "number",
"percent": false,
"currency": "USD"
}
Reorder a custom-field definition on an insight view.
Moves the named field to a new position. By default the field is moved to the end; pass ?before={otherName} to place it immediately before another field.
Requires the Admin scope to invoke.
Response body is a FieldDefinition with an extra name key (equal to the field's name), or an empty object if the field does not exist or ?before={otherName} refers to a missing field.
Insight OID.
Name of the field to move.
(Optional) Name of the field to insert before. If omitted, the field is moved to the end.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
OK — moved field definition.
Forbidden — caller lacks permission (or Admin scope required).
Not Found — insight does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"name": "Priority",
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"type": "number",
"percent": false,
"currency": "USD"
}
Rename a custom-field definition on an insight view by ID.
Renames a custom-field definition on an insight view, identifying the insight by owner-type + owner ID + insight ID. The field's content is preserved. See also /insight/rename-field/{oid}/{fieldName}/{newName} for the OID form.
Owner type.
Owner ID.
Insight ID.
Current field name.
New field name.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
OK — renamed field definition.
Forbidden — caller lacks permission (or Admin scope required).
Not Found — insight or owner does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"name": "Priority",
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"type": "number",
"percent": false,
"currency": "USD"
}
Rename a custom-field definition on an insight view.
Renames the field in place and returns the renamed field. The field's content is preserved.
Requires the Admin scope to invoke.
Response body is a FieldDefinition with an extra name key (equal to the new name), or an empty object if the source field is missing or the target name is already in use.
Insight OID.
Current field name.
New field name.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
OK — renamed field definition.
Forbidden — caller lacks permission (or Admin scope required).
Not Found — insight does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"name": "Priority",
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"type": "number",
"percent": false,
"currency": "USD"
}
Undo the removal of an insight view by ID.
Restores a previously-removed insight view. Idempotent: if the insight is not currently removed, this is a no-op and returns the current insight record.
Subject to the insight-per-owner quota: may return 429 Too Many Requests if the plan's insight limit is already reached.
Owner type. One of project, organization, folder, or smart-folder. If omitted, project is assumed; e.g., /undo-remove/id/foo/bar is equivalent to /undo-remove/id/project/foo/bar.
Owner ID.
Insight ID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
OK — restored insight record.
Forbidden — caller lacks permission (or Admin scope required).
Not Found — insight or owner does not exist.
Too Many Requests — insight quota reached.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?insight=View101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"fields": "object",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Undo the removal of an insight view by OID.
Restores a previously-removed insight view. Idempotent: if the insight is not currently removed, this is a no-op and returns the current insight record.
Subject to the insight-per-owner quota: may return 429 Too Many Requests if the plan's insight limit is already reached.
OID of the insight to restore.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
OK — restored insight record.
Forbidden — caller lacks permission (or Admin scope required).
Not Found — insight does not exist.
Too Many Requests — insight quota reached.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?insight=View101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"fields": "object",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Update a custom-field definition on an insight view by ID.
Updates an existing custom-field definition on an insight view, identifying the insight by owner-type + owner ID + insight ID. type is immutable; omitted keys preserve current values. See also /insight/update-field/{oid}/{fieldName} for the OID form.
Owner type.
Owner ID.
Insight ID.
Name of the field to update.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional, formula only) Expected result type.
(Optional, formula only) Formula expression.
(Optional) Replacement conditional-format rules (replaces the entire list).
(Optional) Restrict access to non-guest members only.
(Optional, duration/formula only) Duration display format.
(Optional, date only) Include time-of-day in addition to the date.
(Optional, lookup only) Map from lookup key to numeric value. Keys are OIDs of the configured lookupType entity. Replaces the entire map.
(Optional, lookup only) Source type for lookup keys.
(Optional) Hide this field from the task detail panel.
(Optional, number/money only) Number of decimal digits. -1 means no rounding.
(Optional) Allow multiple values. Applies to select, user, task, and file (always true for file).
(Optional) Clear this field when duplicating a task.
(Optional, select only) Replacement option list (replaces the entire set).
(Optional) Field type. Immutable on update — if supplied, must match the existing field's type. Usually omitted; include only to verify the stored type.
(Optional, number only) Format the value as a percentage.
(Optional, money/formula only) Currency symbol. Pass $ to reset a money field to its default.
Request Example
{
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"type": "number",
"percent": false,
"currency": "USD"
}
OK — updated field definition.
Bad Request — body validation failed.
Forbidden — caller lacks permission (or Admin scope required).
Not Found — insight or owner does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"name": "Priority",
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"type": "number",
"percent": false,
"currency": "USD"
}
Update a custom-field definition on an insight view.
Updates the content of an existing custom field. type is immutable — if supplied, it must match the existing type. Keys that are omitted leave their current values intact (including individual flag bits — flags are merged, not replaced).
Requires the Admin scope to invoke.
To rename a field, use /insight/rename-field/id/{ownerType}/{ownerId}/{insightId}/{fieldName}/{newName}; to reorder, use /insight/move-field/id/{ownerType}/{ownerId}/{insightId}/{fieldName}. (The /{oid}/... URL form is also accepted.)
Response body is a FieldDefinition with an extra name key (equal to the field's name), or an empty object if the field does not exist.
Insight OID.
Name of the field to update.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional, formula only) Expected result type.
(Optional, formula only) Formula expression.
(Optional) Replacement conditional-format rules (replaces the entire list).
(Optional) Restrict access to non-guest members only.
(Optional, duration/formula only) Duration display format.
(Optional, date only) Include time-of-day in addition to the date.
(Optional, lookup only) Map from lookup key to numeric value. Keys are OIDs of the configured lookupType entity. Replaces the entire map.
(Optional, lookup only) Source type for lookup keys.
(Optional) Hide this field from the task detail panel.
(Optional, number/money only) Number of decimal digits. -1 means no rounding.
(Optional) Allow multiple values. Applies to select, user, task, and file (always true for file).
(Optional) Clear this field when duplicating a task.
(Optional, select only) Replacement option list (replaces the entire set).
(Optional) Field type. Immutable on update — if supplied, must match the existing field's type. Usually omitted; include only to verify the stored type.
(Optional, number only) Format the value as a percentage.
(Optional, money/formula only) Currency symbol. Pass $ to reset a money field to its default.
Request Example
{
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"type": "number",
"percent": false,
"currency": "USD"
}
OK — updated field definition.
Bad Request — body validation failed.
Forbidden — caller lacks permission (or Admin scope required).
Not Found — insight does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"name": "Priority",
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"type": "number",
"percent": false,
"currency": "USD"
}
Update an insight view by ID.
Updates an existing insight view and returns the updated record.
To archive or unarchive, set archived: true or archived: false in the body.
Owner type. One of project, organization, folder, or smart-folder. If omitted, project is assumed; e.g., /id/foo is equivalent to /id/project/foo.
Owner ID.
Insight ID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) New description for this record (Markdown supported).
(Optional) Archive toggle. Specify true to archive this record; specify false to unarchive.
(Optional) Target start date for this record.
(Optional) Target due date for this record.
(Optional) Icon color index from Quire's predefined palette. Two-digit code [0-5][0-7]: first digit 0-5, second digit 0-7 (e.g. 00, 37, 57). NOT a CSS hex color.
(Optional) Icon image for this record.
(Optional) New display name for this record.
(Optional) New ID for this record.
Request Example
{
"description": "**Great** record to start with.",
"archived": true,
"start": "2024-01-02",
"due": "2024-05-25",
"iconColor": "37",
"image": "icon-view-kanban",
"name": "Highlight 101",
"id": "Highlight101"
}
OK — updated insight record.
Bad Request — body validation failed.
Forbidden — caller lacks permission (or Admin scope required).
Not Found — insight or owner does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?insight=View101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"fields": "object",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Update an insight view by OID.
Updates an existing insight view and returns the updated record.
To archive or unarchive, set archived: true or archived: false in the body.
Insight OID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) New description for this record (Markdown supported).
(Optional) Archive toggle. Specify true to archive this record; specify false to unarchive.
(Optional) Target start date for this record.
(Optional) Target due date for this record.
(Optional) Icon color index from Quire's predefined palette. Two-digit code [0-5][0-7]: first digit 0-5, second digit 0-7 (e.g. 00, 37, 57). NOT a CSS hex color.
(Optional) Icon image for this record.
(Optional) New display name for this record.
(Optional) New ID for this record.
Request Example
{
"description": "**Great** record to start with.",
"archived": true,
"start": "2024-01-02",
"due": "2024-05-25",
"iconColor": "37",
"image": "icon-view-kanban",
"name": "Highlight 101",
"id": "Highlight101"
}
OK — updated insight record.
Bad Request — body validation failed.
Forbidden — caller lacks permission (or Admin scope required).
Not Found — insight does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?insight=View101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"fields": "object",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Remove a custom-field definition from an insight view by ID.
Removes the named custom field from an insight view, identifying the insight by owner-type + owner ID + insight ID. Returns 204 No Content regardless of whether the field exists. See also /insight/remove-field/{oid}/{fieldName} for the OID form.
Owner type.
Owner ID.
Insight ID.
Name of the field to remove.
No Content — field removed (or already absent).
Response Content-Types: application/json
Remove a custom-field definition from an insight view.
Removes the named custom field from the insight view.
Requires the Admin scope to invoke.
Note: Returns
204 No Contentregardless of whether the field exists.
Insight OID.
Name of the field to remove.
No Content — field removed (or already absent).
Response Content-Types: application/json
Delete an insight view by ID.
Deletes the specified insight view.
Note: Returns
204 No Contentregardless of whether the insight exists.
Owner type. One of project, organization, folder, or smart-folder. If omitted, project is assumed; e.g., /id/foo is equivalent to /id/project/foo.
Owner ID.
Insight ID.
No Content
Response Content-Types: application/json
Delete an insight view by OID.
Deletes the specified insight view.
Note: Returns
204 No Contentregardless of whether the insight exists.
Insight OID.
No Content
Response Content-Types: application/json
notification
Send a notification to the user who authorized this app. Typically used to surface errors or important alerts.
Send a notification.
Sends a notification to the current authorized user.
(Optional) URL associated with the message. When provided, the client may render the message as a hyperlink.
Notification message.
Request Example
{
"url": "https://superheros.com/sync",
"message": "Unable to synchronize"
}
ok
Response Content-Types: application/json
organization
An organization is a group of projects where members collaborate.
Get an organization by ID.
Returns the complete organization record for the given ID.
Organization ID.
OK — organization record with plan info.
Not Found — organization does not exist, or is not accessible to the caller.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/c/my_organization",
"email": "[email protected]",
"nameText": "My Organization",
"nameHtml": "My Organization",
"name": "My Organization",
"id": "my_organization",
"website": "https://coolwebsites.com",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"subscription": {
"due": "2038-02-22T02:06:58Z",
"expired": false,
"plan": "Professional"
},
"editedAt": "2018-12-22T02:06:58.158Z",
"followers": [
{
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
Get an organization by OID.
Returns the complete organization record for the given OID.
Organization OID.
OK — organization record with plan info.
Not Found — organization does not exist, or is not accessible to the caller.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/c/my_organization",
"email": "[email protected]",
"nameText": "My Organization",
"nameHtml": "My Organization",
"name": "My Organization",
"id": "my_organization",
"website": "https://coolwebsites.com",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"subscription": {
"due": "2038-02-22T02:06:58Z",
"expired": false,
"plan": "Professional"
},
"editedAt": "2018-12-22T02:06:58.158Z",
"followers": [
{
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
Get all organizations.
Returns organization records that the current user can authorize for this application, or already has authorized.
OK — list of organizations (may be empty).
Response Content-Types: application/json
Response Example (200 OK)
[
{
"url": "https://quire.io/c/my_organization",
"email": "[email protected]",
"nameText": "My Organization",
"nameHtml": "My Organization",
"name": "My Organization",
"id": "my_organization",
"website": "https://coolwebsites.com",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"editedAt": "2018-12-22T02:06:58.158Z",
"followers": [
{
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
]
Update an organization by ID.
Updates an existing organization and returns the complete updated record. Omitted body fields are left unchanged.
Organization ID.
(Optional) Response shape: full (default) for the full organization record, or compact for identifiers only ({"oid":…, "id":…}). See API description for ?return= semantics.
(Optional) New description for this organization (Markdown supported).
(Optional) Followers to replace the current followers of this organization (user OIDs). This replaces all existing followers. To modify incrementally, use addFollowers or removeFollowers.
Accepts the same special values as addFollowers: "me" (the current user) and "app" / "app|team" / "app|team|channel" / "app|/path" (the application).
(Optional) Followers to add to this organization (user OIDs). Special values:
- "me": the current user follows the organization
- "app": the application follows (receives notifications)
App follower syntax:
app|teamorapp|team|channelapp|/path→ appended to the hook URL when invoking the registered hook. Example: hookhttps://super.app/hooks/standard+ followerapp|/soc1/33456/a7→https://super.app/hooks/standard/soc1/33456/a7
(Optional) Followers to remove from this organization (user OIDs). Accepts the same special values as addFollowers: "me" (the current user) and "app" / "app|team" / "app|team|channel" / "app|/path" (the application).
(Optional) New display name for this organization (Markdown supported).
Request Example
{
"description": "**Great** organization to start with.",
"followers": [
"string"
],
"addFollowers": [
"string"
],
"removeFollowers": [
"string"
],
"name": "My Organization"
}
OK — updated organization record.
Bad Request — body validation failed.
Forbidden — caller lacks permission to update this organization.
Not Found — organization does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/c/my_organization",
"email": "[email protected]",
"nameText": "My Organization",
"nameHtml": "My Organization",
"name": "My Organization",
"id": "my_organization",
"website": "https://coolwebsites.com",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"editedAt": "2018-12-22T02:06:58.158Z",
"followers": [
{
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
Update an organization by OID.
Updates an existing organization and returns the complete updated record. Omitted body fields are left unchanged.
Organization OID.
(Optional) Response shape: full (default) for the full organization record, or compact for identifiers only ({"oid":…, "id":…}). See API description for ?return= semantics.
(Optional) New description for this organization (Markdown supported).
(Optional) Followers to replace the current followers of this organization (user OIDs). This replaces all existing followers. To modify incrementally, use addFollowers or removeFollowers.
Accepts the same special values as addFollowers: "me" (the current user) and "app" / "app|team" / "app|team|channel" / "app|/path" (the application).
(Optional) Followers to add to this organization (user OIDs). Special values:
- "me": the current user follows the organization
- "app": the application follows (receives notifications)
App follower syntax:
app|teamorapp|team|channelapp|/path→ appended to the hook URL when invoking the registered hook. Example: hookhttps://super.app/hooks/standard+ followerapp|/soc1/33456/a7→https://super.app/hooks/standard/soc1/33456/a7
(Optional) Followers to remove from this organization (user OIDs). Accepts the same special values as addFollowers: "me" (the current user) and "app" / "app|team" / "app|team|channel" / "app|/path" (the application).
(Optional) New display name for this organization (Markdown supported).
Request Example
{
"description": "**Great** organization to start with.",
"followers": [
"string"
],
"addFollowers": [
"string"
],
"removeFollowers": [
"string"
],
"name": "My Organization"
}
OK — updated organization record.
Bad Request — body validation failed.
Forbidden — caller lacks permission to update this organization.
Not Found — organization does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/c/my_organization",
"email": "[email protected]",
"nameText": "My Organization",
"nameHtml": "My Organization",
"name": "My Organization",
"id": "my_organization",
"website": "https://coolwebsites.com",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"editedAt": "2018-12-22T02:06:58.158Z",
"followers": [
{
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
partner
An external team (aka a partner) is a group of users who can access only the tasks assigned to that team.
Get an external team by OID.
Returns the full external team record for the given OID.
External team OID.
OK — external team record.
Not Found — external team does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"name": "UI design team",
"color": "35",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"project": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
List external teams by project ID.
Returns all external teams in the specified project (by project ID).
Project ID.
OK — list of external teams (may be empty).
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"name": "UI design team",
"color": "35",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"project": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
]
List external teams by project OID.
Returns all external teams in the specified project (by project OID).
Project OID.
OK — list of external teams (may be empty).
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"name": "UI design team",
"color": "35",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"project": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
]
project
A project represents a prioritized list of tasks in Quire. It belongs to a single organization and is accessible to a subset of users in that organization, depending on its permissions.
Add an approval category to a project by ID.
Adds an approval category to the project, identifying the project by its ID. See also /project/add-appv-cat/{oid} for the OID form.
Example:
{
"name": "Legal review",
"claimers": ["[email protected]"],
"approvers": ["[email protected]"]
}
Each entry in
claimers/approversis a user OID, ID, or email — same dispatch as the User custom-field type.
Project ID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) Users allowed to request approval in this category.
- Omit or
null: anyone can request. [](empty list): admins only.- List of user OIDs: those specific users.
(Optional) Users allowed to approve, reject, or request changes in this category.
- Omit or
null: anyone can respond. [](empty list): admins only.- List of user OIDs: those specific users.
Display name.
Category identifier (URL-safe). Must be unique within the project. The identifier "" is reserved for the implicit default category.
Request Example
{
"claimers": [
"string"
],
"approvers": [
"string"
],
"name": "Legal Review",
"id": "legal"
}
OK — created approval category.
Bad Request — body validation failed.
Forbidden — caller lacks permission (Admin scope may be required).
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"name": "Legal Review",
"id": "legal",
"claimers": [
"string"
],
"approvers": [
"string"
],
"createdAt": "2026-04-24T10:00:00.000Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Add an approval category to a project.
Adds a new
approval category to the project. Projects carry an implicit default category (id "") that is always available; use this endpoint to define additional categories with their own claimer / approver rosters.
Requires the Admin scope to invoke.
Project OID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) Users allowed to request approval in this category.
- Omit or
null: anyone can request. [](empty list): admins only.- List of user OIDs: those specific users.
(Optional) Users allowed to approve, reject, or request changes in this category.
- Omit or
null: anyone can respond. [](empty list): admins only.- List of user OIDs: those specific users.
Display name.
Category identifier (URL-safe). Must be unique within the project. The identifier "" is reserved for the implicit default category.
Request Example
{
"claimers": [
"string"
],
"approvers": [
"string"
],
"name": "Legal Review",
"id": "legal"
}
OK — created approval category.
Bad Request — body validation failed.
Forbidden — caller lacks permission (Admin scope may be required).
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"name": "Legal Review",
"id": "legal",
"claimers": [
"string"
],
"approvers": [
"string"
],
"createdAt": "2026-04-24T10:00:00.000Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Add a custom-field definition to a project by ID.
Adds a custom-field definition to the project, identifying the project by its ID. See also /project/add-field/{oid} for the OID form.
Example — a single-select "Priority" field with three options:
{
"name": "Priority",
"type": "select",
"options": ["Low", "Medium", "High"]
}
See FieldDefinition for the full list of supported
typevalues (text,number,money,select,checkbox,date,duration,hyperlink,user,task,formula,lookup) and the type-specific keys each one accepts.
Project ID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional, formula only) Expected result type.
(Required for formula) Formula expression.
(Optional) Conditional-format rules. Applicable to date, number, money, duration, lookup, and formula fields whose resultType resolves to one of those.
(Optional) Restrict access to non-guest members only.
(Optional, duration/formula only) Duration display format.
(Optional, date only) Include time-of-day in addition to the date.
(Required for lookup) Map from lookup key to numeric value. Keys are OIDs of the configured lookupType entity (e.g. user OIDs when lookupType=User). Values are numbers.
(Optional, lookup only) Source type for lookup keys. Default: User.
(Optional) Hide this field from the task detail panel.
(Optional, number/money only) Number of decimal digits. -1 means no rounding.
(Optional) Allow multiple values. Applies to select, user, task, and file (always true for file).
(Optional) Clear this field when duplicating a task.
(Required for select) Option list.
Unique name for this field. Must be a non-empty string and must not contain }, ", or \.
Field type. For insight views, only formula and lookup are accepted.
(Optional, number only) Format the value as a percentage.
(Optional, money/formula only) Currency symbol. When omitted on a money field, defaults to $.
Request Example
{
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"name": "Priority",
"type": "number",
"percent": false,
"currency": "USD"
}
OK — created custom-field definition.
Bad Request — body validation failed.
Forbidden — caller lacks permission (Admin scope may be required).
Not Found — project does not exist.
Too Many Requests — plan's custom-field limit is reached.
Response Content-Types: application/json
Response Example (200 OK)
{
"name": "Priority",
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"type": "number",
"percent": false,
"currency": "USD"
}
Add a custom-field definition to a project.
Adds a new
custom-field definition to the project (by OID). The response is the created field in public form (same shape as entries in Project.fields, with an extra name key).
Requires the Admin scope to invoke.
Project OID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional, formula only) Expected result type.
(Required for formula) Formula expression.
(Optional) Conditional-format rules. Applicable to date, number, money, duration, lookup, and formula fields whose resultType resolves to one of those.
(Optional) Restrict access to non-guest members only.
(Optional, duration/formula only) Duration display format.
(Optional, date only) Include time-of-day in addition to the date.
(Required for lookup) Map from lookup key to numeric value. Keys are OIDs of the configured lookupType entity (e.g. user OIDs when lookupType=User). Values are numbers.
(Optional, lookup only) Source type for lookup keys. Default: User.
(Optional) Hide this field from the task detail panel.
(Optional, number/money only) Number of decimal digits. -1 means no rounding.
(Optional) Allow multiple values. Applies to select, user, task, and file (always true for file).
(Optional) Clear this field when duplicating a task.
(Required for select) Option list.
Unique name for this field. Must be a non-empty string and must not contain }, ", or \.
Field type. For insight views, only formula and lookup are accepted.
(Optional, number only) Format the value as a percentage.
(Optional, money/formula only) Currency symbol. When omitted on a money field, defaults to $.
Request Example
{
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"name": "Priority",
"type": "number",
"percent": false,
"currency": "USD"
}
OK — created custom-field definition.
Bad Request — body validation failed.
Forbidden — caller lacks permission (Admin scope may be required).
Not Found — project does not exist.
Too Many Requests — plan's custom-field limit is reached.
Response Content-Types: application/json
Response Example (200 OK)
{
"name": "Priority",
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"type": "number",
"percent": false,
"currency": "USD"
}
Export a project to CSV by ID.
Returns a CSV string containing the project, tasks, and related data. Available on the Professional plan and above.
Rate-limit cost (#24558): proportional to the project's task count — max(1, ceil(tasks / 100)) units. So a 50-task project costs 1, a 1,000-task project costs 10. (Plus a small fixed export overhead.)
Project ID.
Task status filter. Use active for active tasks, completed for completed tasks, or all for all tasks. Default: all.
Whether to merge multiple values of the same header into one column (e.g., all tags in a single column). Default: false.
OK — CSV export of project.
Forbidden — caller lacks permission or plan does not include CSV export.
Not Found — project does not exist.
Response Content-Types: text/csv
Response Example (200 OK)
"ID",Name,Status,Started,Completed,Priority,Start,Due,Assignee,Tag,Created,Created by,Description
#6,Task A,In Progress,"Mar 8, 2022",,Medium,,"Mar 8, 2022",,,"Mar 7, 2022",John,
"#6, #8",Task A1,To-Do,"Jan 24, 2022",,Urgent,,,,,"Mar 7, 2022",John,
#7,Task B,In Progress,"Jan 24, 2022",,Urgent,,"Mar 4, 2022",,,"Mar 7, 2022",John,
"#7, #9",Task B1,In Progress,"Jan 24, 2022",,Medium,,,,,"Mar 7, 2022",John,
"#7, #4",Task B2,In Progress,"Mar 2, 2022",,Medium,,"Mar 8, 2022",,,"Mar 2, 2022",John,
Export a project to CSV by OID.
Returns a CSV string containing the project, tasks, and related data. Available on the Professional plan and above.
Rate-limit cost (#24558): proportional to the project's task count — max(1, ceil(tasks / 100)) units. So a 50-task project costs 1, a 1,000-task project costs 10. (Plus a small fixed export overhead.)
Project OID.
Task status filter. Use active for active tasks, completed for completed tasks, or all for all tasks. Default: all.
Whether to merge multiple values of the same header into one column (e.g., all tags in a single column). Default: false.
OK — CSV export of project.
Forbidden — caller lacks permission or plan does not include CSV export.
Not Found — project does not exist.
Response Content-Types: text/csv
Response Example (200 OK)
"ID",Name,Status,Started,Completed,Priority,Start,Due,Assignee,Tag,Created,Created by,Description
#6,Task A,In Progress,"Mar 8, 2022",,Medium,,"Mar 8, 2022",,,"Mar 7, 2022",John,
"#6, #8",Task A1,To-Do,"Jan 24, 2022",,Urgent,,,,,"Mar 7, 2022",John,
#7,Task B,In Progress,"Jan 24, 2022",,Urgent,,"Mar 4, 2022",,,"Mar 7, 2022",John,
"#7, #9",Task B1,In Progress,"Jan 24, 2022",,Medium,,,,,"Mar 7, 2022",John,
"#7, #4",Task B2,In Progress,"Mar 2, 2022",,Medium,,"Mar 8, 2022",,,"Mar 2, 2022",John,
Export a project to JSON by ID.
Returns a JSON map containing the project, all tasks, and related data. Available on the Professional plan and above.
Rate-limit cost (#24558): proportional to the project's task count — max(1, ceil(tasks / 100)) units. So a 50-task project costs 1, a 1,000-task project costs 10. (Plus a small fixed export overhead.)
Project ID.
OK — JSON export of project.
Forbidden — caller lacks permission or plan does not include JSON export.
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"name": "My Project",
"id": "My_Project"
}
Export a project to JSON by OID.
Returns a JSON map containing the project, all tasks, and related data. Available on the Professional plan and above.
Rate-limit cost (#24558): proportional to the project's task count — max(1, ceil(tasks / 100)) units. So a 50-task project costs 1, a 1,000-task project costs 10. (Plus a small fixed export overhead.)
Project OID.
OK — JSON export of project.
Forbidden — caller lacks permission or plan does not include JSON export.
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"name": "My Project",
"id": "My_Project"
}
Get a project by ID.
Returns the complete project record for the given ID.
Project ID.
OK — project record.
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"rootCount": 5,
"url": "https://quire.io/w/my_project",
"nameText": "My Project",
"nameHtml": "My Project",
"activeCount": 20,
"taskCount": 30,
"organization": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"name": "My Project",
"id": "my_project",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"subscription": {
"due": "2038-02-22T02:06:58Z",
"expired": false,
"plan": "Professional"
},
"archivedAt": "2018-12-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"publicAt": "2018-12-22T02:06:58.158Z",
"editedAt": "2018-12-22T02:06:58.158Z",
"followers": [
"#/definitions/SimpleIdentity"
],
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"approvalCategories": [
{
"name": "Legal Review",
"id": "legal",
"claimers": [
"string"
],
"approvers": [
"string"
],
"createdAt": "2026-04-24T10:00:00.000Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"fields": "object",
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
Get a project by OID.
Returns the complete project record for the given OID.
Project OID.
OK — project record.
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"rootCount": 5,
"url": "https://quire.io/w/my_project",
"nameText": "My Project",
"nameHtml": "My Project",
"activeCount": 20,
"taskCount": 30,
"organization": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"name": "My Project",
"id": "my_project",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"subscription": {
"due": "2038-02-22T02:06:58Z",
"expired": false,
"plan": "Professional"
},
"archivedAt": "2018-12-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"publicAt": "2018-12-22T02:06:58.158Z",
"editedAt": "2018-12-22T02:06:58.158Z",
"followers": [
"#/definitions/SimpleIdentity"
],
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"approvalCategories": [
{
"name": "Legal Review",
"id": "legal",
"claimers": [
"string"
],
"approvers": [
"string"
],
"createdAt": "2026-04-24T10:00:00.000Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"fields": "object",
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
Get all authorized projects.
Returns projects that the current user has authorized for this application.
Whether to include archived projects. By default, archived projects are excluded. If the parameter is present without a value, true is assumed.
Whether to return only projects to which you can add tasks. Default: false. If the parameter is present without a value, true is assumed.
OK — list of authorized projects (may be empty).
Response Content-Types: application/json
Response Example (200 OK)
[
{
"rootCount": 5,
"url": "https://quire.io/w/my_project",
"nameText": "My Project",
"nameHtml": "My Project",
"activeCount": 20,
"taskCount": 30,
"organization": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"name": "My Project",
"id": "my_project",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"archivedAt": "2018-12-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"publicAt": "2018-12-22T02:06:58.158Z",
"editedAt": "2018-12-22T02:06:58.158Z",
"followers": [
"#/definitions/SimpleIdentity"
],
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"approvalCategories": [
{
"name": "Legal Review",
"id": "legal",
"claimers": [
"string"
],
"approvers": [
"string"
],
"createdAt": "2026-04-24T10:00:00.000Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"fields": "object",
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
]
Get authorized projects by organization ID.
Returns projects in the specified organization (by ID) that the current user has authorized.
Organization ID.
Whether to include archived projects. By default, archived projects are excluded. If the parameter is present without a value, true is assumed.
Whether to return only projects to which you can add tasks. Default: false. If the parameter is present without a value, true is assumed.
OK — list of authorized projects (may be empty).
Not Found — organization does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"rootCount": 5,
"url": "https://quire.io/w/my_project",
"nameText": "My Project",
"nameHtml": "My Project",
"activeCount": 20,
"taskCount": 30,
"organization": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"name": "My Project",
"id": "my_project",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"archivedAt": "2018-12-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"publicAt": "2018-12-22T02:06:58.158Z",
"editedAt": "2018-12-22T02:06:58.158Z",
"followers": [
"#/definitions/SimpleIdentity"
],
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"approvalCategories": [
{
"name": "Legal Review",
"id": "legal",
"claimers": [
"string"
],
"approvers": [
"string"
],
"createdAt": "2026-04-24T10:00:00.000Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"fields": "object",
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
]
Get authorized projects by organization OID.
Returns projects in the specified organization (by OID) that the current user has authorized.
Organization OID.
Whether to include archived projects. By default, archived projects are excluded. If the parameter is present without a value, true is assumed.
Whether to return only projects to which you can add tasks. Default: false. If the parameter is present without a value, true is assumed.
OK — list of authorized projects (may be empty).
Not Found — organization does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"rootCount": 5,
"url": "https://quire.io/w/my_project",
"nameText": "My Project",
"nameHtml": "My Project",
"activeCount": 20,
"taskCount": 30,
"organization": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"name": "My Project",
"id": "my_project",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"archivedAt": "2018-12-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"publicAt": "2018-12-22T02:06:58.158Z",
"editedAt": "2018-12-22T02:06:58.158Z",
"followers": [
"#/definitions/SimpleIdentity"
],
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"approvalCategories": [
{
"name": "Legal Review",
"id": "legal",
"claimers": [
"string"
],
"approvers": [
"string"
],
"createdAt": "2026-04-24T10:00:00.000Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"fields": "object",
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
]
Reorder a custom-field definition on a project by ID.
Reorders a custom-field definition on the project, identifying the project by its ID. Pass ?before={otherName} to place the field before another; omit to move it to the end. See also /project/move-field/{oid}/{fieldName} for the OID form.
Project ID.
Name of the field to move.
(Optional) Name of the field to insert before. If omitted, the field is moved to the end.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
OK — moved custom-field definition.
Forbidden — caller lacks permission (Admin scope may be required).
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"name": "Priority",
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"type": "number",
"percent": false,
"currency": "USD"
}
Reorder a custom-field definition on a project.
Moves the named field to a new position. By default the field is moved to the end; pass ?before={otherName} to place it immediately before another field.
Requires the Admin scope to invoke.
Response body is a FieldDefinition with an extra name key (equal to the field's name), or an empty object if the field does not exist or ?before={otherName} refers to a missing field.
Project OID.
Name of the field to move.
(Optional) Name of the field to insert before. If omitted, the field is moved to the end.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
OK — moved custom-field definition.
Forbidden — caller lacks permission (Admin scope may be required).
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"name": "Priority",
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"type": "number",
"percent": false,
"currency": "USD"
}
Rename a custom-field definition on a project by ID.
Renames a custom-field definition on the project, identifying the project by its ID. The field's content is preserved; task values under the old name are migrated to the new name. See also /project/rename-field/{oid}/{fieldName}/{newName} for the OID form.
Project ID.
Current field name.
New field name.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
OK — renamed custom-field definition.
Forbidden — caller lacks permission (Admin scope may be required).
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"name": "Priority",
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"type": "number",
"percent": false,
"currency": "USD"
}
Rename a custom-field definition on a project.
Renames the field in place and returns the renamed field. The field's content is preserved; any task values under the old name are migrated to the new name.
Requires the Admin scope to invoke.
Response body is a FieldDefinition with an extra name key (equal to the new name), or an empty object if the source field is missing or the target name is already in use.
Project OID.
Current field name.
New field name.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
OK — renamed custom-field definition.
Forbidden — caller lacks permission (Admin scope may be required).
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"name": "Priority",
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"type": "number",
"percent": false,
"currency": "USD"
}
Update an approval category on a project by ID.
Updates an approval category on the project, identifying the project by its ID. Partial update — omitted keys preserve their current values; at least one of name, claimers, or approvers must be present. See also /project/update-appv-cat/{oid}/{catId} for the OID form.
Project ID.
Category id.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) New claimers list — users allowed to request approval in this category.
null: anyone can request.[](empty list): admins only.- List of user OIDs: those specific users.
(Optional) New approvers list — users allowed to approve, reject, or request changes in this category.
null: anyone can respond.[](empty list): admins only.- List of user OIDs: those specific users.
(Optional) New display name.
Request Example
{
"claimers": [
"string"
],
"approvers": [
"string"
],
"name": "Legal Review"
}
OK — updated approval category.
Bad Request — body validation failed.
Forbidden — caller lacks permission (Admin scope may be required).
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"name": "Legal Review",
"id": "legal",
"claimers": [
"string"
],
"approvers": [
"string"
],
"createdAt": "2026-04-24T10:00:00.000Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Update an approval category on a project.
Partial update: any of name, claimers, or approvers may be supplied; omitted keys preserve their current values. At least one key must be present.
Requires the Admin scope to invoke.
Response body is the updated category, or an empty object if the category no longer exists (e.g. removed concurrently).
Project OID.
Category id.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) New claimers list — users allowed to request approval in this category.
null: anyone can request.[](empty list): admins only.- List of user OIDs: those specific users.
(Optional) New approvers list — users allowed to approve, reject, or request changes in this category.
null: anyone can respond.[](empty list): admins only.- List of user OIDs: those specific users.
(Optional) New display name.
Request Example
{
"claimers": [
"string"
],
"approvers": [
"string"
],
"name": "Legal Review"
}
OK — updated approval category.
Bad Request — body validation failed.
Forbidden — caller lacks permission (Admin scope may be required).
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"name": "Legal Review",
"id": "legal",
"claimers": [
"string"
],
"approvers": [
"string"
],
"createdAt": "2026-04-24T10:00:00.000Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Update a custom-field definition on a project by ID.
Updates an existing custom-field definition on the project, identifying the project by its ID. type is immutable; omitted keys preserve their current values (flags are merged). See also /project/update-field/{oid}/{fieldName} for the OID form.
Project ID.
Name of the field to update.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional, formula only) Expected result type.
(Optional, formula only) Formula expression.
(Optional) Replacement conditional-format rules (replaces the entire list).
(Optional) Restrict access to non-guest members only.
(Optional, duration/formula only) Duration display format.
(Optional, date only) Include time-of-day in addition to the date.
(Optional, lookup only) Map from lookup key to numeric value. Keys are OIDs of the configured lookupType entity. Replaces the entire map.
(Optional, lookup only) Source type for lookup keys.
(Optional) Hide this field from the task detail panel.
(Optional, number/money only) Number of decimal digits. -1 means no rounding.
(Optional) Allow multiple values. Applies to select, user, task, and file (always true for file).
(Optional) Clear this field when duplicating a task.
(Optional, select only) Replacement option list (replaces the entire set).
(Optional) Field type. Immutable on update — if supplied, must match the existing field's type. Usually omitted; include only to verify the stored type.
(Optional, number only) Format the value as a percentage.
(Optional, money/formula only) Currency symbol. Pass $ to reset a money field to its default.
Request Example
{
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"type": "number",
"percent": false,
"currency": "USD"
}
OK — updated custom-field definition.
Bad Request — body validation failed.
Forbidden — caller lacks permission (Admin scope may be required).
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"name": "Priority",
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"type": "number",
"percent": false,
"currency": "USD"
}
Update a custom-field definition on a project.
Updates the content of an existing custom field. type is immutable — if supplied, it must match the existing type. Keys that are omitted leave their current values intact (including individual flag bits — flags are merged, not replaced).
Requires the Admin scope to invoke.
To rename a field, use /project/rename-field/id/{projectId}/{fieldName}/{newName}; to reorder, use /project/move-field/id/{projectId}/{fieldName}. (The /{oid}/... URL form is also accepted.)
Response body is a FieldDefinition with an extra name key (equal to the field's name), or an empty object if the field does not exist.
Project OID.
Name of the field to update.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional, formula only) Expected result type.
(Optional, formula only) Formula expression.
(Optional) Replacement conditional-format rules (replaces the entire list).
(Optional) Restrict access to non-guest members only.
(Optional, duration/formula only) Duration display format.
(Optional, date only) Include time-of-day in addition to the date.
(Optional, lookup only) Map from lookup key to numeric value. Keys are OIDs of the configured lookupType entity. Replaces the entire map.
(Optional, lookup only) Source type for lookup keys.
(Optional) Hide this field from the task detail panel.
(Optional, number/money only) Number of decimal digits. -1 means no rounding.
(Optional) Allow multiple values. Applies to select, user, task, and file (always true for file).
(Optional) Clear this field when duplicating a task.
(Optional, select only) Replacement option list (replaces the entire set).
(Optional) Field type. Immutable on update — if supplied, must match the existing field's type. Usually omitted; include only to verify the stored type.
(Optional, number only) Format the value as a percentage.
(Optional, money/formula only) Currency symbol. Pass $ to reset a money field to its default.
Request Example
{
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"type": "number",
"percent": false,
"currency": "USD"
}
OK — updated custom-field definition.
Bad Request — body validation failed.
Forbidden — caller lacks permission (Admin scope may be required).
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"name": "Priority",
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"type": "number",
"percent": false,
"currency": "USD"
}
Update a project by ID.
Updates an existing project and returns the complete updated record.
To archive or unarchive, set archived: true or archived: false in the body.
Project ID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) New description for this project (Markdown supported).
(Optional) Archive toggle. Specify true to archive this project; specify false to unarchive.
(Optional) Target start date for this project.
(Optional) Target due date for this project.
(Optional) Followers to replace the current followers of this project (user OIDs). This replaces all existing followers. To modify incrementally, use addFollowers or removeFollowers.
Accepts the same special values as addFollowers: "me" (the current user) and "app" / "app|team" / "app|team|channel" / "app|/path" (the application).
(Optional) Followers to add to this project (user OIDs). Special values:
- "me": the current user follows the project
- "app": the application follows (receives notifications)
App follower syntax:
app|teamorapp|team|channelapp|/path→ appended to the hook URL when invoking the registered hook. Example: hookhttps://super.app/hooks/standard+ followerapp|/soc1/33456/a7→https://super.app/hooks/standard/soc1/33456/a7
(Optional) Followers to remove from this project (user OIDs). Accepts the same special values as addFollowers: "me" (the current user) and "app" / "app|team" / "app|team|channel" / "app|/path" (the application).
(Optional) Public toggle. Specify true to make this project public; specify false to make it private.
(Optional) New display name for this project (Markdown supported).
Request Example
{
"description": "**Great** project to start with.",
"archived": true,
"start": "2024-01-02",
"due": "2024-05-25",
"followers": [
"tzufRLqCnud74dARyDSvjWDl",
"app"
],
"addFollowers": [
"sfsvLbDVPvi1QMf2GkDn7VSy"
],
"removeFollowers": [
"aBuz4MwfZ5CasOae6stnFa2f"
],
"public": true,
"name": "My Project"
}
OK — updated project record.
Bad Request — body validation failed.
Forbidden — caller lacks permission (Admin scope may be required).
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"rootCount": 5,
"url": "https://quire.io/w/my_project",
"nameText": "My Project",
"nameHtml": "My Project",
"activeCount": 20,
"taskCount": 30,
"organization": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"name": "My Project",
"id": "my_project",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"archivedAt": "2018-12-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"publicAt": "2018-12-22T02:06:58.158Z",
"editedAt": "2018-12-22T02:06:58.158Z",
"followers": [
"#/definitions/SimpleIdentity"
],
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"approvalCategories": [
{
"name": "Legal Review",
"id": "legal",
"claimers": [
"string"
],
"approvers": [
"string"
],
"createdAt": "2026-04-24T10:00:00.000Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"fields": "object",
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
Update a project by OID.
Updates an existing project and returns the complete updated record.
To archive or unarchive, set archived: true or archived: false in the body.
Project OID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) New description for this project (Markdown supported).
(Optional) Archive toggle. Specify true to archive this project; specify false to unarchive.
(Optional) Target start date for this project.
(Optional) Target due date for this project.
(Optional) Followers to replace the current followers of this project (user OIDs). This replaces all existing followers. To modify incrementally, use addFollowers or removeFollowers.
Accepts the same special values as addFollowers: "me" (the current user) and "app" / "app|team" / "app|team|channel" / "app|/path" (the application).
(Optional) Followers to add to this project (user OIDs). Special values:
- "me": the current user follows the project
- "app": the application follows (receives notifications)
App follower syntax:
app|teamorapp|team|channelapp|/path→ appended to the hook URL when invoking the registered hook. Example: hookhttps://super.app/hooks/standard+ followerapp|/soc1/33456/a7→https://super.app/hooks/standard/soc1/33456/a7
(Optional) Followers to remove from this project (user OIDs). Accepts the same special values as addFollowers: "me" (the current user) and "app" / "app|team" / "app|team|channel" / "app|/path" (the application).
(Optional) Public toggle. Specify true to make this project public; specify false to make it private.
(Optional) New display name for this project (Markdown supported).
Request Example
{
"description": "**Great** project to start with.",
"archived": true,
"start": "2024-01-02",
"due": "2024-05-25",
"followers": [
"tzufRLqCnud74dARyDSvjWDl",
"app"
],
"addFollowers": [
"sfsvLbDVPvi1QMf2GkDn7VSy"
],
"removeFollowers": [
"aBuz4MwfZ5CasOae6stnFa2f"
],
"public": true,
"name": "My Project"
}
OK — updated project record.
Bad Request — body validation failed.
Forbidden — caller lacks permission (Admin scope may be required).
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"rootCount": 5,
"url": "https://quire.io/w/my_project",
"nameText": "My Project",
"nameHtml": "My Project",
"activeCount": 20,
"taskCount": 30,
"organization": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"name": "My Project",
"id": "my_project",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"archivedAt": "2018-12-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"publicAt": "2018-12-22T02:06:58.158Z",
"editedAt": "2018-12-22T02:06:58.158Z",
"followers": [
"#/definitions/SimpleIdentity"
],
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"approvalCategories": [
{
"name": "Legal Review",
"id": "legal",
"claimers": [
"string"
],
"approvers": [
"string"
],
"createdAt": "2026-04-24T10:00:00.000Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"fields": "object",
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
Remove an approval category from a project by ID.
Removes an approval category from the project, identifying the project by its ID. Any task whose approval references this category has its approval cleared. Returns 204 No Content regardless of whether the category exists. See also /project/remove-appv-cat/{oid}/{catId} for the OID form.
Project ID.
Category id.
No Content — category removed (or already absent).
Response Content-Types: application/json
Remove an approval category from a project.
Removes the named category. Any task whose approval references this category has its approval cleared.
Requires the Admin scope to invoke.
Note: Returns
204 No Contentregardless of whether the category exists.
Project OID.
Category id.
No Content — category removed (or already absent).
Response Content-Types: application/json
Remove a custom-field definition from a project by ID.
Removes the named custom field from the project, identifying the project by its ID. Returns 204 No Content regardless of whether the field exists. See also /project/remove-field/{oid}/{fieldName} for the OID form.
Project ID.
Name of the field to remove.
No Content — field removed (or already absent).
Response Content-Types: application/json
Remove a custom-field definition from a project.
Removes the named custom field from the project.
Requires the Admin scope to invoke.
Note: Returns
204 No Contentregardless of whether the field exists.
Project OID.
Name of the field to remove.
No Content — field removed (or already absent).
Response Content-Types: application/json
rate_limit
Inspect the current API rate-limit usage for an organization. Calls to this endpoint do not count against the rate limit, so you can query it even when you have been throttled.
Get rate-limit usage by organization ID.
Returns the current per-hour and per-minute API usage for the organization with the given ID. For organizations in a paid master group, counters are shared across all organizations in the group.
Organization ID.
OK — current rate-limit counters.
Not Found — organization does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"plan": "Enterprise",
"organization": "YxjapXXRCOYxoaiCT4tT3OQm",
"hour": {
"reset": 1774863600,
"used": 42,
"limit": 1250,
"remaining": 1208
},
"minute": "#/definitions/RateLimitBucket"
}
Get rate-limit usage by organization OID.
Returns the current per-hour and per-minute API usage for the organization with the given OID. For organizations in a paid master group, counters are shared across all organizations in the group.
Organization OID.
OK — current rate-limit counters.
Not Found — organization does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"plan": "Enterprise",
"organization": "YxjapXXRCOYxoaiCT4tT3OQm",
"hour": {
"reset": 1774863600,
"used": 42,
"limit": 1250,
"remaining": 1208
},
"minute": "#/definitions/RateLimitBucket"
}
status
Task statuses represent progress values for tasks.
Add a new task status (by project OID).
Creates a new task status in the specified project.
Project OID to add the status to.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) Status color index from Quire’s predefined palette. If omitted, a color will be generated automatically. Two-digit code: first digit 0–5, second digit 0–7 (e.g., 35).
Display name of the status.
Non-negative integer indicating progress. Must be unique within its context (e.g., project). Values ≥ 100 are treated as completed.
Request Example
{
"color": "35",
"name": "Doing",
"value": 50
}
OK — newly created status.
Bad Request — body validation failed.
Forbidden — caller lacks permission to modify the project.
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"color": "35",
"name": "Doing",
"value": 50
}
Add a new task status (by project ID).
Creates a new task status in the specified project.
Project ID to add the status to.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) Status color index from Quire’s predefined palette. If omitted, a color will be generated automatically. Two-digit code: first digit 0–5, second digit 0–7 (e.g., 35).
Display name of the status.
Non-negative integer indicating progress. Must be unique within its context (e.g., project). Values ≥ 100 are treated as completed.
Request Example
{
"color": "35",
"name": "Doing",
"value": 50
}
OK — newly created status.
Bad Request — body validation failed.
Forbidden — caller lacks permission to modify the project.
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"color": "35",
"name": "Doing",
"value": 50
}
Get a task status by value (project OID).
Returns the status record matching the given value in the specified project.
Project OID.
Status value to fetch.
OK — status record.
Not Found — project or status does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"color": "35",
"name": "Doing",
"value": 50
}
Get a task status by value (project ID).
Returns the status record matching the given value in the specified project.
Project ID.
Status value to fetch.
OK — status record.
Not Found — project or status does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"color": "35",
"name": "Doing",
"value": 50
}
List all statuses (by project ID).
Returns all status records in the specified project.
Project ID.
OK — list of statuses (may be empty).
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"color": "35",
"name": "Doing",
"value": 50
}
]
List all statuses (by project OID).
Returns all status records in the specified project.
Project OID.
OK — list of statuses (may be empty).
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"color": "35",
"name": "Doing",
"value": 50
}
]
Update a task status (by project OID).
Updates an existing status and returns the complete updated record. Omitted body fields are left unchanged.
Project OID.
Status value to update.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) Status color index from Quire’s predefined palette (two digits: first 0–5, second 0–7; e.g., 35).
(Optional) New display name for the status.
(Optional) New numeric status value. Non-negative integer indicating progress. Must be unique within the context (e.g., project). Values ≥ 100 are treated as completed.
Request Example
{
"color": "35",
"name": "Later",
"value": 50
}
OK — updated status record.
Bad Request — body validation failed.
Forbidden — caller lacks permission to modify the project.
Not Found — project or status does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"color": "35",
"name": "Doing",
"value": 50
}
Update a task status (by project ID).
Updates an existing status and returns the complete updated record. Omitted body fields are left unchanged.
Project ID.
Status value to update.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) Status color index from Quire’s predefined palette (two digits: first 0–5, second 0–7; e.g., 35).
(Optional) New display name for the status.
(Optional) New numeric status value. Non-negative integer indicating progress. Must be unique within the context (e.g., project). Values ≥ 100 are treated as completed.
Request Example
{
"color": "35",
"name": "Later",
"value": 50
}
OK — updated status record.
Bad Request — body validation failed.
Forbidden — caller lacks permission to modify the project.
Not Found — project or status does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"color": "35",
"name": "Doing",
"value": 50
}
Delete a task status (by project OID).
Deletes the specified status.
Note: Returns
204 No Contentregardless of whether the status exists.
Project OID.
Status value to delete.
No Content
Response Content-Types: application/json
Delete a task status (by project ID).
Deletes the specified status.
Note: Returns
204 No Contentregardless of whether the status exists.
Project ID.
Status value to delete.
No Content
Response Content-Types: application/json
storage
A simple key–value storage for application-specific data. Data is scoped to the current access token and will be deleted when the token is revoked or expires.
Get a stored value.
Returns the application-specific value stored under the given name. Note: values are scoped per access token.
The key name.
OK — stored value.
Not Found — no value stored under this key for the current access token.
Response Content-Types: application/json
Response Example (200 OK)
{
"key": "My data"
}
List all stored entries.
Returns all stored entries (up to 20) for the current access token.
OK — list of stored entries (may be empty).
Response Content-Types: application/json
Response Example (200 OK)
{
"currentProject": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"myList": "[\"alpha\", \"beta\", \"gamma\"]",
"latest": {
"key": "My data"
}
}
List stored entries by prefix.
Returns up to 20 entries whose keys start with the given prefix. Use this to page or group application-specific values by a common key prefix.
Key prefix to match.
OK — list of matching entries (may be empty).
Response Content-Types: application/json
Response Example (200 OK)
{
"currentProject": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"myList": "[\"alpha\", \"beta\", \"gamma\"]",
"latest": {
"key": "My data"
}
}
Create or update a stored value.
Creates or replaces the value stored under the given name. If null is provided as the value, the key will be deleted. Note: values are scoped per access token.
The key name.
Value stored under the given key.
Request Example
{
"key": "My data"
}
No Content — value stored (or deleted if null).
Bad Request — payload too large, or malformed JSON.
Response Content-Types: application/json
Delete a stored value.
Deletes the value stored under the given name.
Note: Returns
204 No Contentregardless of whether the value exists. Also note: values are scoped per access token.
The key name.
No Content
Response Content-Types: application/json
sublist
A sublist is a collection of tasks, representing a subset of tasks from a larger scope.
Create a sublist by owner OID.
Creates a new sublist under the specified owner (by OID).
Owner type. One of project, organization, folder, or smart-folder. If omitted, project is assumed. For example, /abc123 is equivalent to /project/abc123.
OID of the owner the new sublist will belong to.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) List of task OIDs to include in this sublist. All descendants of the specified tasks will be included as well.
(Optional) Description of the record (Markdown supported).
(Optional) Icon color index from Quire's predefined palette. Two-digit code [0-5][0-7]: first digit 0-5, second digit 0-7 (e.g. 00, 37, 57). NOT a CSS hex color.
(Optional) Icon image identifier.
Display name of the record (Markdown supported).
(Optional) ID for this record. If omitted, Quire generates one automatically. Must be unique within the project.
(Optional) OID of the external team this record belongs to.
(Optional) Target start date.
(Optional) Target due date.
Request Example
{
"includes": [
"string"
],
"description": "**Great** record to start with.",
"iconColor": "37",
"image": "icon-view-kanban",
"name": "Highlight 101",
"id": "Highlight101",
"partner": "rcBHBYXZSiyDRrHrWPutatfF",
"start": "2024-01-02",
"due": "2024-05-25"
}
OK — created sublist record.
Bad Request — body validation failed.
Forbidden — caller lacks permission to create a sublist under this owner.
Not Found — owner does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?sublist=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Create a sublist by owner ID.
Creates a new sublist under the specified owner (by ID).
Owner type. One of project, organization, folder, or smart-folder. If omitted, project is assumed. For example, /id/foo is equivalent to /id/project/foo.
ID of the owner the new sublist will belong to.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) List of task OIDs to include in this sublist. All descendants of the specified tasks will be included as well.
(Optional) Description of the record (Markdown supported).
(Optional) Icon color index from Quire's predefined palette. Two-digit code [0-5][0-7]: first digit 0-5, second digit 0-7 (e.g. 00, 37, 57). NOT a CSS hex color.
(Optional) Icon image identifier.
Display name of the record (Markdown supported).
(Optional) ID for this record. If omitted, Quire generates one automatically. Must be unique within the project.
(Optional) OID of the external team this record belongs to.
(Optional) Target start date.
(Optional) Target due date.
Request Example
{
"includes": [
"string"
],
"description": "**Great** record to start with.",
"iconColor": "37",
"image": "icon-view-kanban",
"name": "Highlight 101",
"id": "Highlight101",
"partner": "rcBHBYXZSiyDRrHrWPutatfF",
"start": "2024-01-02",
"due": "2024-05-25"
}
OK — created sublist record.
Bad Request — body validation failed.
Forbidden — caller lacks permission to create a sublist under this owner.
Not Found — owner does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?sublist=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Get a sublist by ID.
Returns the complete sublist record for the given ID.
Owner type. One of project, organization, folder, or smart-folder. If omitted, project is assumed. For example, /id/foo is equivalent to /id/project/foo.
ID of the owner the sublist belongs to.
ID of the sublist.
OK — sublist record.
Not Found — sublist does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?sublist=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Get a sublist by OID.
Returns the complete sublist record for the given OID.
OID of the sublist.
OK — sublist record.
Not Found — sublist does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?sublist=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
List sublists by owner ID.
Returns all sublists under the specified owner (by ID).
Owner type. One of project, organization, folder, or smart-folder. If omitted, project is assumed. For example, /list/id/foo is equivalent to /list/id/project/foo.
ID of the owner.
OK — list of sublist records (may be empty).
Not Found — owner does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"url": "https://quire.io/w/my_project?sublist=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
]
List sublists by owner OID.
Returns all sublists under the specified owner (by OID).
Owner type. One of project, organization, folder, or smart-folder. If omitted, project is assumed. For example, /list/abc123 is equivalent to /list/project/abc123.
OID of the owner.
OK — list of sublist records (may be empty).
Not Found — owner does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"url": "https://quire.io/w/my_project?sublist=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
]
Undo the removal of a sublist by ID.
Restores a previously-removed sublist. Idempotent: if the sublist is not currently removed, this is a no-op and returns the current sublist record.
Subject to the sublist-per-owner quota: may return 429 Too Many Requests if the plan's sublist limit is already reached.
Owner type. One of project, organization, folder, or smart-folder. If omitted, project is assumed. For example, /undo-remove/id/foo/bar is equivalent to /undo-remove/id/project/foo/bar.
ID of the owner.
ID of the sublist to restore.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
OK — restored sublist record.
Forbidden — caller lacks permission to restore this sublist.
Not Found — sublist does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?sublist=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Undo the removal of a sublist by OID.
Restores a previously-removed sublist. Idempotent: if the sublist is not currently removed, this is a no-op and returns the current sublist record.
Subject to the sublist-per-owner quota: may return 429 Too Many Requests if the plan's sublist limit is already reached.
OID of the sublist to restore.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
OK — restored sublist record.
Forbidden — caller lacks permission to restore this sublist.
Not Found — sublist does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?sublist=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Update a sublist by ID.
Updates an existing sublist and returns the complete updated record.
To archive or unarchive, set archived: true or archived: false in the body.
Owner type. One of project, organization, folder, or smart-folder. If omitted, project is assumed. For example, /id/foo is equivalent to /id/project/foo.
ID of the owner.
ID of the sublist to update.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) List of changes that add or remove tasks from this sublist. See Change for the operation schema.
(Optional) New description for this record (Markdown supported).
(Optional) Archive toggle. Specify true to archive this record; specify false to unarchive.
(Optional) Target start date for this record.
(Optional) Target due date for this record.
(Optional) Icon color index from Quire's predefined palette. Two-digit code [0-5][0-7]: first digit 0-5, second digit 0-7 (e.g. 00, 37, 57). NOT a CSS hex color.
(Optional) Icon image for this record.
(Optional) New display name for this record.
(Optional) New ID for this record.
Request Example
{
"changes": [
{
"exclude": false,
"single": false,
"task": "2MmYOpJH_ZLeehIjjytH1Rwr"
}
],
"description": "**Great** record to start with.",
"archived": true,
"start": "2024-01-02",
"due": "2024-05-25",
"iconColor": "37",
"image": "icon-view-kanban",
"name": "Highlight 101",
"id": "Highlight101"
}
OK — updated sublist record.
Bad Request — body validation failed.
Forbidden — caller lacks permission to modify this sublist.
Not Found — sublist does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?sublist=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Update a sublist by OID.
Updates an existing sublist and returns the complete updated record.
To archive or unarchive, set archived: true or archived: false in the body.
OID of the sublist to update.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) List of changes that add or remove tasks from this sublist. See Change for the operation schema.
(Optional) New description for this record (Markdown supported).
(Optional) Archive toggle. Specify true to archive this record; specify false to unarchive.
(Optional) Target start date for this record.
(Optional) Target due date for this record.
(Optional) Icon color index from Quire's predefined palette. Two-digit code [0-5][0-7]: first digit 0-5, second digit 0-7 (e.g. 00, 37, 57). NOT a CSS hex color.
(Optional) Icon image for this record.
(Optional) New display name for this record.
(Optional) New ID for this record.
Request Example
{
"changes": [
{
"exclude": false,
"single": false,
"task": "2MmYOpJH_ZLeehIjjytH1Rwr"
}
],
"description": "**Great** record to start with.",
"archived": true,
"start": "2024-01-02",
"due": "2024-05-25",
"iconColor": "37",
"image": "icon-view-kanban",
"name": "Highlight 101",
"id": "Highlight101"
}
OK — updated sublist record.
Bad Request — body validation failed.
Forbidden — caller lacks permission to modify this sublist.
Not Found — sublist does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/w/my_project?sublist=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Delete a sublist by ID.
Deletes the sublist with the given ID.
Note: Returns
204 No Contentregardless of whether the sublist exists.
Owner type. One of project, organization, folder, or smart-folder. If omitted, project is assumed. For example, /id/foo is equivalent to /id/project/foo.
ID of the owner.
ID of the sublist to delete.
No Content
Response Content-Types: application/json
Delete a sublist by OID.
Deletes the sublist with the given OID.
Note: Returns
204 No Contentregardless of whether the sublist exists.
OID of the sublist to delete.
No Content
Response Content-Types: application/json
tag
A tag is a label that can be attached to a task in Quire.
Create a tag.
Creates a new tag in the specified project (by OID).
OID of the project to add the new tag to. Specify "-" to add it to personal tasks (My Tasks, not in a specific project).
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) Tag color index from Quire’s predefined palette. If omitted, a color will be generated automatically. Two-digit code: first digit 0–5, second digit 0–7 (e.g., 35).
Display name of the tag.
(Optional) Whether this tag is global (available across projects). If omitted, the tag is not global.
Request Example
{
"color": "35",
"name": "Later",
"global": true
}
OK — newly created tag.
Bad Request — body validation failed (e.g., name missing or too long).
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"global": true,
"color": "35",
"name": "Later",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"project": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
Create a tag.
Creates a new tag in the specified project (by ID).
ID of the project to add the new tag to. Specify "-" to add it to personal tasks (My Tasks, not in a specific project).
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) Tag color index from Quire’s predefined palette. If omitted, a color will be generated automatically. Two-digit code: first digit 0–5, second digit 0–7 (e.g., 35).
Display name of the tag.
(Optional) Whether this tag is global (available across projects). If omitted, the tag is not global.
Request Example
{
"color": "35",
"name": "Later",
"global": true
}
OK — newly created tag.
Bad Request — body validation failed.
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"global": true,
"color": "35",
"name": "Later",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"project": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
Get a tag.
Returns the complete tag record for the given OID.
OID of the tag to fetch.
OK — tag record.
Not Found — tag does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"global": true,
"color": "35",
"name": "Later",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"project": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
List tags by project ID.
Returns all tags in the specified project (by ID).
ID of the project. Specify "-" to list tags used in personal tasks (My Tasks, not in a specific project).
OK — list of tags (may be empty).
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"global": true,
"color": "35",
"name": "Later",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"project": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
]
List tags by project OID.
Returns all tags in the specified project (by OID).
OID of the project. Specify "-" to list tags used in personal tasks (My Tasks, not in a specific project).
OK — list of tags (may be empty).
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"global": true,
"color": "35",
"name": "Later",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"project": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
]
Update a tag.
Updates an existing tag and returns the complete updated record. Omitted body fields are left unchanged.
OID of the tag to update.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
(Optional) Tag color index from Quire's predefined palette. Two-digit code [0-5][0-7]: first digit 0-5, second digit 0-7 (e.g. 00, 35, 57). NOT a CSS hex color.
(Optional) Project OID that this tag is limited to. Used only when global is explicitly set to false; ignored otherwise.
(Optional) New display name for the tag.
(Optional) Whether the tag is global (available across projects). If set to false, you must also provide project.
Request Example
{
"color": "35",
"project": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"name": "Later",
"global": true
}
OK — updated tag record.
Bad Request — body validation failed.
Forbidden — caller lacks permission to update this tag.
Not Found — tag does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"global": true,
"color": "35",
"name": "Later",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"project": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
Delete a tag.
Deletes the tag with the given OID.
Note: Returns
204 No Contentregardless of whether the tag exists.
OID of the tag to delete.
No Content
Response Content-Types: application/json
task
Tasks are the basic units of work you and your team collaborate on.
Add a time log to a task by ID.
Adds a
time log to the task identified by project + task ID. The new log is credited to the authenticated caller unless user is supplied in the body.
Identity of a log is the triple (user, start, end). Sub-second precision in start / end is truncated to whole seconds.
On success returns the task's full timelogs array. Example:
[
{
"start": "2026-04-26T09:00:00.000Z",
"end": "2026-04-26T10:30:00.000Z",
"billable": true,
"note": "Pair-programming session",
"user": { "oid": "u-123", "name": "John Doe" }
}
]
Project ID.
Task ID.
End timestamp (ISO 8601, UTC). Must be on or after start. Sub-second precision is truncated to whole seconds.
(Optional) User identifier (OID, ID, or email) the log is credited to. Omitted, null, or empty defaults to the authenticated caller. Unknown users return 400 Bad Request.
Start timestamp (ISO 8601, UTC). Sub-second precision is truncated to whole seconds.
(Optional) Whether this log is billable. Omitted or null defaults to true.
(Optional) Free-form note for the log. Omitted, null, or empty stores no note.
Request Example
{
"end": "2026-04-26T10:30:00Z",
"user": "[email protected]",
"start": "2026-04-26T09:00:00Z",
"billable": true,
"note": "Pair-programming session"
}
OK — task's full timelogs array.
Bad Request — start / end missing or malformed, end precedes start, or user is unknown.
Not Found — task does not exist.
Conflict — a log with the same (user, start, end) already exists; use PUT /task/update-timelog/... to amend it.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
]
Response Example (400 Bad Request)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (404 Not Found)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (409 Conflict)
{
"code": 429,
"message": "Something went wrong."
}
Add a time log to a task by OID.
Adds a
time log to a task, identifying the task by OID. See POST /task/add-timelog/id/{projectId}/{taskId} for the preferred by-ID form, full semantics, and an example response.
Task OID.
End timestamp (ISO 8601, UTC). Must be on or after start. Sub-second precision is truncated to whole seconds.
(Optional) User identifier (OID, ID, or email) the log is credited to. Omitted, null, or empty defaults to the authenticated caller. Unknown users return 400 Bad Request.
Start timestamp (ISO 8601, UTC). Sub-second precision is truncated to whole seconds.
(Optional) Whether this log is billable. Omitted or null defaults to true.
(Optional) Free-form note for the log. Omitted, null, or empty stores no note.
Request Example
{
"end": "2026-04-26T10:30:00Z",
"user": "[email protected]",
"start": "2026-04-26T09:00:00Z",
"billable": true,
"note": "Pair-programming session"
}
OK — task's full timelogs array.
Bad Request.
Not Found — task does not exist.
Conflict — duplicate (user, start, end).
Response Content-Types: application/json
Response Example (200 OK)
[
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
]
Set or transition a task's approval state.
Sets the task's
approval, or transitions it from its current state. The ?state= query parameter selects the transition:
request— request approval, or roll forward fromapproved/rejected/changesback toawaiting.approve/reject/change— approver's decision.
The caller must be a claimer (for request) or an approver (for approve / reject / change) of the category. The original requester is preserved across approve / reject / change transitions.
Example: POST /task/approve/id/my_project/42?category=Legal&state=approve (the request body is unused and may be empty).
To cancel an approval, use DELETE /task/revoke-approval/id/{projectId}/{taskId}.
Returns 400 Bad Request if ?state= is missing or unknown; 403 Forbidden if the caller isn't a claimer / approver; 404 Not Found if the task or ?category= doesn't exist.
Project ID.
Task ID.
Approval transition to apply. Same vocabulary as bulk-approve.
(Optional) Approval category ID. Defaults to the project's default category (id "").
(Optional) Response shape: full (default) for the full approval record, or compact for identifiers only ({"oid": <taskOid>, "id": <taskId>}). See API description for ?return= semantics.
successful operation
Response Content-Types: application/json
Response Example (200 OK)
{
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
}
Set or transition a task's approval state by OID.
OID-form of POST /task/approve/id/{projectId}/{taskId} — see that endpoint for ?state= / ?category= grammar, permission rules, and error semantics.
Task OID.
(no description)
(no description)
(no description)
successful operation
Response Content-Types: application/json
Response Example (200 OK)
{
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
}
Upload an attachment to a task by ID.
Uploads an attachment to an existing task.
ID of the task's project. Specify "-" for personal tasks in My Tasks.
Task ID.
Attachment file name, e.g., readme.txt.
Provide a meaningful extension so the browser can recognize the MIME type (e.g., revenue.pdf, contacts.json).
Alternatively, set the MIME type via the Content-Type header.
Request Example
"object"
OK — newly created attachment.
Bad Request — filename or payload invalid.
Forbidden — caller lacks permission to attach to this task.
Not Found — task does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000
}
Upload an attachment to a task by OID.
Uploads an attachment to an existing task.
Task OID.
Attachment file name, e.g., readme.txt.
Provide a meaningful extension so the browser can recognize the MIME type (e.g., revenue.pdf, contacts.json).
Alternatively, set the MIME type via the Content-Type header.
Request Example
"object"
OK — newly created attachment.
Bad Request — filename or payload invalid.
Forbidden — caller lacks permission to attach to this task.
Not Found — task does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000
}
Bulk-add N root tasks to a project by ID.
Creates up to 300 root tasks in one transaction.
Body is a top-level JSON array of CreateTaskBody items (no envelope) — same shape as single-task POST /task/.... Items can include nested tasks to create subtrees in the same call; only the
root of each item is echoed in the response (use GET /task/list/id/{projectId}/{rootId} to enumerate the created subtree).
Example request body:
[
{
"name": "Design new logo",
"priority": 2,
"tags": ["design"],
"assignees": ["me"]
},
{ "name": "Write spec", "due": "2026-05-10" },
{ "name": "Review" }
]
Example response (full mode, abbreviated):
[
{ "oid": "iuRRiKoyrxdBFhFTTo", "id": 42, "name": "Design new logo", "priority": 2 },
{ "oid": "abcXyzPqRs", "id": 43, "name": "Write spec" },
{ "oid": "defLmnQrSt", "id": 44, "name": "Review" }
]
With ?return=compact, each element is just {oid, id}.
Atomic: any per-item validation / permission / DB error rolls back the whole batch and returns {code, message} with items[i]: prefixed so the agent can pinpoint the offending row. Fix the value and retry. Example error:
{ "code": 400, "message": "items[1]: Invalid value for `priority`: 99 (expected -1, 0, 1, or 2)" }
Rate-limit cost: each bulk call costs N units against the per-minute / per-hour API quota, where N is the number of submitted items — the same total cost as N equivalent single-task calls. Charged upfront; if the cost would exceed the quota, the whole batch is rejected with 429 before any item is processed.
Project ID.
(Optional) Response shape — full (default) or compact (returns {oid, id} per element instead of the full task record). Recommended for large batches.
Request Example
[
{
"description": "This is a *cool* task.",
"assignees": [
"6QMKkEPBVWETLWrXqws94ALU"
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"recurrence": {
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"peekaboo": true,
"section": true,
"milestone": true,
"asUser": true,
"followers": [
"tzufRLqCnud74dARyDSvjWDl"
],
"successors": "[\"#13\"]",
"yourField": "object",
"tags": [
"X6nmx9XjEO2wKbqeB1pRT43C"
],
"tasks": [
"#/definitions/CreateTaskBody"
],
"name": "Design new **logo**",
"etc": 0,
"status": 0,
"priority": 0,
"sourceRef": "{\"text\": \"Source: [Gmail](https://gmail.com/link)\"}"
}
]
OK — array of created tasks (one per submitted item, root only for nested subtrees).
Bad Request — body not a JSON array, empty, over the 300-item cap, or any per-item validation failure (whole batch rolled back).
Forbidden — caller lacks permission to add tasks to the project.
Not Found — project does not exist.
Payload Too Large — body exceeds the API packet size limit.
Too Many Requests — the batch's rate-limit cost (items.length units) would exceed the caller's per-minute / per-hour API quota, OR the batch would exceed the project's task quota.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
]
Response Example (400 Bad Request)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (403 Forbidden)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (404 Not Found)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (413 Request Entity Too Large)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (429 Too Many Requests)
{
"code": 429,
"message": "Something went wrong."
}
Bulk-add N tasks relative to a task by ID.
Creates up to
300 tasks anchored at the task identified by projectId + taskId. The optional ?position= query parameter mirrors single-task POST /task/... semantics:
parent(default): children of the anchor task.before: siblings immediately before the anchor.after: siblings immediately after the anchor.
Submitted-order is preserved across the batch regardless of ?position= (the server uses a sliding-chain insert internally) — i.e. given input [A, B, C], the final tree order is always A, B, C from left to right.
Example: POST /task/bulk-add/id/my_project/42?position=after&return=compact
Request body:
[
{ "name": "Subtask 1" },
{ "name": "Subtask 2" },
{ "name": "Subtask 3" }
]
Response (compact mode):
[
{ "oid": "abc1", "id": 100 },
{ "oid": "abc2", "id": 101 },
{ "oid": "abc3", "id": 102 }
]
All three become siblings of task 42, in submitted order, immediately after task 42.
See POST /task/bulk-add/id/{projectId} for full body / response semantics, atomic-rollback rules, and ?return= details.
Project ID.
Anchor task ID.
(Optional) Placement of the new tasks relative to the anchor: parent (default), before, or after. Any other value returns 400 Bad Request.
(Optional) Response shape — full (default) or compact.
Request Example
[
{
"description": "This is a *cool* task.",
"assignees": [
"6QMKkEPBVWETLWrXqws94ALU"
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"recurrence": {
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"peekaboo": true,
"section": true,
"milestone": true,
"asUser": true,
"followers": [
"tzufRLqCnud74dARyDSvjWDl"
],
"successors": "[\"#13\"]",
"yourField": "object",
"tags": [
"X6nmx9XjEO2wKbqeB1pRT43C"
],
"tasks": [
"#/definitions/CreateTaskBody"
],
"name": "Design new **logo**",
"etc": 0,
"status": 0,
"priority": 0,
"sourceRef": "{\"text\": \"Source: [Gmail](https://gmail.com/link)\"}"
}
]
OK — array of created tasks.
Bad Request.
Forbidden.
Not Found — project or anchor task does not exist.
Payload Too Large.
Too Many Requests.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
]
Response Example (400 Bad Request)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (403 Forbidden)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (404 Not Found)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (413 Request Entity Too Large)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (429 Too Many Requests)
{
"code": 429,
"message": "Something went wrong."
}
Bulk-add N tasks by OID (project or task anchor).
Creates up to
300 tasks anchored at the entity identified by oid — a project OID creates root tasks, a task OID creates subtasks (or siblings, depending on ?position=).
See the by-ID forms POST /task/bulk-add/id/{projectId} and POST /task/bulk-add/id/{projectId}/{taskId} for body shape, atomic semantics, sliding-chain order preservation, and response details.
OID of the project (root tasks) or anchor task (subtasks / siblings, per ?position=).
(Optional) Placement when oid refers to a task: parent (default), before, or after. Ignored when oid is a project.
(Optional) Response shape — full (default) or compact.
Request Example
[
{
"description": "This is a *cool* task.",
"assignees": [
"6QMKkEPBVWETLWrXqws94ALU"
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"recurrence": {
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"peekaboo": true,
"section": true,
"milestone": true,
"asUser": true,
"followers": [
"tzufRLqCnud74dARyDSvjWDl"
],
"successors": "[\"#13\"]",
"yourField": "object",
"tags": [
"X6nmx9XjEO2wKbqeB1pRT43C"
],
"tasks": [
"#/definitions/CreateTaskBody"
],
"name": "Design new **logo**",
"etc": 0,
"status": 0,
"priority": 0,
"sourceRef": "{\"text\": \"Source: [Gmail](https://gmail.com/link)\"}"
}
]
OK — array of created tasks.
Bad Request.
Forbidden.
Not Found — anchor does not exist.
Payload Too Large.
Too Many Requests.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
]
Response Example (400 Bad Request)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (403 Forbidden)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (404 Not Found)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (413 Request Entity Too Large)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (429 Too Many Requests)
{
"code": 429,
"message": "Something went wrong."
}
Bulk-approve N tasks in a project by ID.
Applies a single approval transition (request / approve / reject / change) to all tasks in the batch. Body is a top-level JSON array of task references (OID string, integer ID, or "#<id>" string; mixed forms allowed). Up to
300 items per call.
Same atomic / skip-not-found / items[i]: error / rate-limit conventions as the other bulk endpoints (see bulk-update for details).
Example:
POST /task/bulk-approve/id/my_project?category=Legal&state=approve
Body: [42, "#43", "iuRRiKoyrxdBFhFTTo"]
Permissions — same per-task role checks as the single-task POST /task/approve/id/{projectId}/{taskId}. Any per-item permission failure rolls back the whole batch with an items[i]: ... prefixed error.
Project ID.
Approval transition to apply to every task in the batch. request requests approval (or rolls forward from a decided state back to awaiting); approve / reject / change records the approver's decision.
(Optional) Approval category ID. Defaults to the project's default category (id "").
(Optional) Response shape — full (default; per-item full task record with approval field) or compact (per-item {oid, id}). null slots are preserved in either mode.
Request Example
[
"object"
]
OK — array of updated tasks (same length as the request body; null for skipped items whose task wasn't found).
Bad Request — body shape, missing or invalid ?state=, malformed item ref, or per-item validation error (with items[i]: prefix).
Forbidden — caller lacks claimer / approver role on at least one item (whole batch rolled back).
Not Found — project or approval ?category= does not exist.
Too Many Requests — bulk rate-limit cost is N units (one per item).
Response Content-Types: application/json
Response Example (200 OK)
[
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"parent": {
"id": 12
}
}
]
Response Example (400 Bad Request)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (403 Forbidden)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (404 Not Found)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (429 Too Many Requests)
{
"code": 429,
"message": "Something went wrong."
}
Bulk-approve N tasks in a project by OID.
OID-form of POST /task/bulk-approve/id/{projectId} — see that endpoint for body shape, query params, atomic / skip-not-found semantics, and rate-limit details.
Project OID.
(no description)
(no description)
(no description)
Request Example
[
"object"
]
successful operation
Response Content-Types: application/json
Response Example (200 OK)
[
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"parent": {
"id": 12
}
}
]
Add a new root task.
Adds a new root task to a project.
Minimal request body only needs name. A fuller example:
{
"name": "Design new logo",
"description": "Needs to match the brand guide.",
"priority": 2,
"tags": ["design", "urgent"],
"assignees": ["me"],
"start": "2026-05-01",
"due": "2026-05-10",
"Priority": 3,
"Owners": ["[email protected]"]
}
Priority/Ownersin this example are custom-field keys from the project's own/project/add-fielddefinitions — they are not fixed API fields and are only recognised by name. SeeCreateTaskBody.yourFieldfor the rules on each custom-field type.
ID of the project to which this new task will be added. The task will be created as a root task. Specify "-" to add it to personal tasks (in My Tasks).
(Optional) Response shape: full (default) for the full task record, or compact for identifiers only ({"oid":…, "id":…}). See POST /task/{oid} for full semantics.
(Optional) A description of the task.
(Optional) A list of user identifiers (OID, ID, or email) to assign this task to.
- Use "me" to indicate the current user.
- Use "inherit" to include all assignees of the parent task.
(Optional) Start date/time in UTC.
- With time:
yyyy-MM-dd'T'HH:mmZ(e.g.,2020-10-30T09:30Z). - Date only:
yyyy-MM-dd(e.g.,2020-10-30).
Notes:
- Seconds are not supported.
2020-10-30T00:00:00is treated as2020-10-30(date only).- To specify exactly midnight UTC, use
2020-10-30T00:00(no seconds).
(Optional) Due date/time in UTC.
- With time:
yyyy-MM-dd'T'HH:mmZ(e.g.,2020-10-30T09:30Z). - Date only:
yyyy-MM-dd(e.g.,2020-10-30).
Notes:
- Seconds are not supported.
2020-10-30T00:00:00is treated as2020-10-30(date only).- To specify exactly midnight UTC, use
2020-10-30T00:00(no seconds).
(Optional) Recurrence details. Null if the task is not recurring.
freq:daily,weekly,monthly,yearly.interval: Interval between occurrences. Default: 1.until: End date. Default: never ends.bymonth: Month (1 = January). Supported only withyearly. Default: 1.byweekno: Week number (starting from 1) orlast. Supported withmonthly/yearly.byweekday: Day(s) of week (0 = Monday ... 6 = Sunday). For weekly, use a list (e.g.,[0,3]).bydayno: Day of month (1 = first day). Supported withmonthly/yearly. Note:byweekdayandbydaynocannot both be specified.dupsubtasks: Whether to duplicate subtasks when completed. Default: true.sincelatest: Fordailyonly. Whether to repeat based on last completion date. Default: false.
- boolean
- integer
(Optional) Peekaboo setting. Accepts a boolean or a positive integer:
true: Hide indefinitely.- positive integer: Number of days to hide.
false: Cancel previous peekaboo.
Default: false.
(Optional) Whether this task is a section. Default: false.
(Optional) Whether this task is a milestone. Default: false.
(Optional) If true, marks this task as created by the app. Default: false (created by the authorizing user).
(Optional) List of user identifiers (OID, ID, or email) who follow this task.
- Use "me" for the current user.
- Use "inherit" to include followers of the parent task.
- Use "app" for the application itself to follow (receive notifications).
For app followers, additional syntaxes are supported:
app|teamorapp|team|channelapp|/path→ appended to the hook URL (e.g.,.../standard/soc1/33456/a7).
(Optional) List of successor task identifiers (OID or ID).
IDs can be specified as #id or id. Integer IDs are also accepted.
PLACEHOLDER — do NOT send a key literally named yourField. Instead, use the custom field's own name (as defined via /project/add-field) as the JSON key, with a value matching the field's type:
- Text / Email / Hyperlink: string.
- Number / Money: numeric value (no currency symbol).
- Checkbox:
trueorfalse. - Select: option name (string).
- Date: ISO 8601 timestamp (
yyyy-MM-dd'T'HH:mm:ssZ) or date-only (yyyy-MM-dd). - Duration: number of seconds.
- User: user OID, user ID, or email — server resolves to the user's OID.
-
Task: task OID, integer task ID, or
#<id>string — server resolves to the task's OID (scoped to this project). - Multi-value (fields configured with
multiple: true): provide a list.
Example body fragment: {"Priority": 3, "Owners": ["alice", "[email protected]"], "Depends": ["#42"]}.
(Optional) A list of tag OIDs or names to be added to the new task. Tag names are case-insensitive.
(Optional) List of subtasks to create along with this task.
The name of the task.
(Optional) Estimated time to complete, in seconds. Must be non-negative.
(Optional) Task status. Must be between 0 and 100. Default: 0.
(Optional) Task priority. -1 (lowest) through 2 (highest); 0 is Normal. Default: 0. (The server also accepts the case-insensitive English names Low, Medium, High, Urgent, but the integer form is recommended for typed callers.)
(Optional) Arbitrary source reference data to attach to the task. Available via API when retrieving the task.
If the entry contains a key text, its value will be displayed client-side and should be formatted in Markdown. It is recommended to include a source link.
Request Example
{
"description": "This is a *cool* task.",
"assignees": [
"6QMKkEPBVWETLWrXqws94ALU"
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"recurrence": {
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"peekaboo": true,
"section": true,
"milestone": true,
"asUser": true,
"followers": [
"tzufRLqCnud74dARyDSvjWDl"
],
"successors": "[\"#13\"]",
"yourField": "object",
"tags": [
"X6nmx9XjEO2wKbqeB1pRT43C"
],
"tasks": [
"#/definitions/CreateTaskBody"
],
"name": "Design new **logo**",
"etc": 0,
"status": 0,
"priority": 0,
"sourceRef": "{\"text\": \"Source: [Gmail](https://gmail.com/link)\"}"
}
OK — newly created task.
Bad Request — body validation failed.
Forbidden — caller lacks permission to add a task to this project.
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
Add a new task relative to another task.
Adds a new task under another task, or before or after another task. See POST /task/id/{projectId} for a full request-body example — the body shape is identical.
ID of the project to which the new task will be added. Specify "-" to add it to personal tasks in My Tasks.
ID of the referenced task.
(Optional) Placement of the new task relative to the task referenced by taskId:
parent(default): child of the referenced task.before: sibling immediately before the referenced task.after: sibling immediately after the referenced task.
Omitted or empty → same as parent. Any other value returns 400 Bad Request.
(Optional) Response shape: full (default) for the full task record, or compact for identifiers only ({"oid":…, "id":…}). See POST /task/{oid} for full semantics.
(Optional) A description of the task.
(Optional) A list of user identifiers (OID, ID, or email) to assign this task to.
- Use "me" to indicate the current user.
- Use "inherit" to include all assignees of the parent task.
(Optional) Start date/time in UTC.
- With time:
yyyy-MM-dd'T'HH:mmZ(e.g.,2020-10-30T09:30Z). - Date only:
yyyy-MM-dd(e.g.,2020-10-30).
Notes:
- Seconds are not supported.
2020-10-30T00:00:00is treated as2020-10-30(date only).- To specify exactly midnight UTC, use
2020-10-30T00:00(no seconds).
(Optional) Due date/time in UTC.
- With time:
yyyy-MM-dd'T'HH:mmZ(e.g.,2020-10-30T09:30Z). - Date only:
yyyy-MM-dd(e.g.,2020-10-30).
Notes:
- Seconds are not supported.
2020-10-30T00:00:00is treated as2020-10-30(date only).- To specify exactly midnight UTC, use
2020-10-30T00:00(no seconds).
(Optional) Recurrence details. Null if the task is not recurring.
freq:daily,weekly,monthly,yearly.interval: Interval between occurrences. Default: 1.until: End date. Default: never ends.bymonth: Month (1 = January). Supported only withyearly. Default: 1.byweekno: Week number (starting from 1) orlast. Supported withmonthly/yearly.byweekday: Day(s) of week (0 = Monday ... 6 = Sunday). For weekly, use a list (e.g.,[0,3]).bydayno: Day of month (1 = first day). Supported withmonthly/yearly. Note:byweekdayandbydaynocannot both be specified.dupsubtasks: Whether to duplicate subtasks when completed. Default: true.sincelatest: Fordailyonly. Whether to repeat based on last completion date. Default: false.
- boolean
- integer
(Optional) Peekaboo setting. Accepts a boolean or a positive integer:
true: Hide indefinitely.- positive integer: Number of days to hide.
false: Cancel previous peekaboo.
Default: false.
(Optional) Whether this task is a section. Default: false.
(Optional) Whether this task is a milestone. Default: false.
(Optional) If true, marks this task as created by the app. Default: false (created by the authorizing user).
(Optional) List of user identifiers (OID, ID, or email) who follow this task.
- Use "me" for the current user.
- Use "inherit" to include followers of the parent task.
- Use "app" for the application itself to follow (receive notifications).
For app followers, additional syntaxes are supported:
app|teamorapp|team|channelapp|/path→ appended to the hook URL (e.g.,.../standard/soc1/33456/a7).
(Optional) List of successor task identifiers (OID or ID).
IDs can be specified as #id or id. Integer IDs are also accepted.
PLACEHOLDER — do NOT send a key literally named yourField. Instead, use the custom field's own name (as defined via /project/add-field) as the JSON key, with a value matching the field's type:
- Text / Email / Hyperlink: string.
- Number / Money: numeric value (no currency symbol).
- Checkbox:
trueorfalse. - Select: option name (string).
- Date: ISO 8601 timestamp (
yyyy-MM-dd'T'HH:mm:ssZ) or date-only (yyyy-MM-dd). - Duration: number of seconds.
- User: user OID, user ID, or email — server resolves to the user's OID.
-
Task: task OID, integer task ID, or
#<id>string — server resolves to the task's OID (scoped to this project). - Multi-value (fields configured with
multiple: true): provide a list.
Example body fragment: {"Priority": 3, "Owners": ["alice", "[email protected]"], "Depends": ["#42"]}.
(Optional) A list of tag OIDs or names to be added to the new task. Tag names are case-insensitive.
(Optional) List of subtasks to create along with this task.
The name of the task.
(Optional) Estimated time to complete, in seconds. Must be non-negative.
(Optional) Task status. Must be between 0 and 100. Default: 0.
(Optional) Task priority. -1 (lowest) through 2 (highest); 0 is Normal. Default: 0. (The server also accepts the case-insensitive English names Low, Medium, High, Urgent, but the integer form is recommended for typed callers.)
(Optional) Arbitrary source reference data to attach to the task. Available via API when retrieving the task.
If the entry contains a key text, its value will be displayed client-side and should be formatted in Markdown. It is recommended to include a source link.
Request Example
{
"description": "This is a *cool* task.",
"assignees": [
"6QMKkEPBVWETLWrXqws94ALU"
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"recurrence": {
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"peekaboo": true,
"section": true,
"milestone": true,
"asUser": true,
"followers": [
"tzufRLqCnud74dARyDSvjWDl"
],
"successors": "[\"#13\"]",
"yourField": "object",
"tags": [
"X6nmx9XjEO2wKbqeB1pRT43C"
],
"tasks": [
"#/definitions/CreateTaskBody"
],
"name": "Design new **logo**",
"etc": 0,
"status": 0,
"priority": 0,
"sourceRef": "{\"text\": \"Source: [Gmail](https://gmail.com/link)\"}"
}
OK — newly created task.
Bad Request — body validation failed.
Forbidden — caller lacks permission to add a task here.
Not Found — project or parent task does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
Add a new root task, or relative to another task.
Adds a new task to a project, under another task, or before or after another task.
OID of the project or task to which the new task will be added. If the OID refers to a project, the new task becomes a root task. If it refers to a task, the new task becomes its subtask. Specify "-" to add the task to My Tasks.
(Optional) Placement of the new task relative to the task referenced by oid. This parameter applies only when oid refers to a task:
parent(default): child of the referenced task.before: sibling immediately before the referenced task.after: sibling immediately after the referenced task.
Omitted or empty → same as parent. Any other value returns 400 Bad Request.
(Optional) Response shape:
full(default): the full task record.compact: identifiers only ({"oid":…, "id":…}). Saves payload, tokens, and a server-side reload + render. Recommended for MCP / scripted callers that only need the OID/ID to chain follow-up calls.
Any other value returns 400 Bad Request.
(Optional) A description of the task.
(Optional) A list of user identifiers (OID, ID, or email) to assign this task to.
- Use "me" to indicate the current user.
- Use "inherit" to include all assignees of the parent task.
(Optional) Start date/time in UTC.
- With time:
yyyy-MM-dd'T'HH:mmZ(e.g.,2020-10-30T09:30Z). - Date only:
yyyy-MM-dd(e.g.,2020-10-30).
Notes:
- Seconds are not supported.
2020-10-30T00:00:00is treated as2020-10-30(date only).- To specify exactly midnight UTC, use
2020-10-30T00:00(no seconds).
(Optional) Due date/time in UTC.
- With time:
yyyy-MM-dd'T'HH:mmZ(e.g.,2020-10-30T09:30Z). - Date only:
yyyy-MM-dd(e.g.,2020-10-30).
Notes:
- Seconds are not supported.
2020-10-30T00:00:00is treated as2020-10-30(date only).- To specify exactly midnight UTC, use
2020-10-30T00:00(no seconds).
(Optional) Recurrence details. Null if the task is not recurring.
freq:daily,weekly,monthly,yearly.interval: Interval between occurrences. Default: 1.until: End date. Default: never ends.bymonth: Month (1 = January). Supported only withyearly. Default: 1.byweekno: Week number (starting from 1) orlast. Supported withmonthly/yearly.byweekday: Day(s) of week (0 = Monday ... 6 = Sunday). For weekly, use a list (e.g.,[0,3]).bydayno: Day of month (1 = first day). Supported withmonthly/yearly. Note:byweekdayandbydaynocannot both be specified.dupsubtasks: Whether to duplicate subtasks when completed. Default: true.sincelatest: Fordailyonly. Whether to repeat based on last completion date. Default: false.
- boolean
- integer
(Optional) Peekaboo setting. Accepts a boolean or a positive integer:
true: Hide indefinitely.- positive integer: Number of days to hide.
false: Cancel previous peekaboo.
Default: false.
(Optional) Whether this task is a section. Default: false.
(Optional) Whether this task is a milestone. Default: false.
(Optional) If true, marks this task as created by the app. Default: false (created by the authorizing user).
(Optional) List of user identifiers (OID, ID, or email) who follow this task.
- Use "me" for the current user.
- Use "inherit" to include followers of the parent task.
- Use "app" for the application itself to follow (receive notifications).
For app followers, additional syntaxes are supported:
app|teamorapp|team|channelapp|/path→ appended to the hook URL (e.g.,.../standard/soc1/33456/a7).
(Optional) List of successor task identifiers (OID or ID).
IDs can be specified as #id or id. Integer IDs are also accepted.
PLACEHOLDER — do NOT send a key literally named yourField. Instead, use the custom field's own name (as defined via /project/add-field) as the JSON key, with a value matching the field's type:
- Text / Email / Hyperlink: string.
- Number / Money: numeric value (no currency symbol).
- Checkbox:
trueorfalse. - Select: option name (string).
- Date: ISO 8601 timestamp (
yyyy-MM-dd'T'HH:mm:ssZ) or date-only (yyyy-MM-dd). - Duration: number of seconds.
- User: user OID, user ID, or email — server resolves to the user's OID.
-
Task: task OID, integer task ID, or
#<id>string — server resolves to the task's OID (scoped to this project). - Multi-value (fields configured with
multiple: true): provide a list.
Example body fragment: {"Priority": 3, "Owners": ["alice", "[email protected]"], "Depends": ["#42"]}.
(Optional) A list of tag OIDs or names to be added to the new task. Tag names are case-insensitive.
(Optional) List of subtasks to create along with this task.
The name of the task.
(Optional) Estimated time to complete, in seconds. Must be non-negative.
(Optional) Task status. Must be between 0 and 100. Default: 0.
(Optional) Task priority. -1 (lowest) through 2 (highest); 0 is Normal. Default: 0. (The server also accepts the case-insensitive English names Low, Medium, High, Urgent, but the integer form is recommended for typed callers.)
(Optional) Arbitrary source reference data to attach to the task. Available via API when retrieving the task.
If the entry contains a key text, its value will be displayed client-side and should be formatted in Markdown. It is recommended to include a source link.
Request Example
{
"description": "This is a *cool* task.",
"assignees": [
"6QMKkEPBVWETLWrXqws94ALU"
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"recurrence": {
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"peekaboo": true,
"section": true,
"milestone": true,
"asUser": true,
"followers": [
"tzufRLqCnud74dARyDSvjWDl"
],
"successors": "[\"#13\"]",
"yourField": "object",
"tags": [
"X6nmx9XjEO2wKbqeB1pRT43C"
],
"tasks": [
"#/definitions/CreateTaskBody"
],
"name": "Design new **logo**",
"etc": 0,
"status": 0,
"priority": 0,
"sourceRef": "{\"text\": \"Source: [Gmail](https://gmail.com/link)\"}"
}
OK — newly created task.
Bad Request — body validation failed.
Forbidden — caller lacks permission to add a task here.
Not Found — project or parent task does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
Search tasks in a folder by folder ID.
Returns tasks that match the specified criteria in the given folder. Tasks in archived projects are excluded.
Available for Professional plans and above
Folder ID.
Full-text query against task name, description, and attachments. Note: does not include comment content or comment attachments. Indexing can take ~10 seconds or more after updates.
Task name filter. Prefix with ~ for regex, ~* for case-insensitive regex. Use text for full-text search.
Task description filter. Prefix with ~ for regex, ~* for case-insensitive regex.
Task status filter. Specify 0–100, or "active" / "completed".
Return only scheduled tasks (start or due is set). If scheduled=false, returns only tasks where neither start nor due is set.
Return only "My Tasks" (assigned to me, or created by me and scheduled but unassigned).
Filter by assignee. Each value is a user OID, user ID, or email.
Combine values with , (AND), | (OR), and ! (NOT). AND binds tighter than OR.
Examples:
alice— a single user (by ID)[email protected]— by emailalice,bob— assigned to bothalice|bob— assigned to eitheralice,!bob— assigned to alice but not bobalice,bob|carol—(alice AND bob) OR carol
Filter by assignor (the user who set the assignment). Each value is a user OID, user ID, or email. Combine with , (AND), | (OR), ! (NOT); AND binds tighter than OR.
Examples: alice, alice,!bob, alice|bob.
Filter by follower. Each value is a user OID, user ID, or email. Combine with , (AND), | (OR), ! (NOT); AND binds tighter than OR.
Examples: alice, alice,!bob, alice|bob.
Filter by tag. Each value is a tag OID or a tag name (names are resolved within the search's organization).
Combine with , (AND), | (OR), ! (NOT); AND binds tighter than OR.
Names containing ,, |, !, ", or whitespace must be wrapped in "...". Inside quotes, write \" for a literal " and \\ for a literal \; any other \x is preserved as two literal characters.
Examples:
Legal— a single tagLegal,!Draft— hasLegalbut notDraft"In Progress",!Done— quoted name with space"Foo\"s Go"|Other— quoted with escaped"
Return only tasks created or modified recently. Specify an integer (days); default 7 if omitted. Supports d, h, m suffixes (e.g., 8h).
Return only tasks with recent comments. Specify an integer (days); default 7 if omitted. Supports d, h, m suffixes (e.g., 8h).
Filter by source ref key. See sourceRef in the task creation API.
Filter by the task's createdAt timestamp. Value grammar:
- Keyword:
past,yesterday,today,tomorrow,upcoming,last7d,next7d,lastWeek,thisWeek,nextWeek - Value op:
{ge|gt|le|lt|eq|ne}:<timestamp>or{between|notBetween}:<timestamp>,<timestamp> <timestamp>is ISO 8601YYYY-MM-DDTHH:MM:SSZ(UTC)- Day boundaries resolve in the caller's timezone; week start follows the caller's locale
paston this field is< now()- Tokens and keywords are case-insensitive
Examples: today, last7d, ge:2026-04-01T00:00:00Z, between:2026-04-01T00:00:00Z,2026-04-30T23:59:59Z.
Filter by the task's editedAt timestamp. Same grammar as created. Note: editedAt is NULL for tasks that have never been edited after creation; such tasks are excluded by every op (use created to filter by creation time).
Examples: today, last7d, ge:2026-04-01T00:00:00Z.
Filter by the task's archivedAt timestamp. Same grammar as created, plus null ops since the field is nullable:
isNull— not archivedisNotNull— archived (any time)
Examples: isNotNull, today, ge:2026-04-01T00:00:00Z.
Filter by the task's reshowAt timestamp (scheduled un-archive). Same grammar as archived (supports isNull / isNotNull).
Examples: isNotNull, today, between:2026-04-01T00:00:00Z,2026-04-30T23:59:59Z.
Filter by the task's toggledAt timestamp (when its completion status was last changed). Same grammar as archived (supports isNull / isNotNull).
Examples: today, isNotNull, ge:2026-04-01T00:00:00Z.
Filter by the task's start date/time. Value grammar:
- Keyword:
past,yesterday,today,tomorrow,upcoming,last7d,next7d,lastWeek,thisWeek,nextWeek - Value op:
{ge|gt|le|lt|eq|ne}:<value>or{between|notBetween}:<value>,<value> - Null op:
isNull,isNotNull <value>is either a date (YYYY-MM-DD) or a full ISO 8601 timestamp (YYYY-MM-DDTHH:MM:SSZ)- A date operand expands to a whole-day window in the caller's timezone (
ge:2026-04-01means "on or after Apr 1 in the caller's calendar");gt:D/le:Duse end-of-day,lt:D/ge:Duse start-of-day pastonstart/dueis< today 00:00in the caller's timezone (not< now())upcomingonstart/dueis the window[tomorrow, today + 7 days)
Examples: today, upcoming, ge:2026-04-01, between:2026-04-01,2026-04-30, isNull.
Filter by the task's due date/time. Same grammar and semantics as start (accepts date-only operands, isNull/isNotNull, and the same keyword/value ops).
Examples: today, upcoming, le:2026-04-30, isNotNull.
Maximum number of tasks to return. Default: 30. Use no to return all matches.
Note: On free plans, this cannot exceed 30 or no (unlimited).
OK — matching tasks (may be empty).
Bad Request — invalid query params.
Forbidden — caller lacks permission to search this folder.
Not Found — folder does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"parent": {
"id": 12
}
}
]
Search tasks in a folder by folder OID.
Returns tasks that match the specified criteria in the given folder. Tasks in archived projects are excluded.
Available for Professional plans and above
Folder OID.
Full-text query against task name, description, and attachments. Note: does not include comment content or comment attachments. Indexing can take ~10 seconds or more after updates.
Task name filter. Prefix with ~ for regex, ~* for case-insensitive regex. Use text for full-text search.
Task description filter. Prefix with ~ for regex, ~* for case-insensitive regex.
Task status filter. Specify 0–100, or "active" / "completed".
Return only scheduled tasks (start or due is set). If scheduled=false, returns only tasks where neither start nor due is set.
Return only "My Tasks" (assigned to me, or created by me and scheduled but unassigned).
Filter by assignee. Each value is a user OID, user ID, or email.
Combine values with , (AND), | (OR), and ! (NOT). AND binds tighter than OR.
Examples:
alice— a single user (by ID)[email protected]— by emailalice,bob— assigned to bothalice|bob— assigned to eitheralice,!bob— assigned to alice but not bobalice,bob|carol—(alice AND bob) OR carol
Filter by assignor (the user who set the assignment). Each value is a user OID, user ID, or email. Combine with , (AND), | (OR), ! (NOT); AND binds tighter than OR.
Examples: alice, alice,!bob, alice|bob.
Filter by follower. Each value is a user OID, user ID, or email. Combine with , (AND), | (OR), ! (NOT); AND binds tighter than OR.
Examples: alice, alice,!bob, alice|bob.
Filter by tag. Each value is a tag OID or a tag name (names are resolved within the search's organization).
Combine with , (AND), | (OR), ! (NOT); AND binds tighter than OR.
Names containing ,, |, !, ", or whitespace must be wrapped in "...". Inside quotes, write \" for a literal " and \\ for a literal \; any other \x is preserved as two literal characters.
Examples:
Legal— a single tagLegal,!Draft— hasLegalbut notDraft"In Progress",!Done— quoted name with space"Foo\"s Go"|Other— quoted with escaped"
Return only tasks created or modified recently. Specify an integer (days); default 7 if omitted. Supports d, h, m suffixes (e.g., 8h).
Return only tasks with recent comments. Specify an integer (days); default 7 if omitted. Supports d, h, m suffixes (e.g., 8h).
Filter by source ref key. See sourceRef in the task creation API.
Filter by the task's createdAt timestamp. Value grammar:
- Keyword:
past,yesterday,today,tomorrow,upcoming,last7d,next7d,lastWeek,thisWeek,nextWeek - Value op:
{ge|gt|le|lt|eq|ne}:<timestamp>or{between|notBetween}:<timestamp>,<timestamp> <timestamp>is ISO 8601YYYY-MM-DDTHH:MM:SSZ(UTC)- Day boundaries resolve in the caller's timezone; week start follows the caller's locale
paston this field is< now()- Tokens and keywords are case-insensitive
Examples: today, last7d, ge:2026-04-01T00:00:00Z, between:2026-04-01T00:00:00Z,2026-04-30T23:59:59Z.
Filter by the task's editedAt timestamp. Same grammar as created. Note: editedAt is NULL for tasks that have never been edited after creation; such tasks are excluded by every op (use created to filter by creation time).
Examples: today, last7d, ge:2026-04-01T00:00:00Z.
Filter by the task's archivedAt timestamp. Same grammar as created, plus null ops since the field is nullable:
isNull— not archivedisNotNull— archived (any time)
Examples: isNotNull, today, ge:2026-04-01T00:00:00Z.
Filter by the task's reshowAt timestamp (scheduled un-archive). Same grammar as archived (supports isNull / isNotNull).
Examples: isNotNull, today, between:2026-04-01T00:00:00Z,2026-04-30T23:59:59Z.
Filter by the task's toggledAt timestamp (when its completion status was last changed). Same grammar as archived (supports isNull / isNotNull).
Examples: today, isNotNull, ge:2026-04-01T00:00:00Z.
Filter by the task's start date/time. Value grammar:
- Keyword:
past,yesterday,today,tomorrow,upcoming,last7d,next7d,lastWeek,thisWeek,nextWeek - Value op:
{ge|gt|le|lt|eq|ne}:<value>or{between|notBetween}:<value>,<value> - Null op:
isNull,isNotNull <value>is either a date (YYYY-MM-DD) or a full ISO 8601 timestamp (YYYY-MM-DDTHH:MM:SSZ)- A date operand expands to a whole-day window in the caller's timezone (
ge:2026-04-01means "on or after Apr 1 in the caller's calendar");gt:D/le:Duse end-of-day,lt:D/ge:Duse start-of-day pastonstart/dueis< today 00:00in the caller's timezone (not< now())upcomingonstart/dueis the window[tomorrow, today + 7 days)
Examples: today, upcoming, ge:2026-04-01, between:2026-04-01,2026-04-30, isNull.
Filter by the task's due date/time. Same grammar and semantics as start (accepts date-only operands, isNull/isNotNull, and the same keyword/value ops).
Examples: today, upcoming, le:2026-04-30, isNotNull.
Maximum number of tasks to return. Default: 30. Use no to return all matches.
Note: On free plans, this cannot exceed 30 or no (unlimited).
OK — matching tasks (may be empty).
Bad Request — invalid query params.
Forbidden — caller lacks permission to search this folder.
Not Found — folder does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"parent": {
"id": 12
}
}
]
Search tasks in an organization by organization ID.
Returns tasks that match the specified criteria in the given organization. Tasks in archived projects are excluded.
Available for Professional plans and above
Organization ID.
Full-text query against task name, description, and attachments. Note: does not include comment content or comment attachments. Indexing can take ~10 seconds or more after updates.
Task name filter. Prefix with ~ for regex, ~* for case-insensitive regex. Use text for full-text search.
Task description filter. Prefix with ~ for regex, ~* for case-insensitive regex.
Task status filter. Specify 0–100, or "active" / "completed".
Return only scheduled tasks (start or due is set). If scheduled=false, returns only tasks where neither start nor due is set.
Return only "My Tasks" (assigned to me, or created by me and scheduled but unassigned).
Filter by assignee. Each value is a user OID, user ID, or email.
Combine values with , (AND), | (OR), and ! (NOT). AND binds tighter than OR.
Examples:
alice— a single user (by ID)[email protected]— by emailalice,bob— assigned to bothalice|bob— assigned to eitheralice,!bob— assigned to alice but not bobalice,bob|carol—(alice AND bob) OR carol
Filter by assignor (the user who set the assignment). Each value is a user OID, user ID, or email. Combine with , (AND), | (OR), ! (NOT); AND binds tighter than OR.
Examples: alice, alice,!bob, alice|bob.
Filter by follower. Each value is a user OID, user ID, or email. Combine with , (AND), | (OR), ! (NOT); AND binds tighter than OR.
Examples: alice, alice,!bob, alice|bob.
Filter by tag. Each value is a tag OID or a tag name (names are resolved within the search's organization).
Combine with , (AND), | (OR), ! (NOT); AND binds tighter than OR.
Names containing ,, |, !, ", or whitespace must be wrapped in "...". Inside quotes, write \" for a literal " and \\ for a literal \; any other \x is preserved as two literal characters.
Examples:
Legal— a single tagLegal,!Draft— hasLegalbut notDraft"In Progress",!Done— quoted name with space"Foo\"s Go"|Other— quoted with escaped"
Return only tasks created or modified recently. Specify an integer (days); default 7 if omitted. Supports d, h, m suffixes (e.g., 8h).
Return only tasks with recent comments. Specify an integer (days); default 7 if omitted. Supports d, h, m suffixes (e.g., 8h).
Filter by source ref key. See sourceRef in the task creation API.
Filter by the task's createdAt timestamp. Value grammar:
- Keyword:
past,yesterday,today,tomorrow,upcoming,last7d,next7d,lastWeek,thisWeek,nextWeek - Value op:
{ge|gt|le|lt|eq|ne}:<timestamp>or{between|notBetween}:<timestamp>,<timestamp> <timestamp>is ISO 8601YYYY-MM-DDTHH:MM:SSZ(UTC)- Day boundaries resolve in the caller's timezone; week start follows the caller's locale
paston this field is< now()- Tokens and keywords are case-insensitive
Examples: today, last7d, ge:2026-04-01T00:00:00Z, between:2026-04-01T00:00:00Z,2026-04-30T23:59:59Z.
Filter by the task's editedAt timestamp. Same grammar as created. Note: editedAt is NULL for tasks that have never been edited after creation; such tasks are excluded by every op (use created to filter by creation time).
Examples: today, last7d, ge:2026-04-01T00:00:00Z.
Filter by the task's archivedAt timestamp. Same grammar as created, plus null ops since the field is nullable:
isNull— not archivedisNotNull— archived (any time)
Examples: isNotNull, today, ge:2026-04-01T00:00:00Z.
Filter by the task's reshowAt timestamp (scheduled un-archive). Same grammar as archived (supports isNull / isNotNull).
Examples: isNotNull, today, between:2026-04-01T00:00:00Z,2026-04-30T23:59:59Z.
Filter by the task's toggledAt timestamp (when its completion status was last changed). Same grammar as archived (supports isNull / isNotNull).
Examples: today, isNotNull, ge:2026-04-01T00:00:00Z.
Filter by the task's start date/time. Value grammar:
- Keyword:
past,yesterday,today,tomorrow,upcoming,last7d,next7d,lastWeek,thisWeek,nextWeek - Value op:
{ge|gt|le|lt|eq|ne}:<value>or{between|notBetween}:<value>,<value> - Null op:
isNull,isNotNull <value>is either a date (YYYY-MM-DD) or a full ISO 8601 timestamp (YYYY-MM-DDTHH:MM:SSZ)- A date operand expands to a whole-day window in the caller's timezone (
ge:2026-04-01means "on or after Apr 1 in the caller's calendar");gt:D/le:Duse end-of-day,lt:D/ge:Duse start-of-day pastonstart/dueis< today 00:00in the caller's timezone (not< now())upcomingonstart/dueis the window[tomorrow, today + 7 days)
Examples: today, upcoming, ge:2026-04-01, between:2026-04-01,2026-04-30, isNull.
Filter by the task's due date/time. Same grammar and semantics as start (accepts date-only operands, isNull/isNotNull, and the same keyword/value ops).
Examples: today, upcoming, le:2026-04-30, isNotNull.
Maximum number of tasks to return. Default: 30. Use no to return all matches.
Note: On free plans, this cannot exceed 30 or no (unlimited).
OK — matching tasks (may be empty).
Bad Request — invalid query params.
Forbidden — caller lacks permission to search this organization.
Not Found — organization does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"parent": {
"id": 12
}
}
]
Search tasks in an organization by organization OID.
Returns tasks that match the specified criteria in the given organization. Tasks in archived projects are excluded.
Available for Professional plans and above
Organization OID.
Full-text query against task name, description, and attachments. Note: does not include comment content or comment attachments. Indexing can take ~10 seconds or more after updates.
Task name filter. Prefix with ~ for regex, ~* for case-insensitive regex. Use text for full-text search.
Task description filter. Prefix with ~ for regex, ~* for case-insensitive regex.
Task status filter. Specify 0–100, or "active" / "completed".
Return only scheduled tasks (start or due is set). If scheduled=false, returns only tasks where neither start nor due is set.
Return only "My Tasks" (assigned to me, or created by me and scheduled but unassigned).
Filter by assignee. Each value is a user OID, user ID, or email.
Combine values with , (AND), | (OR), and ! (NOT). AND binds tighter than OR.
Examples:
alice— a single user (by ID)[email protected]— by emailalice,bob— assigned to bothalice|bob— assigned to eitheralice,!bob— assigned to alice but not bobalice,bob|carol—(alice AND bob) OR carol
Filter by assignor (the user who set the assignment). Each value is a user OID, user ID, or email. Combine with , (AND), | (OR), ! (NOT); AND binds tighter than OR.
Examples: alice, alice,!bob, alice|bob.
Filter by follower. Each value is a user OID, user ID, or email. Combine with , (AND), | (OR), ! (NOT); AND binds tighter than OR.
Examples: alice, alice,!bob, alice|bob.
Filter by tag. Each value is a tag OID or a tag name (names are resolved within the search's organization).
Combine with , (AND), | (OR), ! (NOT); AND binds tighter than OR.
Names containing ,, |, !, ", or whitespace must be wrapped in "...". Inside quotes, write \" for a literal " and \\ for a literal \; any other \x is preserved as two literal characters.
Examples:
Legal— a single tagLegal,!Draft— hasLegalbut notDraft"In Progress",!Done— quoted name with space"Foo\"s Go"|Other— quoted with escaped"
Return only tasks created or modified recently. Specify an integer (days); default 7 if omitted. Supports d, h, m suffixes (e.g., 8h).
Return only tasks with recent comments. Specify an integer (days); default 7 if omitted. Supports d, h, m suffixes (e.g., 8h).
Filter by source ref key. See sourceRef in the task creation API.
Filter by the task's createdAt timestamp. Value grammar:
- Keyword:
past,yesterday,today,tomorrow,upcoming,last7d,next7d,lastWeek,thisWeek,nextWeek - Value op:
{ge|gt|le|lt|eq|ne}:<timestamp>or{between|notBetween}:<timestamp>,<timestamp> <timestamp>is ISO 8601YYYY-MM-DDTHH:MM:SSZ(UTC)- Day boundaries resolve in the caller's timezone; week start follows the caller's locale
paston this field is< now()- Tokens and keywords are case-insensitive
Examples: today, last7d, ge:2026-04-01T00:00:00Z, between:2026-04-01T00:00:00Z,2026-04-30T23:59:59Z.
Filter by the task's editedAt timestamp. Same grammar as created. Note: editedAt is NULL for tasks that have never been edited after creation; such tasks are excluded by every op (use created to filter by creation time).
Examples: today, last7d, ge:2026-04-01T00:00:00Z.
Filter by the task's archivedAt timestamp. Same grammar as created, plus null ops since the field is nullable:
isNull— not archivedisNotNull— archived (any time)
Examples: isNotNull, today, ge:2026-04-01T00:00:00Z.
Filter by the task's reshowAt timestamp (scheduled un-archive). Same grammar as archived (supports isNull / isNotNull).
Examples: isNotNull, today, between:2026-04-01T00:00:00Z,2026-04-30T23:59:59Z.
Filter by the task's toggledAt timestamp (when its completion status was last changed). Same grammar as archived (supports isNull / isNotNull).
Examples: today, isNotNull, ge:2026-04-01T00:00:00Z.
Filter by the task's start date/time. Value grammar:
- Keyword:
past,yesterday,today,tomorrow,upcoming,last7d,next7d,lastWeek,thisWeek,nextWeek - Value op:
{ge|gt|le|lt|eq|ne}:<value>or{between|notBetween}:<value>,<value> - Null op:
isNull,isNotNull <value>is either a date (YYYY-MM-DD) or a full ISO 8601 timestamp (YYYY-MM-DDTHH:MM:SSZ)- A date operand expands to a whole-day window in the caller's timezone (
ge:2026-04-01means "on or after Apr 1 in the caller's calendar");gt:D/le:Duse end-of-day,lt:D/ge:Duse start-of-day pastonstart/dueis< today 00:00in the caller's timezone (not< now())upcomingonstart/dueis the window[tomorrow, today + 7 days)
Examples: today, upcoming, ge:2026-04-01, between:2026-04-01,2026-04-30, isNull.
Filter by the task's due date/time. Same grammar and semantics as start (accepts date-only operands, isNull/isNotNull, and the same keyword/value ops).
Examples: today, upcoming, le:2026-04-30, isNotNull.
Maximum number of tasks to return. Default: 30. Use no to return all matches.
Note: On free plans, this cannot exceed 30 or no (unlimited).
OK — matching tasks (may be empty).
Bad Request — invalid query params.
Forbidden — caller lacks permission to search this organization.
Not Found — organization does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"parent": {
"id": 12
}
}
]
Get an existing task by its ID.
Returns the full task record.
ID of the task's project. Specify "-" for personal tasks in My Tasks.
Task ID.
OK — task record.
Not Found — task does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"parent": {
"id": 12,
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Get an existing task by its OID.
Returns the full task record.
Task OID.
OK — task record.
Not Found — task does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"parent": {
"id": 12,
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Get all root tasks of the given project.
Returns all root tasks of the project as a bare JSON array.
Pagination is opt-in via ?limit=N (1..1000). Without ?limit= or ?cursor=, the response is the full bare array. When ?limit=N is set and more results exist, the LAST item carries "cursor": "<token>" — pass it back as ?cursor=<token> (plus the same ?limit= and any filter like ?status=) to fetch the next page. End of stream is signalled by the absence of cursor on the last item. ?limit=no is an explicit "return everything". Same pagination grammar applies to the subtasks endpoint GET /task/list/id/{projectId}/{taskId}.
Pair with ?return=compact to render each item as {oid, id, cursor?} for navigation/lookup workloads at minimal token cost.
Rate-limit cost (#24558): proportional to the number of items returned — max(1, ceil(items / 100)) units. So ?limit=100 (or fewer items) costs 1, ?limit=1000 costs 10, ?limit=no returning 5,000 items costs 50. Symmetric with bulk-write cost.
To retrieve all tasks (including all subtasks), use the search API.
ID of the task's project. Specify "-" for personal tasks in My Tasks.
Page size (1..1000). Omit for the default unpaginated full list, or pass no to be explicit. When set and more results exist, the last item in the response carries a cursor field.
Continuation token. Pass back the cursor value from the last item of the previous page to fetch the next page. Re-pass any filter (?status=) and ?limit= on the same call.
OK — bare array of root tasks (may be empty). With ?limit=N, the last item may carry a cursor field if more results exist.
Bad Request — invalid ?limit= value, or ?cursor= doesn't belong to this list.
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
]
Get the subtasks of the given task.
By default returns only the direct subtasks of {taskId} (one level). To fetch a whole subtree in a single call, set ?depth=N or ?depth=full — each task in the response then carries a nested tasks field with its walked children, recursively.
When to use which:
- Default (no
?depth): you only need the immediate children. ?depth=2or3: small subtree where you know the shape.?depth=full: full subtree snapshot — pair with?return=compactfor navigation/lookup workloads to keep the payload (and LLM-token cost) small.
Per-tier total-nodes cap when ?depth>1: Free → rejected (402), Pro → 500, Premium → 2,000, Enterprise → unlimited (bounded only by the global response-size ceiling). When the cap fires mid-walk, the partial subtree is returned and the
last emitted sibling at the cropped level carries "cropped": true. Recovery: call GET /task/list/id/{prj}/{croppedSiblingParentId} (default ?depth=1) to fetch the rest of that level — flat single-level lists have no cap.
Tree shape signals for the agent:
- Node has a
tasksarray → its children were walked. Empty array means a true leaf. - Node has no
tasksfield → its children were not walked (depth limit reached, or cap fired before reaching it). Drill in if you need them. - Node has
"cropped": true→ more siblings of this node exist at the same level.
Pagination (flat path only, cannot be combined with ?depth>1): pass ?limit=N (1..1000) to opt into paginated chunks. When more results exist, the LAST item carries "cursor": "<token>" — pass it back as ?cursor=<token> (plus the same ?limit= and ?status=) for the next page. Without ?limit= / ?cursor=, the response is the full bare array. ?limit=no is an explicit "return everything". Composes with ?return=compact.
Notes: Subtree responses (?depth>1) omit the per-task childCount field — the tasks array is the canonical signal. The flat default (?depth=1) and single-task GET /task/{oid} still include childCount. ?depth>1 cannot be combined with ?limit= or ?cursor= (returns 400).
Rate-limit cost (#24558): proportional to the number of tasks returned across the whole tree — max(1, ceil(items / 100)) units. So a flat ?limit=100 (or fewer) costs 1; a ?depth=full returning 500 nodes costs 5; a ?depth=full returning 2,000 (Premium cap) costs 20.
ID of the task's project. Specify "-" for personal tasks in My Tasks.
Parent task ID.
Task status filter. Specify a value 0–100, or use "active" for active tasks or "completed" for completed tasks.
Subtree depth. Omit or 1 for the default flat single-level list (immediate children only). Any positive integer returns a multi-level subtree capped at the given depth; full walks every level (bounded by the per-tier total-nodes cap). ?depth>1 requires the Professional plan or above and cannot be combined with ?limit/?cursor.
Page size for the flat path (1..1000). Omit for the default unpaginated full list. Pass no to be explicit. When set and more results exist, the last item in the response carries a cursor field. Cannot be combined with ?depth>1.
Continuation token. Pass back the cursor value from the last item of the previous page to fetch the next page. Re-pass ?limit= and any filter (?status=) on the same call. Cannot be combined with ?depth>1.
Response shape. full (default) returns the standard task records; compact returns identifier-only items — {oid, id, tasks?, cropped?} in subtree mode, {oid, id, cursor?} in flat / paginated mode. Pair with ?depth=full (subtree) or ?limit=N (paginated) to fetch a whole subtree's / page's identifier graph at minimal token cost; the agent then GET /task/{oid} for only the items it wants in detail.
OK — list of subtasks (may be empty). With ?depth>1, each entry may carry nested tasks + cropped fields.
Bad Request — invalid depth / limit value, ?depth>1 without a task ID in the URL, ?depth>1 combined with ?limit/?cursor, or ?cursor= doesn't belong to this list.
Payment Required — ?depth>1 requires the Professional plan or above. Use ?depth=1 (or omit ?depth) for unrestricted flat per-level listing.
Not Found — project or parent task does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
]
Get all root tasks of the given project or all subtasks of the given task.
Returns all root tasks of a project or all direct subtasks of a task by OID. If the OID is a project, root tasks are returned. If it is a task, its direct subtasks are returned. Note: only one level is returned—subtasks of subtasks are not included; retrieve them recursively.
OID of the project or parent task. Specify "-" to retrieve My Tasks (no specific project).
OK — list of tasks (may be empty).
Not Found — project or parent task does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
]
Search tasks in a project by project ID.
Returns tasks that match the specified criteria in the project.
Custom Field Filtering
You can filter by custom fields by passing the field name as a query parameter (case-insensitive). For example, ?cost=13 or ?approvedBy=john.doe.
Supported field types and value formats:
| Type | Value format | Example |
|---|---|---|
| Number, Money | Numeric value | cost=13 |
| Checkbox | true or false |
done=true |
| Select | Option name | priority=High |
| User | User ID, email, or OID | approvedBy=john.doe |
| Task | Task ID (integer) or OID | blockedBy=42 |
| Email, Hyperlink | Exact value, or prefix with ~ for regex, ~* for case-insensitive regex |
website=~example\.com |
| Duration | Seconds, or with suffix: d (days), h (hours), m (minutes) |
estimate=2h |
| Date | Same grammar as the start / due query params — keyword ops (today, past, last7d, ...), value ops (ge:<v>, lt:<v>, between:<v1>,<v2>, ...), and null ops (isNull, isNotNull). <v> is YYYY-MM-DD or ISO 8601 YYYY-MM-DDTHH:MM:SSZ; timestamp operands require a withTime: true field. |
approvedAt=today, approvedAt=ge:2026-04-01, approvedAt=between:2026-04-01,2026-04-30, approvedAt=isNull |
Not supported: Text (use text for full-text search instead), Formula, File, Lookup.
Pagination
Pass ?limit=N to cap each response at N items. When more results exist, the
last item carries a cursor field; pass its value back as ?cursor=<token> (along with the same ?limit= and any filter) to fetch the next page. End of stream is signalled by the absence of cursor on the last item.
Example loop:
GET /task/search/id/my_project?status=active&limit=30
→ 30 items; last has cursor: "crsr1u"
GET /task/search/id/my_project?status=active&limit=30&cursor=crsr1u
→ 30 items; last has cursor: "crsr11k"
GET /task/search/id/my_project?status=active&limit=30&cursor=crsr11k
→ 12 items; no cursor on last item → stop
Cannot be combined with ?sublist=. The cursor token is opaque — use it verbatim from the previous response.
Rate-limit cost: proportional to the number of items returned — max(1, ceil(items / 100)) units. So ?limit=100 (or fewer matches) costs 1, ?limit=1000 costs 10, ?limit=no returning 5,000 matches costs 50.
ID of the task's project. Specify "-" for personal tasks in My Tasks.
Full-text query against task name, description, and attachments. Note: does not include comment content or comment attachments. Indexing can take ~10 seconds or more after updates.
Task name filter. Prefix with ~ for regex, ~* for case-insensitive regex. Use text for full-text search.
Task description filter. Prefix with ~ for regex, ~* for case-insensitive regex.
Task sublist ID or OID filter.
Task status filter. Specify 0–100, or "active" / "completed".
Return only scheduled tasks (start or due is set). If scheduled=false, returns only tasks where neither start nor due is set.
Return only "My Tasks" (assigned to me, or created by me and scheduled but unassigned).
Filter by assignee. Each value is a user OID, user ID, or email.
Combine values with , (AND), | (OR), and ! (NOT). AND binds tighter than OR.
Examples:
alice— a single user (by ID)[email protected]— by emailalice,bob— assigned to bothalice|bob— assigned to eitheralice,!bob— assigned to alice but not bobalice,bob|carol—(alice AND bob) OR carol
Filter by assignor (the user who set the assignment). Each value is a user OID, user ID, or email. Combine with , (AND), | (OR), ! (NOT); AND binds tighter than OR.
Examples: alice, alice,!bob, alice|bob.
Filter by follower. Each value is a user OID, user ID, or email. Combine with , (AND), | (OR), ! (NOT); AND binds tighter than OR.
Examples: alice, alice,!bob, alice|bob.
Filter by tag. Each value is a tag OID or a tag name (names are resolved within the search's organization).
Combine with , (AND), | (OR), ! (NOT); AND binds tighter than OR.
Names containing ,, |, !, ", or whitespace must be wrapped in "...". Inside quotes, write \" for a literal " and \\ for a literal \; any other \x is preserved as two literal characters.
Examples:
Legal— a single tagLegal,!Draft— hasLegalbut notDraft"In Progress",!Done— quoted name with space"Foo\"s Go"|Other— quoted with escaped"
Return only tasks created or modified recently. Specify an integer (days); default 7 if omitted. Supports d, h, m suffixes (e.g., 8h).
Return only tasks with recent comments. Specify an integer (days); default 7 if omitted. Supports d, h, m suffixes (e.g., 8h).
Filter by source ref key. See sourceRef in the task creation API.
Filter by the task's createdAt timestamp. Value grammar:
- Keyword:
past,yesterday,today,tomorrow,upcoming,last7d,next7d,lastWeek,thisWeek,nextWeek - Value op:
{ge|gt|le|lt|eq|ne}:<timestamp>or{between|notBetween}:<timestamp>,<timestamp> <timestamp>is ISO 8601YYYY-MM-DDTHH:MM:SSZ(UTC)- Day boundaries resolve in the caller's timezone; week start follows the caller's locale
paston this field is< now()- Tokens and keywords are case-insensitive
Examples: today, last7d, ge:2026-04-01T00:00:00Z, between:2026-04-01T00:00:00Z,2026-04-30T23:59:59Z.
Filter by the task's editedAt timestamp. Same grammar as created. Note: editedAt is NULL for tasks that have never been edited after creation; such tasks are excluded by every op (use created to filter by creation time).
Examples: today, last7d, ge:2026-04-01T00:00:00Z.
Filter by the task's archivedAt timestamp. Same grammar as created, plus null ops since the field is nullable:
isNull— not archivedisNotNull— archived (any time)
Examples: isNotNull, today, ge:2026-04-01T00:00:00Z.
Filter by the task's reshowAt timestamp (scheduled un-archive). Same grammar as archived (supports isNull / isNotNull).
Examples: isNotNull, today, between:2026-04-01T00:00:00Z,2026-04-30T23:59:59Z.
Filter by the task's toggledAt timestamp (when its completion status was last changed). Same grammar as archived (supports isNull / isNotNull).
Examples: today, isNotNull, ge:2026-04-01T00:00:00Z.
Filter by the task's start date/time. Value grammar:
- Keyword:
past,yesterday,today,tomorrow,upcoming,last7d,next7d,lastWeek,thisWeek,nextWeek - Value op:
{ge|gt|le|lt|eq|ne}:<value>or{between|notBetween}:<value>,<value> - Null op:
isNull,isNotNull <value>is either a date (YYYY-MM-DD) or a full ISO 8601 timestamp (YYYY-MM-DDTHH:MM:SSZ)- A date operand expands to a whole-day window in the caller's timezone (
ge:2026-04-01means "on or after Apr 1 in the caller's calendar");gt:D/le:Duse end-of-day,lt:D/ge:Duse start-of-day pastonstart/dueis< today 00:00in the caller's timezone (not< now())upcomingonstart/dueis the window[tomorrow, today + 7 days)
Examples: today, upcoming, ge:2026-04-01, between:2026-04-01,2026-04-30, isNull.
Filter by the task's due date/time. Same grammar and semantics as start (accepts date-only operands, isNull/isNotNull, and the same keyword/value ops).
Examples: today, upcoming, le:2026-04-30, isNotNull.
Filter by task priority. Each value is an integer (-1..2) or a label (low, medium, high, urgent, none; case-insensitive).
Combine with , (AND), | (OR), ! (NOT). AND of two distinct positives is the empty set (a column has exactly one priority); negation works as expected.
Examples: high, 1, high|urgent, !low.
Filter by task type. Values: normal (or task), section, milestone. Combine with , / | / !. Useful for structural navigation (e.g., listing only sections in a project).
Examples: section, section|milestone, !section.
Filter by the user who created the task. Each value is a user OID, user ID, or email. Combine with , / | / ! (same grammar as assignee).
Examples: alice, alice|bob, !alice.
Filter on whether the task has a recurrence configured. true (or empty) returns only recurring tasks; false returns only non-recurring tasks. Any other value returns 400 Bad Request.
Maximum number of tasks to return. Default: 30. Use no to return all matches.
Note: On free plans, this cannot exceed 30 or no (unlimited).
Continuation token from the previous page's last item. See
Pagination in the operation notes for the loop. Cannot be combined with ?sublist=.
OK — matching tasks (may be empty). With ?limit=N, the last item may carry a cursor field if more results exist.
Bad Request — invalid query params (incl. malformed cursor).
Forbidden — caller lacks permission to search this project.
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"parent": {
"id": 12
}
}
]
Search tasks in a project by project OID.
Returns tasks that match the specified criteria in the project.
Custom Field Filtering
You can filter by custom fields by passing the field name as a query parameter (case-insensitive). For example, ?cost=13 or ?approvedBy=john.doe.
Supported field types and value formats:
| Type | Value format | Example |
|---|---|---|
| Number, Money | Numeric value | cost=13 |
| Checkbox | true or false |
done=true |
| Select | Option name | priority=High |
| User | User ID, email, or OID | approvedBy=john.doe |
| Task | Task ID (integer) or OID | blockedBy=42 |
| Email, Hyperlink | Exact value, or prefix with ~ for regex, ~* for case-insensitive regex |
website=~example\.com |
| Duration | Seconds, or with suffix: d (days), h (hours), m (minutes) |
estimate=2h |
| Date | Same grammar as the start / due query params — keyword ops (today, past, last7d, ...), value ops (ge:<v>, lt:<v>, between:<v1>,<v2>, ...), and null ops (isNull, isNotNull). <v> is YYYY-MM-DD or ISO 8601 YYYY-MM-DDTHH:MM:SSZ; timestamp operands require a withTime: true field. |
approvedAt=today, approvedAt=ge:2026-04-01, approvedAt=between:2026-04-01,2026-04-30, approvedAt=isNull |
Not supported: Text (use text for full-text search instead), Formula, File, Lookup.
Pagination
Pass ?limit=N to cap each response at N items. When more results exist, the
last item carries a cursor field; pass its value back as ?cursor=<token> (along with the same ?limit= and any filter) to fetch the next page. End of stream is signalled by the absence of cursor on the last item.
Example loop:
GET /task/search/id/my_project?status=active&limit=30
→ 30 items; last has cursor: "crsr1u"
GET /task/search/id/my_project?status=active&limit=30&cursor=crsr1u
→ 30 items; last has cursor: "crsr11k"
GET /task/search/id/my_project?status=active&limit=30&cursor=crsr11k
→ 12 items; no cursor on last item → stop
Cannot be combined with ?sublist=. The cursor token is opaque — use it verbatim from the previous response.
Rate-limit cost: proportional to the number of items returned — max(1, ceil(items / 100)) units. So ?limit=100 (or fewer matches) costs 1, ?limit=1000 costs 10, ?limit=no returning 5,000 matches costs 50.
Project OID. Specify "-" to search in My Tasks (no specific project).
Full-text query against task name, description, and attachments. Note: does not include comment content or comment attachments. Indexing can take ~10 seconds or more after updates.
Task name filter. Prefix with ~ for regex, ~* for case-insensitive regex. Use text for full-text search.
Task description filter. Prefix with ~ for regex, ~* for case-insensitive regex.
Task sublist ID or OID filter.
Task status filter. Specify 0–100, or "active" / "completed".
Return only scheduled tasks (start or due is set). If scheduled=false, returns only tasks where neither start nor due is set.
Return only "My Tasks" (assigned to me, or created by me and scheduled but unassigned).
Filter by assignee. Each value is a user OID, user ID, or email.
Combine values with , (AND), | (OR), and ! (NOT). AND binds tighter than OR.
Examples:
alice— a single user (by ID)[email protected]— by emailalice,bob— assigned to bothalice|bob— assigned to eitheralice,!bob— assigned to alice but not bobalice,bob|carol—(alice AND bob) OR carol
Filter by assignor (the user who set the assignment). Each value is a user OID, user ID, or email. Combine with , (AND), | (OR), ! (NOT); AND binds tighter than OR.
Examples: alice, alice,!bob, alice|bob.
Filter by follower. Each value is a user OID, user ID, or email. Combine with , (AND), | (OR), ! (NOT); AND binds tighter than OR.
Examples: alice, alice,!bob, alice|bob.
Filter by tag. Each value is a tag OID or a tag name (names are resolved within the search's organization).
Combine with , (AND), | (OR), ! (NOT); AND binds tighter than OR.
Names containing ,, |, !, ", or whitespace must be wrapped in "...". Inside quotes, write \" for a literal " and \\ for a literal \; any other \x is preserved as two literal characters.
Examples:
Legal— a single tagLegal,!Draft— hasLegalbut notDraft"In Progress",!Done— quoted name with space"Foo\"s Go"|Other— quoted with escaped"
Return only tasks created or modified recently. Specify an integer (days); default 7 if omitted. Supports d, h, m suffixes (e.g., 8h).
Return only tasks with recent comments. Specify an integer (days); default 7 if omitted. Supports d, h, m suffixes (e.g., 8h).
Filter by source ref key. See sourceRef in the task creation API.
Filter by the task's createdAt timestamp. Value grammar:
- Keyword:
past,yesterday,today,tomorrow,upcoming,last7d,next7d,lastWeek,thisWeek,nextWeek - Value op:
{ge|gt|le|lt|eq|ne}:<timestamp>or{between|notBetween}:<timestamp>,<timestamp> <timestamp>is ISO 8601YYYY-MM-DDTHH:MM:SSZ(UTC)- Day boundaries resolve in the caller's timezone; week start follows the caller's locale
paston this field is< now()- Tokens and keywords are case-insensitive
Examples: today, last7d, ge:2026-04-01T00:00:00Z, between:2026-04-01T00:00:00Z,2026-04-30T23:59:59Z.
Filter by the task's editedAt timestamp. Same grammar as created. Note: editedAt is NULL for tasks that have never been edited after creation; such tasks are excluded by every op (use created to filter by creation time).
Examples: today, last7d, ge:2026-04-01T00:00:00Z.
Filter by the task's archivedAt timestamp. Same grammar as created, plus null ops since the field is nullable:
isNull— not archivedisNotNull— archived (any time)
Examples: isNotNull, today, ge:2026-04-01T00:00:00Z.
Filter by the task's reshowAt timestamp (scheduled un-archive). Same grammar as archived (supports isNull / isNotNull).
Examples: isNotNull, today, between:2026-04-01T00:00:00Z,2026-04-30T23:59:59Z.
Filter by the task's toggledAt timestamp (when its completion status was last changed). Same grammar as archived (supports isNull / isNotNull).
Examples: today, isNotNull, ge:2026-04-01T00:00:00Z.
Filter by the task's start date/time. Value grammar:
- Keyword:
past,yesterday,today,tomorrow,upcoming,last7d,next7d,lastWeek,thisWeek,nextWeek - Value op:
{ge|gt|le|lt|eq|ne}:<value>or{between|notBetween}:<value>,<value> - Null op:
isNull,isNotNull <value>is either a date (YYYY-MM-DD) or a full ISO 8601 timestamp (YYYY-MM-DDTHH:MM:SSZ)- A date operand expands to a whole-day window in the caller's timezone (
ge:2026-04-01means "on or after Apr 1 in the caller's calendar");gt:D/le:Duse end-of-day,lt:D/ge:Duse start-of-day pastonstart/dueis< today 00:00in the caller's timezone (not< now())upcomingonstart/dueis the window[tomorrow, today + 7 days)
Examples: today, upcoming, ge:2026-04-01, between:2026-04-01,2026-04-30, isNull.
Filter by the task's due date/time. Same grammar and semantics as start (accepts date-only operands, isNull/isNotNull, and the same keyword/value ops).
Examples: today, upcoming, le:2026-04-30, isNotNull.
Maximum number of tasks to return. Default: 30. Use no to return all matches.
Note: On free plans, this cannot exceed 30 or no (unlimited).
OK — matching tasks (may be empty). With ?limit=N, the last item may carry a cursor field if more results exist.
Bad Request — invalid query params (incl. malformed cursor).
Forbidden — caller lacks permission to search this project.
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"parent": {
"id": 12
}
}
]
Bulk-move N tasks within a project by ID.
Repositions up to
300 tasks within a project to the same destination anchor in one transaction. Same query-param grammar as single-task PUT /task/move/...:
?task=root— move items to project root (only valid with default?position=parent).?task={ref}&position=parent(default) — items become children of the reference task.?task={ref}&position=before— items become siblings immediately before the reference.?task={ref}&position=after— items become siblings immediately after the reference.
{ref} follows the URL grammar (same as single-task move): the by-ID URL form expects an integer task ID (or root); the by-OID form expects a task OID. Items in the
body use the bulk mixed-form convention (OID / integer ID / #<id> string) — same as bulk-remove.
Example: PUT /task/bulk-move/id/my_project?task=99&return=compact
Request body (mixed-form refs):
[ 42, "#17", "iuRRiKoyrxdBFhFTTo" ]
Response (compact mode; slot 1 was already removed by another caller, so it's null):
[
{ "oid": "abc1Foo", "id": 42 },
null,
{ "oid": "iuRRiKoyrxdBFhFTTo", "id": 88 }
]
Atomic on real bugs: validation / permission / DB errors (cycle detection — making a task its own ancestor — throws 400) propagate as {code, message} with items[i]: prefix and roll back the whole batch.
Skip-not-found: items whose target task can't be resolved (already removed, never existed, cascade-removed by an earlier item, in a different project, etc.) are silently skipped — the corresponding response slot is null. Idempotent for agents.
Order preservation (sliding chain): items are moved in submitted order. Items 1..N-1 are positioned
after the previous successful move, regardless of the URL ?position= — without this, ?position=after R would reverse the batch.
Rate-limit cost: each bulk call costs N units against the per-minute / per-hour API quota, where N is items.length — same total cost as N equivalent single-task moves.
All items must belong to the project in the URL. Cross-project moves go through bulk-transfer (see #24555).
Project ID.
Reference task ID (the destination anchor for the whole batch), or root to move items to the project root.
(Optional) Placement of moved items relative to the reference: parent (default), before, or after. before / after require ?task= to refer to a task (not root).
(Optional) Response shape — full (default) or compact.
Request Example
[
"object"
]
OK — array of moved tasks (slots for not-found items are null).
Bad Request — body not a JSON array, empty, over the 300-item cap, item shape error, missing ?task=, invalid ?position=, ?task=root&position=before|after, cycle detection (item is an ancestor of ?task=), or cross-project ref. Whole batch rolled back.
Forbidden — caller lacks permission on the project or any task in the batch (whole batch rolled back).
Not Found — project (URL scope) or ?task= reference does not exist. (Item-level not-found is silent skip.)
Payload Too Large.
Too Many Requests — the batch's rate-limit cost (items.length units) would exceed the caller's per-minute / per-hour API quota.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"parent": {
"id": 12
}
}
]
Response Example (400 Bad Request)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (403 Forbidden)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (404 Not Found)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (413 Request Entity Too Large)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (429 Too Many Requests)
{
"code": 429,
"message": "Something went wrong."
}
Bulk-move N tasks within a project by OID.
OID-form of PUT /task/bulk-move/id/{projectId} — see that endpoint for body shape, atomic / skip-not-found semantics, sliding-chain order preservation, and rate-limit details.
Note: {ref} (in ?task=) is a task OID (or root) in this URL form, matching the by-OID grammar.
Project OID.
Reference task OID (destination anchor), or root.
(Optional) parent (default), before, or after.
(Optional) Response shape — full (default) or compact.
Request Example
[
"object"
]
OK — array of moved tasks.
Bad Request.
Forbidden.
Not Found — project does not exist.
Payload Too Large.
Too Many Requests.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"parent": {
"id": 12
}
}
]
Response Example (400 Bad Request)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (403 Forbidden)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (404 Not Found)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (413 Request Entity Too Large)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (429 Too Many Requests)
{
"code": 429,
"message": "Something went wrong."
}
Bulk-transfer N tasks across projects by ID.
Transfers up to
300 tasks from the source project (URL path) to a different target project (?project=) in one transaction. Same query-param grammar as single-task PUT /task/transfer/...:
?project={target}(required) — target project ID, or-for the user's Inbox.?task={ref}(optional) — destination anchor in the target project. Omitted, empty, orroot→ items become root tasks of the target.?position=—parent(default),before, orafter.?invite,?tag,?status,?custom-field— auto-remap flags, all defaulttrue.
Items in the
body use the bulk mixed-form convention (OID / integer ID / #<id> string) — same as bulk-remove / bulk-move.
Example: PUT /task/bulk-transfer/id/my_project?project=archive_2026&task=root&return=compact
Request body (mixed-form refs):
[ 42, "#99", "iuRRiKoyrxdBFhFTTo" ]
Response (compact mode; OIDs are preserved across transfer, IDs are reassigned from the target's counter):
[
{ "oid": "abc1Foo", "id": 7 },
null,
{ "oid": "iuRRiKoyrxdBFhFTTo", "id": 8 }
]
Atomic on real bugs: validation / permission / DB errors propagate as {code, message} with items[i]: prefix and roll back
both source and target locks.
Skip-not-found: items not in the source project (already in target / in another project / removed / never existed) are silently skipped — the response slot is null.
Source == target: if ?project= resolves to the same project as the URL source, the whole batch is rejected with 400 (use bulk-move for within-project reorder).
Order preservation (sliding chain): items are transferred in submitted order — items 1..N-1 land
after the previous successful transfer, regardless of ?position=.
Rate-limit cost: each bulk call costs N units against the per-minute / per-hour API quota, where N is items.length — same total cost as N equivalent single-task transfers.
Source project ID.
Target project ID. Specify - for the user's Inbox.
(Optional) Reference task ID in the target project (destination anchor for the whole batch), or root to transfer items to the target project's root.
(Optional) Placement of transferred items relative to the reference: parent (default), before, or after. before / after require ?task= to refer to a task (not root).
(Optional, default true) Auto-invite assignees to the target project if not already members.
(Optional, default true) Auto-create tags in the target project if not already present.
(Optional, default true) Auto-remap statuses to the target project.
(Optional, default true) Auto-create / remap non-empty custom fields in the target project.
(Optional) Response shape — full (default) or compact.
Request Example
[
"object"
]
OK — array of transferred tasks (slots for not-found items are null).
Bad Request — body not a JSON array, empty, over the 300-item cap, item shape error, missing ?project=, invalid ?position=, ?task=root&position=before|after, ?project= resolves to the URL source project, or any per-item validation failure. Whole batch rolled back.
Forbidden — caller lacks permission on the source or target project, or on any individual task in the batch. Whole batch rolled back.
Not Found — source project, target project, or ?task= reference does not exist. (Item-level not-found is silent skip.)
Payload Too Large.
Too Many Requests — the batch's rate-limit cost (items.length units) would exceed the caller's per-minute / per-hour API quota.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"parent": {
"id": 12
}
}
]
Response Example (400 Bad Request)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (403 Forbidden)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (404 Not Found)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (413 Request Entity Too Large)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (429 Too Many Requests)
{
"code": 429,
"message": "Something went wrong."
}
Bulk-transfer N tasks across projects by OID.
OID-form of PUT /task/bulk-transfer/id/{sourceProjectId} — see that endpoint for body shape, atomic / skip-not-found semantics, sliding-chain order preservation, auto-remap flags, and rate-limit details.
Note: ?project= and ?task= are OIDs (or root / -) in this URL form, matching the by-OID grammar.
Source project OID.
Target project OID. Specify - for the user's Inbox.
(Optional) Reference task OID, or root.
(Optional) parent (default), before, or after.
(Optional, default true)
(Optional, default true)
(Optional, default true)
(Optional, default true)
(Optional) Response shape — full (default) or compact.
Request Example
[
"object"
]
OK — array of transferred tasks.
Bad Request.
Forbidden.
Not Found — source or target project does not exist.
Payload Too Large.
Too Many Requests.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"parent": {
"id": 12
}
}
]
Response Example (400 Bad Request)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (403 Forbidden)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (404 Not Found)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (413 Request Entity Too Large)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (429 Too Many Requests)
{
"code": 429,
"message": "Something went wrong."
}
Bulk-update N tasks in a project by ID.
Updates up to
300 tasks in one transaction. Body is a top-level JSON array of BulkUpdateTaskItem — each item carries exactly one of oid / id plus the UpdateTaskBody-shape fields to apply.
Example: PUT /task/bulk-update/id/my_project?return=compact
Request body:
[
{ "id": 42, "status": 100, "addTags": ["done"] },
{ "id": 99, "addAssignees": ["[email protected]"] },
{ "id": 17, "name": "Renamed" }
]
Response (compact mode; slot for a not-found item is null):
[
{ "oid": "iuRRiKoyrxdBFhFTTo", "id": 42 },
null,
{ "oid": "defLmnQrSt", "id": 17 }
]
Atomic on real bugs: validation / permission / DB errors propagate as {code, message} with items[i]: prefix and roll back the whole batch. Example error:
{ "code": 400, "message": "items[1]: `priority`: Invalid value 99 (expected -1, 0, 1, or 2)" }
Skip-not-found: items whose target task can't be found (already removed, never existed, etc.) are silently skipped — the corresponding response slot is null and the rest of the batch proceeds. This makes the endpoint
idempotent for agents — safe to re-submit after a partial network failure or concurrent removal without diffing state first. Shape errors (both / neither oid and id, malformed ref) still 400 + rollback — those are typos, not state races.
Rate-limit cost: each bulk call costs N units against the per-minute / per-hour API quota, where N is items.length — the same total cost as N equivalent single-task PUTs. The cost does not adjust for skipped items; the per-item resolve still runs.
Project ID.
(Optional) Response shape — full (default) or compact.
Request Example
[
{
"oid": "iuRRiKoyrxdBFhFTTo",
"id": 42,
"description": "This is a **cool** task.",
"assignees": "[\"me\", \"[email protected]\"]",
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"recurrence": {
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"peekaboo": "true",
"section": true,
"milestone": true,
"asUser": true,
"followers": "[\"[email protected]\"]",
"successors": "[\"#13\"]",
"yourField": "object",
"addTags": "[\"urgent\"]",
"removeTags": "[\"draft\"]",
"addAssignees": "[\"me\"]",
"removeAssignees": "[\"[email protected]\"]",
"addFollowers": "[\"me\"]",
"removeFollowers": "[\"[email protected]\"]",
"addSuccessors": "[\"#13\"]",
"removeSuccessors": "[\"#13\"]",
"tags": "[\"urgent\", \"design\"]",
"name": "New idea",
"etc": 0,
"status": 100,
"priority": 0,
"sourceRef": "{\"text\": \"Source: [Gmail](https://gmail.com/link)\"}"
}
]
OK — array of updated tasks (slots for not-found items are null).
Bad Request — body not a JSON array, empty, over the 300-item cap, item shape error (both/neither oid+id, malformed ref), or any per-item validation failure (whole batch rolled back).
Forbidden — caller lacks permission on the project or any task in the batch (whole batch rolled back).
Not Found — project does not exist. (Item-level not-found is silent skip.)
Payload Too Large.
Too Many Requests — the batch's rate-limit cost (items.length units) would exceed the caller's per-minute / per-hour API quota.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
]
Response Example (400 Bad Request)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (403 Forbidden)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (404 Not Found)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (413 Request Entity Too Large)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (429 Too Many Requests)
{
"code": 429,
"message": "Something went wrong."
}
Bulk-update N tasks in a project by OID.
OID-form of PUT /task/bulk-update/id/{projectId} — see that endpoint for body shape, atomic semantics, skip-not-found behaviour, and response details.
Project OID.
(Optional) Response shape — full (default) or compact.
Request Example
[
{
"oid": "iuRRiKoyrxdBFhFTTo",
"id": 42,
"description": "This is a **cool** task.",
"assignees": "[\"me\", \"[email protected]\"]",
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"recurrence": {
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"peekaboo": "true",
"section": true,
"milestone": true,
"asUser": true,
"followers": "[\"[email protected]\"]",
"successors": "[\"#13\"]",
"yourField": "object",
"addTags": "[\"urgent\"]",
"removeTags": "[\"draft\"]",
"addAssignees": "[\"me\"]",
"removeAssignees": "[\"[email protected]\"]",
"addFollowers": "[\"me\"]",
"removeFollowers": "[\"[email protected]\"]",
"addSuccessors": "[\"#13\"]",
"removeSuccessors": "[\"#13\"]",
"tags": "[\"urgent\", \"design\"]",
"name": "New idea",
"etc": 0,
"status": 100,
"priority": 0,
"sourceRef": "{\"text\": \"Source: [Gmail](https://gmail.com/link)\"}"
}
]
OK — array of updated tasks.
Bad Request.
Forbidden.
Not Found — project does not exist.
Payload Too Large.
Too Many Requests.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
]
Response Example (400 Bad Request)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (403 Forbidden)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (404 Not Found)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (413 Request Entity Too Large)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (429 Too Many Requests)
{
"code": 429,
"message": "Something went wrong."
}
Move an existing task by its ID.
Moves an existing task under another task as a subtask, reorders it among siblings, or sends it to the root level.
Use ?task= to name the reference task and ?position= to choose placement (parent / before / after).
Examples:
PUT /task/move/id/my_project/42?task=99— reparent (default: child of task 99).PUT /task/move/id/my_project/42?task=99&position=before— place task 42 before task 99.PUT /task/move/id/my_project/42?task=99&position=after— place task 42 after task 99.PUT /task/move/id/my_project/42?task=root— move to root level.
Returns the updated task record.
ID of the task's project. Specify "-" for personal tasks in My Tasks.
Task ID to be moved.
Reference task ID. How it's used depends on position:
parent(default): the moved task becomes a child oftask.before/after: the moved task is placed as a sibling, undertask's parent.
Specify root to move to the root level (only valid with the default parent position).
(Optional) Placement relative to task:
parent(default): child oftask.before: sibling immediately beforetask.after: sibling immediately aftertask.
Omitted or empty → same as parent. Any other value returns 400 Bad Request. before / after require task to refer to a task (not root).
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
OK — updated task record.
Bad Request — invalid task or position.
Forbidden — caller lacks permission to move this task.
Not Found — task or reference task does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"parent": {
"id": 12,
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Move an existing task by its OID.
Moves an existing task under another task as a subtask, reorders it among siblings, or sends it to the root level.
Use ?task= to name the reference task and ?position= to choose placement (parent / before / after). See the by-ID variant PUT /task/move/id/{projectId}/{taskId} for the preferred URL form.
Returns the updated task record.
Task OID to be moved.
Reference task OID. How it's used depends on position:
parent(default): the moved task becomes a child oftask.before/after: the moved task is placed as a sibling, undertask's parent.
Specify root to move to the root level (only valid with the default parent position).
(Optional) Placement relative to task:
parent(default): child oftask.before: sibling immediately beforetask.after: sibling immediately aftertask.
Omitted or empty → same as parent. Any other value returns 400 Bad Request. before / after require task to refer to a task (not root).
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
OK — updated task record.
Bad Request — invalid task or position.
Forbidden — caller lacks permission to move this task.
Not Found — task or reference task does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"parent": {
"id": 12,
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Transfer an existing task by its ID to another project.
Transfers an existing task to another project, optionally positioning it relative to an existing task in the target (?task= + ?position=).
Examples:
PUT /task/transfer/id/my_project/42?project=archive— transfer to root of target project.PUT /task/transfer/id/my_project/42?project=archive&task=99— transfer as a child of task 99 in target.PUT /task/transfer/id/my_project/42?project=archive&task=99&position=before— transfer and place before task 99.PUT /task/transfer/id/my_project/42?project=-— transfer to the user's Inbox.
Returns the updated task record.
ID of the task's project. Specify "-" for personal tasks in My Tasks.
Task ID to be transferred.
ID of the target project to which the task will be transferred. Specify "-" for personal tasks in My Tasks.
(Optional) ID of a reference task in the
target project. How it's used depends on position:
parent(default): the transferred task becomes a child oftask.before/after: the transferred task is placed as a sibling, undertask's parent.
If omitted (or root), the transferred task becomes a root task in the target project.
(Optional) Placement relative to task in the target project:
parent(default): child oftask.before: sibling immediately beforetask.after: sibling immediately aftertask.
Omitted or empty → same as parent. Any other value returns 400 Bad Request. before / after require task to refer to a task (not omitted, not root).
Whether to invite assignees to the target project if they are not already members.
If omitted, true is assumed. Specify false to disable this.
Whether to add tags to the target project if they are not already present.
If omitted, true is assumed. Specify false to disable this.
Whether to add statuses to the target project if they are not already present.
If omitted, true is assumed. Specify false to disable this.
Whether to add non-empty custom fields to the target project if they are not already present.
If omitted, true is assumed. Specify false to disable this.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
OK — updated task record.
Bad Request — invalid project, task, or position.
Forbidden — caller lacks permission to transfer this task.
Not Found — task, target project, or reference task does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"parent": {
"id": 12,
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Transfer an existing task by its OID to another project.
Transfers an existing task to another project, optionally positioning it relative to an existing task in the target (?task= + ?position=). See the by-ID variant PUT /task/transfer/id/{projectId}/{taskId} for the preferred URL form.
Returns the updated task record.
Task OID to be transferred.
OID of the target project to which the task will be transferred. Specify "-" for personal tasks in My Tasks.
(Optional) OID of a reference task in the
target project. How it's used depends on position:
parent(default): the transferred task becomes a child oftask.before/after: the transferred task is placed as a sibling, undertask's parent.
If omitted (or root), the transferred task becomes a root task in the target project.
(Optional) Placement relative to task in the target project:
parent(default): child oftask.before: sibling immediately beforetask.after: sibling immediately aftertask.
Omitted or empty → same as parent. Any other value returns 400 Bad Request. before / after require task to refer to a task (not omitted, not root).
Whether to invite assignees to the target project if they are not already members.
If omitted, true is assumed. Specify false to disable this.
Whether to add tags to the target project if they are not already present.
If omitted, true is assumed. Specify false to disable this.
Whether to add statuses to the target project if they are not already present.
If omitted, true is assumed. Specify false to disable this.
Whether to add non-empty custom fields to the target project if they are not already present.
If omitted, true is assumed. Specify false to disable this.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
OK — updated task record.
Bad Request — invalid project, task, or position.
Forbidden — caller lacks permission to transfer this task.
Not Found — task, target project, or reference task does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"parent": {
"id": 12,
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Undo the removal of a task by its ID.
Restores a previously-removed task. Idempotent: if the task is not currently removed, this is a no-op and returns the current task record.
Subject to the task-creation quota (same as creating a new task): may return 429 Too Many Requests if the organization is at the plan's task limit.
Project ID. Specify "-" for personal tasks in My Tasks.
Task ID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
OK — restored task record.
Forbidden — caller lacks permission to restore this task.
Not Found — task does not exist.
Too Many Requests — organization is at the plan's task limit.
Response Content-Types: application/json
Response Example (200 OK)
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"parent": {
"id": 12,
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Undo the removal of a task by its OID.
Restores a previously-removed task. Idempotent: if the task is not currently removed, this is a no-op and returns the current task record.
Subject to the task-creation quota (same as creating a new task): may return 429 Too Many Requests if the organization is at the plan's task limit.
Task OID.
(Optional) Response shape: full (default) for the full record, or compact for identifiers only. See API description for ?return= semantics.
OK — restored task record.
Forbidden — caller lacks permission to restore this task.
Not Found — task does not exist.
Too Many Requests — organization is at the plan's task limit.
Response Content-Types: application/json
Response Example (200 OK)
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"parent": {
"id": 12,
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Update an existing time log on a task by ID.
Updates an existing
time log on the task identified by project + task ID. The log to update is located by the start, end, and (optional) user query parameters — that triple is the log's identity. The body carries new values; any field omitted
or set to null preserves the existing value (so an agent that always includes every field with null for unchanged ones is safe). To clear note, send an empty string.
Sub-second precision in time values is truncated to whole seconds (in both query params and body).
On success returns the task's full timelogs array. Example:
[
{
"start": "2026-04-26T09:15:00.000Z",
"end": "2026-04-26T10:45:00.000Z",
"billable": true,
"note": "Updated note",
"user": { "oid": "u-123", "name": "John Doe" }
}
]
Project ID.
Task ID.
Start timestamp of the existing log (identifies the log together with end and user). ISO 8601, UTC.
End timestamp of the existing log. ISO 8601, UTC.
(Optional) User the existing log is credited to (OID, ID, or email). Omitted defaults to the authenticated caller.
(Optional) New end timestamp (ISO 8601, UTC). Must be on or after the (new or existing) start. Sub-second precision is truncated to whole seconds. Omit or set null to preserve.
(Optional) New user the log is credited to (OID, ID, or email). Omit or set null to preserve. Send empty string to reset to the authenticated caller.
(Optional) New start timestamp (ISO 8601, UTC). Sub-second precision is truncated to whole seconds. Omit or set null to preserve.
(Optional) New billable flag. Omit or set null to preserve.
(Optional) New note. Omit or set null to preserve. Send empty string to clear.
Request Example
{
"end": "2026-04-26T10:45:00Z",
"user": "[email protected]",
"start": "2026-04-26T09:15:00Z",
"billable": false,
"note": "Updated note"
}
OK — task's full timelogs array.
Bad Request — query params missing or malformed, or new end precedes new start.
Not Found — no log matches the identifying triple, or the task does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
]
Update an existing time log on a task by OID.
Updates an existing
time log, identifying the task by OID. See PUT /task/update-timelog/id/{projectId}/{taskId} for the preferred by-ID form, full semantics, and an example response.
Task OID.
Start timestamp of the existing log. ISO 8601, UTC.
End timestamp of the existing log. ISO 8601, UTC.
(Optional) User the existing log is credited to. Defaults to the caller.
(Optional) New end timestamp (ISO 8601, UTC). Must be on or after the (new or existing) start. Sub-second precision is truncated to whole seconds. Omit or set null to preserve.
(Optional) New user the log is credited to (OID, ID, or email). Omit or set null to preserve. Send empty string to reset to the authenticated caller.
(Optional) New start timestamp (ISO 8601, UTC). Sub-second precision is truncated to whole seconds. Omit or set null to preserve.
(Optional) New billable flag. Omit or set null to preserve.
(Optional) New note. Omit or set null to preserve. Send empty string to clear.
Request Example
{
"end": "2026-04-26T10:45:00Z",
"user": "[email protected]",
"start": "2026-04-26T09:15:00Z",
"billable": false,
"note": "Updated note"
}
OK — task's full timelogs array.
Bad Request.
Not Found — no log matches the identifying triple, or the task does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
]
Update an existing task by its ID.
Updates an existing task and returns the updated record.
Only the fields you include are updated; omitted fields are left unchanged. Example — complete the task, add a tag, and remove an assignee:
{
"status": 100,
"addTags": ["done"],
"removeAssignees": ["[email protected]"]
}
Note the replace-vs-incremental pattern:
tagsreplaces the entire tag set;addTags/removeTagsmodify the set in place. Same forassignees/addAssignees/removeAssignees, andfollowers/successors/ etc. Mix whichever suits the intent.
To archive (hide indefinitely) or snooze a task, set the peekaboo field: true hides it indefinitely, a positive integer hides it for that many days, false unhides.
ID of the task's project. Specify "-" for personal tasks in My Tasks.
Task ID.
(Optional) Response shape: full (default) for the full task record, or compact for identifiers only ({"oid":…, "id":…}). See PUT /task/{oid} for full semantics.
(Optional) New task description.
(Optional) Assignees to replace the current assignees (OID, ID, or email). This replaces all existing assignees. To modify incrementally, use addAssignees or removeAssignees.
Accepts the same special values as addAssignees: "me" (the current user) and "inherit" (all assignees of the parent task).
(Optional) Start date/time in UTC.
- With time:
yyyy-MM-dd'T'HH:mmZ(e.g.,2020-10-30T09:30Z). - Date only:
yyyy-MM-dd(e.g.,2020-10-30).
Notes:
- Seconds are not supported.
2020-10-30T00:00:00is treated as2020-10-30(date only).- To specify exactly midnight UTC, use
2020-10-30T00:00(no seconds).
(Optional) Due date/time in UTC.
- With time:
yyyy-MM-dd'T'HH:mmZ(e.g.,2020-10-30T09:30Z). - Date only:
yyyy-MM-dd(e.g.,2020-10-30).
Notes:
- Seconds are not supported.
2020-10-30T00:00:00is treated as2020-10-30(date only).- To specify exactly midnight UTC, use
2020-10-30T00:00(no seconds).
(Optional) Recurrence details. null if the task is not recurring.
freq:daily,weekly,monthly,yearly.interval: Interval between occurrences. Default: 1.until: End date. Default: never ends.bymonth: Month (1 = January). Supported only withyearly. Default: 1.byweekno: Week number (starting from 1) orlast. Supported withmonthly/yearly.byweekday: Day(s) of week (0 = Monday ... 6 = Sunday). For weekly, use a list (e.g.,[1],[0,3]).bydayno: Day of month (1 = first day). Supported withmonthly/yearly. Note:byweekdayandbydaynocannot both be specified.dupsubtasks: Duplicate subtasks when the task is completed. Default: true.sincelatest: Daily only. Repeat based on the last completion date. Default: false.
- boolean
- integer
(Optional) Peekaboo setting. Accepts a boolean or a positive integer:
true: Hide indefinitely (task and subtasks).- positive integer: Number of days to hide.
false: Undo previous peekaboo.
Default: false.
(Optional) Whether this task is a section. Default: false.
(Optional) Whether this task is a milestone. Default: false.
(Optional) If true, marks this update as performed by the app. Default: false (updated by the authorizing user).
(Optional) Followers to replace the current followers (OID, ID, or email).
Special values:
"me": the current user"inherit": include followers of the parent task"app": the application follows (receives notifications)
App follower syntax:
app|teamorapp|team|channelapp|/path→ appended to the hook URL (e.g.,.../standard/soc1/33456/a7).
(Optional) Successors to replace the current successors (task OID or ID).
IDs can be specified as #id or id. Integer IDs are also accepted.
PLACEHOLDER — do NOT send a key literally named yourField. Instead, use the custom field's own name (as defined via /project/add-field) as the JSON key, with a value matching the field's type:
- Text / Email / Hyperlink: string.
- Number / Money: numeric value (no currency symbol).
- Checkbox:
trueorfalse. - Select: option name (string).
- Date: ISO 8601 timestamp (
yyyy-MM-dd'T'HH:mm:ssZ) or date-only (yyyy-MM-dd). - Duration: number of seconds.
- User: user OID, user ID, or email — server resolves to the user's OID.
-
Task: task OID, integer task ID, or
#<id>string — server resolves to the task's OID (scoped to this project). - Multi-value (fields configured with
multiple: true): provide a list. Passnullto clear the field.
Example body fragment: {"Priority": 3, "Owners": ["alice", "[email protected]"], "Depends": ["#42"]}.
(Optional) Tags to add to this task (OID or name). Tag names are case-insensitive.
(Optional) Tags to remove from this task (OID or name). Tag names are case-insensitive.
(Optional) Assignees to add (OID, ID, or email). Special values:
- "me": the current user
- "inherit": include all assignees of the parent task
(Optional) Assignees to remove (OID, ID, or email).
Accepts the same special values as addAssignees: "me" (the current user) and "inherit" (all assignees of the parent task).
(Optional) Followers to add (OID, ID, or email). Special values:
- "me": the current user
- "inherit": include followers of the parent task
- "app": the application follows (receives notifications)
App follower syntax:
app|teamorapp|team|channelapp|/path→ appended to the hook URL (e.g.,.../standard/soc1/33456/a7).
(Optional) Followers to remove (OID, ID, or email).
Special values:
"me": the current user"inherit": remove followers that were inherited from the parent task"app": the application
App follower syntax:
app|teamorapp|team|channelapp|/path→ appended to the hook URL.
(Optional) Successors to add (task OID or ID).
IDs can be specified as #id or id. Integer IDs are also accepted.
(Optional) Successors to remove (task OID or ID).
IDs can be specified as #id or id. Integer IDs are also accepted.
(Optional) Tags to replace the current tags on this task (OID or name). This replaces all existing tags. To modify incrementally, use addTags or removeTags. Tag names are case-insensitive.
(Optional) New task name.
(Optional) Estimated time to complete, in seconds. Must be non-negative or null. Specify null to clear the value.
(Optional) New status, between 0 and 100. Specify 100 to complete the task.
(Optional) New priority. -1 (lowest) through 2 (highest); 0 is Normal. (The server also accepts the case-insensitive English names Low, Medium, High, Urgent, but the integer form is recommended for typed callers.)
(Optional) Arbitrary source reference data to store with the task. Available via API on retrieval.
If the map contains text, its value will be displayed client-side and should be Markdown. Including a source link is recommended.
Request Example
{
"description": "This is a **cool** task.",
"assignees": [
"6QMKkEPBVWETLWrXqws94ALU"
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"recurrence": {
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"peekaboo": true,
"section": true,
"milestone": true,
"asUser": true,
"followers": [
"tzufRLqCnud74dARyDSvjWDl",
"app"
],
"successors": "[\"#13\"]",
"yourField": "object",
"addTags": [
"X6nmx9XjEO2wKbqeB1pRT43C"
],
"removeTags": [
"mPAQrYU1qt8wAYAInKRlTnvl"
],
"addAssignees": [
"6QMKkEPBVWETLWrXqws94ALU"
],
"removeAssignees": [
"Job4NSW9xK6Owcke8iKj7zyH"
],
"addFollowers": [
"sfsvLbDVPvi1QMf2GkDn7VSy"
],
"removeFollowers": [
"aBuz4MwfZ5CasOae6stnFa2f"
],
"addSuccessors": "[\"#13\"]",
"removeSuccessors": "[\"#13\"]",
"tags": [
"ITaVbkhh3iVcEcV3vuSLeE2k"
],
"name": "New idea",
"etc": 0,
"status": 100,
"priority": 0,
"sourceRef": "{\"text\": \"Source: [Gmail](https://gmail.com/link)\"}"
}
OK — updated task record.
Bad Request — body validation failed.
Forbidden — caller lacks permission to update this task.
Not Found — task does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"parent": {
"id": 12,
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Update an existing task by its OID.
Updates an existing task and returns the updated record. See PUT /task/id/{projectId}/{taskId} for a full request-body example and the replace-vs-incremental field pattern.
To archive (hide indefinitely) or snooze a task, set the peekaboo field: true hides it indefinitely, a positive integer hides it for that many days, false unhides.
Task OID.
(Optional) Response shape:
full(default): the full task record.compact: identifiers only ({"oid":…, "id":…}). Saves payload, tokens, and a server-side reload + render. Recommended for MCP / scripted callers that already have the OID/ID and just need confirmation that the update succeeded.
Any other value returns 400 Bad Request.
(Optional) New task description.
(Optional) Assignees to replace the current assignees (OID, ID, or email). This replaces all existing assignees. To modify incrementally, use addAssignees or removeAssignees.
Accepts the same special values as addAssignees: "me" (the current user) and "inherit" (all assignees of the parent task).
(Optional) Start date/time in UTC.
- With time:
yyyy-MM-dd'T'HH:mmZ(e.g.,2020-10-30T09:30Z). - Date only:
yyyy-MM-dd(e.g.,2020-10-30).
Notes:
- Seconds are not supported.
2020-10-30T00:00:00is treated as2020-10-30(date only).- To specify exactly midnight UTC, use
2020-10-30T00:00(no seconds).
(Optional) Due date/time in UTC.
- With time:
yyyy-MM-dd'T'HH:mmZ(e.g.,2020-10-30T09:30Z). - Date only:
yyyy-MM-dd(e.g.,2020-10-30).
Notes:
- Seconds are not supported.
2020-10-30T00:00:00is treated as2020-10-30(date only).- To specify exactly midnight UTC, use
2020-10-30T00:00(no seconds).
(Optional) Recurrence details. null if the task is not recurring.
freq:daily,weekly,monthly,yearly.interval: Interval between occurrences. Default: 1.until: End date. Default: never ends.bymonth: Month (1 = January). Supported only withyearly. Default: 1.byweekno: Week number (starting from 1) orlast. Supported withmonthly/yearly.byweekday: Day(s) of week (0 = Monday ... 6 = Sunday). For weekly, use a list (e.g.,[1],[0,3]).bydayno: Day of month (1 = first day). Supported withmonthly/yearly. Note:byweekdayandbydaynocannot both be specified.dupsubtasks: Duplicate subtasks when the task is completed. Default: true.sincelatest: Daily only. Repeat based on the last completion date. Default: false.
- boolean
- integer
(Optional) Peekaboo setting. Accepts a boolean or a positive integer:
true: Hide indefinitely (task and subtasks).- positive integer: Number of days to hide.
false: Undo previous peekaboo.
Default: false.
(Optional) Whether this task is a section. Default: false.
(Optional) Whether this task is a milestone. Default: false.
(Optional) If true, marks this update as performed by the app. Default: false (updated by the authorizing user).
(Optional) Followers to replace the current followers (OID, ID, or email).
Special values:
"me": the current user"inherit": include followers of the parent task"app": the application follows (receives notifications)
App follower syntax:
app|teamorapp|team|channelapp|/path→ appended to the hook URL (e.g.,.../standard/soc1/33456/a7).
(Optional) Successors to replace the current successors (task OID or ID).
IDs can be specified as #id or id. Integer IDs are also accepted.
PLACEHOLDER — do NOT send a key literally named yourField. Instead, use the custom field's own name (as defined via /project/add-field) as the JSON key, with a value matching the field's type:
- Text / Email / Hyperlink: string.
- Number / Money: numeric value (no currency symbol).
- Checkbox:
trueorfalse. - Select: option name (string).
- Date: ISO 8601 timestamp (
yyyy-MM-dd'T'HH:mm:ssZ) or date-only (yyyy-MM-dd). - Duration: number of seconds.
- User: user OID, user ID, or email — server resolves to the user's OID.
-
Task: task OID, integer task ID, or
#<id>string — server resolves to the task's OID (scoped to this project). - Multi-value (fields configured with
multiple: true): provide a list. Passnullto clear the field.
Example body fragment: {"Priority": 3, "Owners": ["alice", "[email protected]"], "Depends": ["#42"]}.
(Optional) Tags to add to this task (OID or name). Tag names are case-insensitive.
(Optional) Tags to remove from this task (OID or name). Tag names are case-insensitive.
(Optional) Assignees to add (OID, ID, or email). Special values:
- "me": the current user
- "inherit": include all assignees of the parent task
(Optional) Assignees to remove (OID, ID, or email).
Accepts the same special values as addAssignees: "me" (the current user) and "inherit" (all assignees of the parent task).
(Optional) Followers to add (OID, ID, or email). Special values:
- "me": the current user
- "inherit": include followers of the parent task
- "app": the application follows (receives notifications)
App follower syntax:
app|teamorapp|team|channelapp|/path→ appended to the hook URL (e.g.,.../standard/soc1/33456/a7).
(Optional) Followers to remove (OID, ID, or email).
Special values:
"me": the current user"inherit": remove followers that were inherited from the parent task"app": the application
App follower syntax:
app|teamorapp|team|channelapp|/path→ appended to the hook URL.
(Optional) Successors to add (task OID or ID).
IDs can be specified as #id or id. Integer IDs are also accepted.
(Optional) Successors to remove (task OID or ID).
IDs can be specified as #id or id. Integer IDs are also accepted.
(Optional) Tags to replace the current tags on this task (OID or name). This replaces all existing tags. To modify incrementally, use addTags or removeTags. Tag names are case-insensitive.
(Optional) New task name.
(Optional) Estimated time to complete, in seconds. Must be non-negative or null. Specify null to clear the value.
(Optional) New status, between 0 and 100. Specify 100 to complete the task.
(Optional) New priority. -1 (lowest) through 2 (highest); 0 is Normal. (The server also accepts the case-insensitive English names Low, Medium, High, Urgent, but the integer form is recommended for typed callers.)
(Optional) Arbitrary source reference data to store with the task. Available via API on retrieval.
If the map contains text, its value will be displayed client-side and should be Markdown. Including a source link is recommended.
Request Example
{
"description": "This is a **cool** task.",
"assignees": [
"6QMKkEPBVWETLWrXqws94ALU"
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"recurrence": {
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"peekaboo": true,
"section": true,
"milestone": true,
"asUser": true,
"followers": [
"tzufRLqCnud74dARyDSvjWDl",
"app"
],
"successors": "[\"#13\"]",
"yourField": "object",
"addTags": [
"X6nmx9XjEO2wKbqeB1pRT43C"
],
"removeTags": [
"mPAQrYU1qt8wAYAInKRlTnvl"
],
"addAssignees": [
"6QMKkEPBVWETLWrXqws94ALU"
],
"removeAssignees": [
"Job4NSW9xK6Owcke8iKj7zyH"
],
"addFollowers": [
"sfsvLbDVPvi1QMf2GkDn7VSy"
],
"removeFollowers": [
"aBuz4MwfZ5CasOae6stnFa2f"
],
"addSuccessors": "[\"#13\"]",
"removeSuccessors": "[\"#13\"]",
"tags": [
"ITaVbkhh3iVcEcV3vuSLeE2k"
],
"name": "New idea",
"etc": 0,
"status": 100,
"priority": 0,
"sourceRef": "{\"text\": \"Source: [Gmail](https://gmail.com/link)\"}"
}
OK — updated task record.
Bad Request — body validation failed.
Forbidden — caller lacks permission to update this task.
Not Found — task does not exist.
Response Content-Types: application/json
Response Example (200 OK)
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"parent": {
"id": 12,
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Bulk-remove N tasks from a project by ID.
Removes up to 300 tasks in one transaction. Body is a top-level JSON array of task references — each element is one of:
- a task OID (string),
- an integer task ID, or
- a
"#<id>"string (the ID-with-hash form).
Mixed forms in the same batch are allowed.
Example: DELETE /task/bulk-remove/id/my_project
Request body (mixed forms — all three reference shapes in one batch):
[ 42, "#99", "iuRRiKoyrxdBFhFTTo" ]
Response (slot 1 didn't resolve — already removed — so it's null):
[
{ "oid": "abc1Foo" },
null,
{ "oid": "iuRRiKoyrxdBFhFTTo" }
]
Atomic on real bugs: malformed refs (non-string / non-int / unsupported shape) and permission failures roll back the whole batch.
Skip-not-found: refs that don't resolve (already removed, cascade-removed by an earlier item in the same batch, etc.) are silently skipped — the corresponding response slot is null and the rest of the batch proceeds. This makes the endpoint
idempotent for agents — safe to re-submit duplicates or already-removed OIDs.
?return=compact is a no-op here (the response is already in identifier shape).
Rate-limit cost: each bulk call costs N units against the per-minute / per-hour API quota, where N is items.length — the same total cost as N equivalent single-task DELETEs. The cost does not adjust for skipped items.
Project ID.
Request Example
[
"object"
]
OK — array of {oid} elements (slots for not-found items are null).
Bad Request — body not a JSON array, empty, over the 300-item cap, or any item is a malformed ref (whole batch rolled back).
Forbidden — caller lacks permission on the project or any task in the batch (whole batch rolled back).
Not Found — project does not exist. (Item-level not-found is silent skip.)
Payload Too Large.
Too Many Requests — the batch's rate-limit cost (items.length units) would exceed the caller's per-minute / per-hour API quota.
Response Content-Types: application/json
Response Example (200 OK)
"object"
Response Example (400 Bad Request)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (403 Forbidden)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (404 Not Found)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (413 Request Entity Too Large)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (429 Too Many Requests)
{
"code": 429,
"message": "Something went wrong."
}
Bulk-remove N tasks from a project by OID.
OID-form of DELETE /task/bulk-remove/id/{projectId} — see that endpoint for body shape, atomic semantics, skip-not-found behaviour, and response details.
Project OID.
Request Example
[
"object"
]
OK — array of {oid} elements.
Bad Request.
Forbidden.
Not Found — project does not exist.
Payload Too Large.
Too Many Requests.
Response Content-Types: application/json
Response Example (200 OK)
"object"
Response Example (400 Bad Request)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (403 Forbidden)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (404 Not Found)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (413 Request Entity Too Large)
{
"code": 429,
"message": "Something went wrong."
}
Response Example (429 Too Many Requests)
{
"code": 429,
"message": "Something went wrong."
}
Remove a time log from a task by ID.
Removes the
time log identified by the (user, start, end) triple from the task identified by project + task ID. Sub-second precision in the query params is truncated to whole seconds before matching.
On success returns the task's remaining timelogs array (empty when no logs remain). Example after removing the only log:
[]
Project ID.
Task ID.
Start timestamp of the log to remove. ISO 8601, UTC.
End timestamp of the log to remove. ISO 8601, UTC.
(Optional) User the log is credited to. Defaults to the authenticated caller.
OK — task's remaining timelogs array (empty when none remain).
Bad Request — start / end query params missing or malformed.
Not Found — no log matches the triple, or the task does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
]
Remove a time log from a task by OID.
Removes a
time log from a task, identifying the task by OID. See DELETE /task/remove-timelog/id/{projectId}/{taskId} for the preferred by-ID form, full semantics, and an example response.
Task OID.
Start timestamp of the log to remove. ISO 8601, UTC.
End timestamp of the log to remove. ISO 8601, UTC.
(Optional) User the log is credited to.
OK — task's remaining timelogs array (empty when none remain).
Bad Request.
Not Found — no log matches the triple, or the task does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
]
Cancel a task's approval.
Revokes the task's current approval. The effect depends on the current state:
awaiting/changes→ clears the approval entirely.approved/rejected→ rolls back toawaiting(the original requester is preserved; the approver can re-decide viaPOST /task/approve/id/{projectId}/{taskId}, orDELETEagain to clear).
Idempotent: returns 204 No Content even when no approval is set.
Project ID.
Task ID.
No Content — approval revoked (or already absent).
Response Content-Types: application/json
Cancel a task's approval by OID.
OID-form of DELETE /task/revoke-approval/id/{projectId}/{taskId} — see that endpoint for the smart-dispatch behavior and idempotency guarantee.
Task OID.
No Content — approval revoked (or already absent).
Response Content-Types: application/json
Delete a task and all of its subtasks by its ID.
Deletes an existing task and all of its subtasks.
Note: Returns
204 No Contentregardless of whether the task exists.
Project ID. Specify "-" to remove from personal tasks in My Tasks.
Task ID.
No Content
Response Content-Types: application/json
Delete a task and all of its subtasks by its OID.
Deletes an existing task and all of its subtasks.
Note: Returns
204 No Contentregardless of whether the task exists.
Task OID.
No Content
Response Content-Types: application/json
user
Represents a Quire account that can access organizations, projects, and tasks.
Get a user by ID or email address.
Returns the full user record for the given user ID, email address, or "me" (the current user).
User ID, email address, or "me".
OK — user record.
Not Found — user does not exist, or is not visible to the caller.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/u/john",
"nameText": "John",
"nameHtml": "John",
"name": "John",
"id": "john",
"timeZone": "`{'offset': 0, 'name': 'Europe/London'}`",
"locale": "en_GB",
"website": "https://coolwebsites.com",
"email": "[email protected]",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
Get a user by OID.
Returns the full user record for the given OID.
User OID.
OK — user record.
Not Found — user does not exist, or is not visible to the caller.
Response Content-Types: application/json
Response Example (200 OK)
{
"url": "https://quire.io/u/john",
"nameText": "John",
"nameHtml": "John",
"name": "John",
"id": "john",
"timeZone": "`{'offset': 0, 'name': 'Europe/London'}`",
"locale": "en_GB",
"website": "https://coolwebsites.com",
"email": "[email protected]",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
Get all user records.
Returns all colleagues of the current user if the user granted the app access to contacts. Otherwise, returns only colleagues who also authorized the same app. If the user did not grant contact access and none of the user’s colleagues authorized this app, only the current user is returned. The first record is always the current user.
OK — list of user records; first entry is always the current user.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"url": "https://quire.io/u/john",
"nameText": "John",
"nameHtml": "John",
"name": "John",
"id": "john",
"timeZone": "`{'offset': 0, 'name': 'Europe/London'}`",
"locale": "en_GB",
"website": "https://coolwebsites.com",
"email": "[email protected]",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
]
Get all user records of the given project (by project ID).
Returns all members of the specified project by project ID. If the current user did not grant the app access to contacts, only basic information is returned. The first record is always the current user.
Project ID.
OK — list of project members.
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"url": "https://quire.io/u/john",
"nameText": "John",
"nameHtml": "John",
"name": "John",
"id": "john",
"timeZone": "`{'offset': 0, 'name': 'Europe/London'}`",
"locale": "en_GB",
"website": "https://coolwebsites.com",
"email": "[email protected]",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
]
Get all user records of the given project (by project OID).
Returns all members of the specified project by project OID. If the current user did not grant the app access to contacts, only basic information is returned. The first record is always the current user.
Project OID.
OK — list of project members.
Not Found — project does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[
{
"url": "https://quire.io/u/john",
"nameText": "John",
"nameHtml": "John",
"name": "John",
"id": "john",
"timeZone": "`{'offset': 0, 'name': 'Europe/London'}`",
"locale": "en_GB",
"website": "https://coolwebsites.com",
"email": "[email protected]",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
]
Schema Definitions
AddAppvCatBody: object
- claimers: string[]
-
(Optional) Users allowed to request approval in this category.
- Omit or
null: anyone can request. [](empty list): admins only.- List of user OIDs: those specific users.
- Omit or
-
string - approvers: string[]
-
(Optional) Users allowed to approve, reject, or request changes in this category.
- Omit or
null: anyone can respond. [](empty list): admins only.- List of user OIDs: those specific users.
- Omit or
-
string - name: string
-
Display name.
- id: string
-
Category identifier (URL-safe). Must be unique within the project. The identifier
""is reserved for the implicit default category.
Example
{
"claimers": [
"string"
],
"approvers": [
"string"
],
"name": "Legal Review",
"id": "legal"
}
AddFieldBody: object
- resultType: string text, number, money, date, duration, checkbox
-
(Optional,
formulaonly) Expected result type. - formula: string
-
(Required for
formula) Formula expression. - conditionFormat: FieldConditionFormat
-
(Optional) Conditional-format rules. Applicable to
date,number,money,duration,lookup, andformulafields whoseresultTyperesolves to one of those. -
FieldConditionFormat - private: boolean
-
(Optional) Restrict access to non-guest members only.
- durationFormat: string hh:mm:ss, hh:mm, 1h1m, 1h, 1d1h, dd:hh:mm:ss, dd:hh:mm, dd:hh
-
(Optional,
duration/formulaonly) Duration display format. - withTime: boolean
-
(Optional,
dateonly) Include time-of-day in addition to the date. - lookup: object
-
(Required for
lookup) Map from lookup key to numeric value. Keys are OIDs of the configuredlookupTypeentity (e.g. user OIDs whenlookupType=User). Values are numbers. - lookupType: string User, Task, Project, Organization
-
(Optional,
lookuponly) Source type for lookup keys. Default:User. - hidden: boolean
-
(Optional) Hide this field from the task detail panel.
- ndecimal: integer -1, 0, 1, 2, 3
-
(Optional,
number/moneyonly) Number of decimal digits.-1means no rounding. - multiple: boolean
-
(Optional) Allow multiple values. Applies to
select,user,task, andfile(always true forfile). - clearOnDup: boolean
-
(Optional) Clear this field when duplicating a task.
- options: FieldOption
-
(Required for
select) Option list. -
FieldOption - name: string
-
Unique name for this field. Must be a non-empty string and must not contain
},", or\. - type: string text, number, money, date, duration, select, checkbox, user, task, hyperlink, email, formula, file, lookup
-
Field type. For insight views, only
formulaandlookupare accepted. - percent: boolean
-
(Optional,
numberonly) Format the value as a percentage. - currency: string
-
(Optional,
money/formulaonly) Currency symbol. When omitted on a money field, defaults to$.
Example
{
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"name": "Priority",
"type": "number",
"percent": false,
"currency": "USD"
}
AddTimelogBody: object
- end: string
-
End timestamp (ISO 8601, UTC). Must be on or after
start. Sub-second precision is truncated to whole seconds. - user: string
-
(Optional) User identifier (OID, ID, or email) the log is credited to. Omitted,
null, or empty defaults to the authenticated caller. Unknown users return400 Bad Request. - start: string
-
Start timestamp (ISO 8601, UTC). Sub-second precision is truncated to whole seconds.
- billable: boolean
-
(Optional) Whether this log is billable. Omitted or
nulldefaults totrue. - note: string
-
(Optional) Free-form note for the log. Omitted,
null, or empty stores no note.
Example
{
"end": "2026-04-26T10:30:00Z",
"user": "[email protected]",
"start": "2026-04-26T09:00:00Z",
"billable": true,
"note": "Pair-programming session"
}
Approval: object
- category: string
-
Identifier of the approval category this approval belongs to. The default category has id
"". - requester: string
-
OID of the user who originally requested approval. Preserved across subsequent approve / reject / change transitions.
- approver: string
-
OID of the user who most recently approved / rejected / requested changes. Null while
stateisawaiting. - toggledAt: string
-
Timestamp (UTC, ISO 8601) of the last state transition.
- state: string awaiting, approved, rejected, changes
-
Current approval state. Derived from the last POST to
/task/approve/id/{projectId}/{taskId}(or the OID form):awaiting—requestwas posted (initial or rolled-back).approved—approvewas posted.rejected—rejectwas posted.changes—change(request-for-changes) was posted.
Example
{
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
}
AppvCat: object
- name: string
-
Display name.
- id: string
-
Category identifier (URL-safe). The implicit default category has an empty id.
- claimers: string[]
-
Users allowed to request approval in this category.
- Omitted from the response: anyone can request.
[](empty list): admins only.- List of user OIDs: those specific users.
-
string - approvers: string[]
-
Users allowed to approve, reject, or request changes in this category.
- Omitted from the response: anyone can respond.
[](empty list): admins only.- List of user OIDs: those specific users.
-
string - createdAt: string
-
Timestamp (UTC, ISO 8601) when this category was created.
- createdBy: SimpleIdentity
-
User who created this category.
Example
{
"name": "Legal Review",
"id": "legal",
"claimers": [
"string"
],
"approvers": [
"string"
],
"createdAt": "2026-04-24T10:00:00.000Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
Attachment: object
- type: integer
-
Attachment source type. 1 = Google Drive, 2 = Quire storage.
- url: string
-
Direct URL to access this attachment.
- name: string
-
File name of the attachment.
- length: integer
-
Size of the attachment in bytes.
- createdAt: string
-
Creation timestamp in UTC (ISO 8601).
- createdBy: SimpleIdentity
-
User who created this record.
Example
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
BulkUpdateTaskItem: object
- oid: string
-
Target task OID. Exactly one of
oid/idmust be supplied per item. - id: integer
-
Target task ID. Exactly one of
oid/idmust be supplied per item. - description: string
-
(Optional) New task description.
- assignees: string[]
-
(Optional) Assignees to replace the current assignees (OID, ID, or email). This replaces all existing assignees. To modify incrementally, use
addAssigneesorremoveAssignees.Accepts the same special values as
addAssignees:"me"(the current user) and"inherit"(all assignees of the parent task). -
string - start: string
-
(Optional) Start date/time in UTC.
- With time:
yyyy-MM-dd'T'HH:mmZ(e.g.,2020-10-30T09:30Z). - Date only:
yyyy-MM-dd(e.g.,2020-10-30).
Notes:
- Seconds are not supported.
2020-10-30T00:00:00is treated as2020-10-30(date only).- To specify exactly midnight UTC, use
2020-10-30T00:00(no seconds).
- With time:
- due: string
-
(Optional) Due date/time in UTC.
- With time:
yyyy-MM-dd'T'HH:mmZ(e.g.,2020-10-30T09:30Z). - Date only:
yyyy-MM-dd(e.g.,2020-10-30).
Notes:
- Seconds are not supported.
2020-10-30T00:00:00is treated as2020-10-30(date only).- To specify exactly midnight UTC, use
2020-10-30T00:00(no seconds).
- With time:
- recurrence: Recurrence
-
(Optional) Recurrence details.
nullif the task is not recurring.freq:daily,weekly,monthly,yearly.interval: Interval between occurrences. Default: 1.until: End date. Default: never ends.bymonth: Month (1 = January). Supported only withyearly. Default: 1.byweekno: Week number (starting from 1) orlast. Supported withmonthly/yearly.byweekday: Day(s) of week (0 = Monday ... 6 = Sunday). For weekly, use a list (e.g.,[1],[0,3]).bydayno: Day of month (1 = first day). Supported withmonthly/yearly. Note:byweekdayandbydaynocannot both be specified.dupsubtasks: Duplicate subtasks when the task is completed. Default: true.sincelatest: Daily only. Repeat based on the last completion date. Default: false.
- peekaboo: object
-
(Optional) Peekaboo setting. Accepts a boolean or a positive integer:
true: Hide indefinitely (task and subtasks).- positive integer: Number of days to hide.
false: Undo previous peekaboo.
Default: false.
- section: boolean
-
(Optional) Whether this task is a section. Default: false.
- milestone: boolean
-
(Optional) Whether this task is a milestone. Default: false.
- asUser: boolean
-
(Optional) If true, marks this update as performed by the app. Default: false (updated by the authorizing user).
- followers: string[]
-
(Optional) Followers to replace the current followers (OID, ID, or email).
Special values:
"me": the current user"inherit": include followers of the parent task"app": the application follows (receives notifications)
App follower syntax:
app|teamorapp|team|channelapp|/path→ appended to the hook URL (e.g.,.../standard/soc1/33456/a7).
-
string - successors: string[]
-
(Optional) Successors to replace the current successors (task OID or ID).
IDs can be specified as
#idorid. Integer IDs are also accepted. -
string - yourField: object
-
PLACEHOLDER — do NOT send a key literally named
yourField. Instead, use the custom field's own name (as defined via/project/add-field) as the JSON key, with a value matching the field's type:- Text / Email / Hyperlink: string.
- Number / Money: numeric value (no currency symbol).
- Checkbox:
trueorfalse. - Select: option name (string).
- Date: ISO 8601 timestamp (
yyyy-MM-dd'T'HH:mm:ssZ) or date-only (yyyy-MM-dd). - Duration: number of seconds.
- User: user OID, user ID, or email — server resolves to the user's OID.
-
Task: task OID, integer task ID, or
#<id>string — server resolves to the task's OID (scoped to this project). - Multi-value (fields configured with
multiple: true): provide a list. Passnullto clear the field.
Example body fragment:
{"Priority": 3, "Owners": ["alice", "[email protected]"], "Depends": ["#42"]}. - addTags: string[]
-
(Optional) Tags to add to this task (OID or name). Tag names are case-insensitive.
-
string - removeTags: string[]
-
(Optional) Tags to remove from this task (OID or name). Tag names are case-insensitive.
-
string - addAssignees: string[]
-
(Optional) Assignees to add (OID, ID, or email). Special values:
- "me": the current user
- "inherit": include all assignees of the parent task
-
string - removeAssignees: string[]
-
(Optional) Assignees to remove (OID, ID, or email).
Accepts the same special values as
addAssignees:"me"(the current user) and"inherit"(all assignees of the parent task). -
string - addFollowers: string[]
-
(Optional) Followers to add (OID, ID, or email). Special values:
- "me": the current user
- "inherit": include followers of the parent task
- "app": the application follows (receives notifications)
App follower syntax:
app|teamorapp|team|channelapp|/path→ appended to the hook URL (e.g.,.../standard/soc1/33456/a7).
-
string - removeFollowers: string[]
-
(Optional) Followers to remove (OID, ID, or email).
Special values:
"me": the current user"inherit": remove followers that were inherited from the parent task"app": the application
App follower syntax:
app|teamorapp|team|channelapp|/path→ appended to the hook URL.
-
string - addSuccessors: string[]
-
(Optional) Successors to add (task OID or ID).
IDs can be specified as
#idorid. Integer IDs are also accepted. -
string - removeSuccessors: string[]
-
(Optional) Successors to remove (task OID or ID).
IDs can be specified as
#idorid. Integer IDs are also accepted. -
string - tags: string[]
-
(Optional) Tags to replace the current tags on this task (OID or name). This replaces all existing tags. To modify incrementally, use
addTagsorremoveTags. Tag names are case-insensitive. -
string - name: string
-
(Optional) New task name.
- etc: integer
-
(Optional) Estimated time to complete, in seconds. Must be non-negative or
null. Specifynullto clear the value. - status: integer
-
(Optional) New status, between 0 and 100. Specify 100 to complete the task.
- priority: integer -1, 0, 1, 2
-
(Optional) New priority.
-1(lowest) through2(highest);0is Normal. (The server also accepts the case-insensitive English namesLow,Medium,High,Urgent, but the integer form is recommended for typed callers.) - sourceRef: object
-
(Optional) Arbitrary source reference data to store with the task. Available via API on retrieval.
If the map contains
text, its value will be displayed client-side and should be Markdown. Including a source link is recommended.
Example
{
"oid": "iuRRiKoyrxdBFhFTTo",
"id": 42,
"description": "This is a **cool** task.",
"assignees": "[\"me\", \"[email protected]\"]",
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"recurrence": {
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"peekaboo": "true",
"section": true,
"milestone": true,
"asUser": true,
"followers": "[\"[email protected]\"]",
"successors": "[\"#13\"]",
"yourField": "object",
"addTags": "[\"urgent\"]",
"removeTags": "[\"draft\"]",
"addAssignees": "[\"me\"]",
"removeAssignees": "[\"[email protected]\"]",
"addFollowers": "[\"me\"]",
"removeFollowers": "[\"[email protected]\"]",
"addSuccessors": "[\"#13\"]",
"removeSuccessors": "[\"#13\"]",
"tags": "[\"urgent\", \"design\"]",
"name": "New idea",
"etc": 0,
"status": 100,
"priority": 0,
"sourceRef": "{\"text\": \"Source: [Gmail](https://gmail.com/link)\"}"
}
Change: object
- exclude: boolean
-
Whether to exclude the task. Default: false (include).
- single: boolean
-
Whether the operation applies only to the specified task. Default: false — all descendant tasks are also included or excluded. Note: this does not change descendants that were explicitly included or excluded in prior operations.
- task: string
-
OID of the task to include or exclude.
Example
{
"exclude": false,
"single": false,
"task": "2MmYOpJH_ZLeehIjjytH1Rwr"
}
Chat: object
- url: string
-
URL of this chat on the Quire website.
- nameText: string
-
Name with Markdown removed.
- nameHtml: string
-
Name rendered as an HTML fragment converted from Markdown.
- name: string
-
Display name (Markdown supported).
- id: string
-
ID.
- description: string
-
Description (Markdown supported).
- descriptionText: string
-
Description with Markdown removed.
- descriptionHtml: string
-
Description rendered as an HTML fragment converted from Markdown.
- iconColor: string
-
Color index for the icon from Quire’s predefined palette. Two-digit code: first digit 0–5, second digit 0–7 (e.g.,
37). - image: string
-
Image URL representing this record.
- oid: string
-
Object identifier (OID), a UUID-like unique string.
- partner: SimpleTaggingEntity
-
External team this record belongs to. Null if the record is not accessible to external-team members.
- archivedAt: string
-
Timestamp (UTC, ISO 8601) when this record was archived. Null if not archived.
- start: string
-
Target start date for this record, or null if not specified.
- due: string
-
Target due date for this record, or null if not specified.
- owner: ChatOwner
-
Project this chat channel belongs to.
- createdAt: string
-
Creation timestamp in UTC (ISO 8601).
- createdBy: SimpleIdentity
-
User who created this record.
Example
{
"url": "https://quire.io/w/my_project?chat=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
ChatOwner: object
- url: string
-
URL of this owner on the Quire website.
- type: string
-
Type of the owning object (e.g., Project).
- id: string
-
Identifier for this record.
- iconColor: string
-
Color index for the icon from Quire’s predefined palette. Two-digit code: first digit 0–5, second digit 0–7 (e.g.,
37). - image: string
-
Image URL representing this record.
- name: string
-
Display name.
- oid: string
-
Object identifier (OID), a UUID-like unique string.
Example
{
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
Comment: object
- oid: string
-
Object identifier (OID), a UUID-like unique string.
- description: string
-
Comment content (Markdown supported).
- descriptionText: string
-
Comment content with Markdown removed.
- descriptionHtml: string
-
Comment content rendered as an HTML fragment converted from Markdown.
- attachments: Attachment
-
Attachments associated with this comment.
-
Attachment - pinAt: string
-
Timestamp (UTC, ISO 8601) when this comment was pinned, or null if not pinned.
- pinBy: SimpleIdentity
-
User who pinned this comment, or null if not pinned.
- editedBy: SimpleIdentity
-
User who last edited this comment, or null if not edited.
- url: string
-
URL of this comment on the Quire website.
- editedAt: string
-
Timestamp (UTC, ISO 8601) when this comment was last edited, or null if not edited.
- owner: CommentOwner
-
Object this comment was added to.
- createdAt: string
-
Creation timestamp in UTC (ISO 8601).
- createdBy: SimpleIdentity
-
User who created this record.
Example
{
"oid": "iDsPd.QP_qM.hN.Trymukn8b",
"description": "It is *cool*!",
"descriptionText": "It is cool!",
"descriptionHtml": "It is <i>cool</i>!",
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
],
"pinAt": "2018-12-22T02:06:58.158Z",
"pinBy": "#/definitions/SimpleIdentity",
"editedBy": "#/definitions/SimpleIdentity",
"url": "string",
"editedAt": "2018-12-22T02:06:58.158Z",
"owner": {
"url": "https://quire.io/w/my_id",
"type": "Project",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
CommentOwner: object
- url: string
-
URL of this owner on the Quire website.
- type: string
-
Type of the owning object (e.g., Project).
- name: string
-
Display name.
- oid: string
-
Object identifier (OID), a UUID-like unique string.
Example
{
"url": "https://quire.io/w/my_id",
"type": "Project",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
CreateChatBody: object
- description: string
-
(Optional) Description of the record (Markdown supported).
- iconColor: string
-
(Optional) Icon color index from Quire's predefined palette. Two-digit code
[0-5][0-7]: first digit 0-5, second digit 0-7 (e.g.00,37,57). NOT a CSS hex color. - image: string icon-view-list, icon-view-kanban, icon-briefcase-o, icon-rocket-o, icon-bug-o, icon-leaf-o, icon-clapperboard, icon-sitemap-o, icon-flash-on-o, icon-piggy-bank-o, icon-graduation-cap-o, icon-paper-plane-o, icon-globe-o, icon-music-o, icon-detail, icon-beach-o, icon-paper, icon-home-o, icon-building, icon-database-o, icon-microscope-o, icon-hamburger-o, icon-trophy-o, icon-thumbs-o-up, icon-thumbs-o-down, icon-smile-o, icon-frown-o, icon-meh-o, icon-bullseye, icon-square-dotted-o
-
(Optional) Icon image identifier.
- name: string
-
Display name of the record (Markdown supported).
- id: string
-
(Optional) ID for this record. If omitted, Quire generates one automatically. Must be unique within the project.
- partner: string
-
(Optional) OID of the external team this record belongs to.
- start: string
-
(Optional) Target start date.
- due: string
-
(Optional) Target due date.
Example
{
"description": "**Great** record to start with.",
"iconColor": "37",
"image": "icon-view-kanban",
"name": "Highlight 101",
"id": "Highlight101",
"partner": "rcBHBYXZSiyDRrHrWPutatfF",
"start": "2024-01-02",
"due": "2024-05-25"
}
CreateCommentBody: object
- description: string
-
Content of the new comment (Markdown supported).
- asUser: boolean
-
(Optional) If true, marks this comment as created by the app. Default: false (created by the authorizing user).
- pinned: boolean
-
(Optional) Whether to pin this comment. Default: false.
Example
{
"description": "Adjust style",
"asUser": true,
"pinned": false
}
CreateDocBody: object
- description: string
-
(Optional) Description of the record (Markdown supported).
- iconColor: string
-
(Optional) Icon color index from Quire's predefined palette. Two-digit code
[0-5][0-7]: first digit 0-5, second digit 0-7 (e.g.00,37,57). NOT a CSS hex color. - image: string icon-view-list, icon-view-kanban, icon-briefcase-o, icon-rocket-o, icon-bug-o, icon-leaf-o, icon-clapperboard, icon-sitemap-o, icon-flash-on-o, icon-piggy-bank-o, icon-graduation-cap-o, icon-paper-plane-o, icon-globe-o, icon-music-o, icon-detail, icon-beach-o, icon-paper, icon-home-o, icon-building, icon-database-o, icon-microscope-o, icon-hamburger-o, icon-trophy-o, icon-thumbs-o-up, icon-thumbs-o-down, icon-smile-o, icon-frown-o, icon-meh-o, icon-bullseye, icon-square-dotted-o
-
(Optional) Icon image identifier.
- name: string
-
Display name of the record (Markdown supported).
- id: string
-
(Optional) ID for this record. If omitted, Quire generates one automatically. Must be unique within the project.
- partner: string
-
(Optional) OID of the external team this record belongs to.
- start: string
-
(Optional) Target start date.
- due: string
-
(Optional) Target due date.
Example
{
"description": "**Great** record to start with.",
"iconColor": "37",
"image": "icon-view-kanban",
"name": "Highlight 101",
"id": "Highlight101",
"partner": "rcBHBYXZSiyDRrHrWPutatfF",
"start": "2024-01-02",
"due": "2024-05-25"
}
CreateInsightBody: object
- description: string
-
(Optional) Description of the record (Markdown supported).
- iconColor: string
-
(Optional) Icon color index from Quire's predefined palette. Two-digit code
[0-5][0-7]: first digit 0-5, second digit 0-7 (e.g.00,37,57). NOT a CSS hex color. - image: string icon-view-list, icon-view-kanban, icon-briefcase-o, icon-rocket-o, icon-bug-o, icon-leaf-o, icon-clapperboard, icon-sitemap-o, icon-flash-on-o, icon-piggy-bank-o, icon-graduation-cap-o, icon-paper-plane-o, icon-globe-o, icon-music-o, icon-detail, icon-beach-o, icon-paper, icon-home-o, icon-building, icon-database-o, icon-microscope-o, icon-hamburger-o, icon-trophy-o, icon-thumbs-o-up, icon-thumbs-o-down, icon-smile-o, icon-frown-o, icon-meh-o, icon-bullseye, icon-square-dotted-o
-
(Optional) Icon image identifier.
- name: string
-
Display name of the record (Markdown supported).
- id: string
-
(Optional) ID for this record. If omitted, Quire generates one automatically. Must be unique within the project.
- partner: string
-
(Optional) OID of the external team this record belongs to.
- start: string
-
(Optional) Target start date.
- due: string
-
(Optional) Target due date.
Example
{
"description": "**Great** record to start with.",
"iconColor": "37",
"image": "icon-view-kanban",
"name": "Highlight 101",
"id": "Highlight101",
"partner": "rcBHBYXZSiyDRrHrWPutatfF",
"start": "2024-01-02",
"due": "2024-05-25"
}
CreateNotificationBody: object
- url: string
-
(Optional) URL associated with the message. When provided, the client may render the message as a hyperlink.
- message: string
-
Notification message.
Example
{
"url": "https://superheros.com/sync",
"message": "Unable to synchronize"
}
CreateStatusBody: object
- color: string
-
(Optional) Status color index from Quire’s predefined palette. If omitted, a color will be generated automatically. Two-digit code: first digit 0–5, second digit 0–7 (e.g.,
35). - name: string
-
Display name of the status.
- value: integer
-
Non-negative integer indicating progress. Must be unique within its context (e.g., project). Values ≥ 100 are treated as completed.
Example
{
"color": "35",
"name": "Doing",
"value": 50
}
CreateSublistBody: object
- includes: string[]
-
(Optional) List of task OIDs to include in this sublist. All descendants of the specified tasks will be included as well.
-
string - description: string
-
(Optional) Description of the record (Markdown supported).
- iconColor: string
-
(Optional) Icon color index from Quire's predefined palette. Two-digit code
[0-5][0-7]: first digit 0-5, second digit 0-7 (e.g.00,37,57). NOT a CSS hex color. - image: string icon-view-list, icon-view-kanban, icon-briefcase-o, icon-rocket-o, icon-bug-o, icon-leaf-o, icon-clapperboard, icon-sitemap-o, icon-flash-on-o, icon-piggy-bank-o, icon-graduation-cap-o, icon-paper-plane-o, icon-globe-o, icon-music-o, icon-detail, icon-beach-o, icon-paper, icon-home-o, icon-building, icon-database-o, icon-microscope-o, icon-hamburger-o, icon-trophy-o, icon-thumbs-o-up, icon-thumbs-o-down, icon-smile-o, icon-frown-o, icon-meh-o, icon-bullseye, icon-square-dotted-o
-
(Optional) Icon image identifier.
- name: string
-
Display name of the record (Markdown supported).
- id: string
-
(Optional) ID for this record. If omitted, Quire generates one automatically. Must be unique within the project.
- partner: string
-
(Optional) OID of the external team this record belongs to.
- start: string
-
(Optional) Target start date.
- due: string
-
(Optional) Target due date.
Example
{
"includes": [
"string"
],
"description": "**Great** record to start with.",
"iconColor": "37",
"image": "icon-view-kanban",
"name": "Highlight 101",
"id": "Highlight101",
"partner": "rcBHBYXZSiyDRrHrWPutatfF",
"start": "2024-01-02",
"due": "2024-05-25"
}
CreateTagBody: object
- color: string
-
(Optional) Tag color index from Quire’s predefined palette. If omitted, a color will be generated automatically. Two-digit code: first digit 0–5, second digit 0–7 (e.g.,
35). - name: string
-
Display name of the tag.
- global: boolean
-
(Optional) Whether this tag is global (available across projects). If omitted, the tag is not global.
Example
{
"color": "35",
"name": "Later",
"global": true
}
CreateTaskBody: object
- description: string
-
(Optional) A description of the task.
- assignees: string[]
-
(Optional) A list of user identifiers (OID, ID, or email) to assign this task to.
- Use "me" to indicate the current user.
- Use "inherit" to include all assignees of the parent task.
-
string - start: string
-
(Optional) Start date/time in UTC.
- With time:
yyyy-MM-dd'T'HH:mmZ(e.g.,2020-10-30T09:30Z). - Date only:
yyyy-MM-dd(e.g.,2020-10-30).
Notes:
- Seconds are not supported.
2020-10-30T00:00:00is treated as2020-10-30(date only).- To specify exactly midnight UTC, use
2020-10-30T00:00(no seconds).
- With time:
- due: string
-
(Optional) Due date/time in UTC.
- With time:
yyyy-MM-dd'T'HH:mmZ(e.g.,2020-10-30T09:30Z). - Date only:
yyyy-MM-dd(e.g.,2020-10-30).
Notes:
- Seconds are not supported.
2020-10-30T00:00:00is treated as2020-10-30(date only).- To specify exactly midnight UTC, use
2020-10-30T00:00(no seconds).
- With time:
- recurrence: Recurrence
-
(Optional) Recurrence details. Null if the task is not recurring.
freq:daily,weekly,monthly,yearly.interval: Interval between occurrences. Default: 1.until: End date. Default: never ends.bymonth: Month (1 = January). Supported only withyearly. Default: 1.byweekno: Week number (starting from 1) orlast. Supported withmonthly/yearly.byweekday: Day(s) of week (0 = Monday ... 6 = Sunday). For weekly, use a list (e.g.,[0,3]).bydayno: Day of month (1 = first day). Supported withmonthly/yearly. Note:byweekdayandbydaynocannot both be specified.dupsubtasks: Whether to duplicate subtasks when completed. Default: true.sincelatest: Fordailyonly. Whether to repeat based on last completion date. Default: false.
-
peekaboo:
- boolean
- integer
-
(Optional) Peekaboo setting. Accepts a boolean or a positive integer:
true: Hide indefinitely.- positive integer: Number of days to hide.
false: Cancel previous peekaboo.
Default: false.
- section: boolean
-
(Optional) Whether this task is a section. Default: false.
- milestone: boolean
-
(Optional) Whether this task is a milestone. Default: false.
- asUser: boolean
-
(Optional) If true, marks this task as created by the app. Default: false (created by the authorizing user).
- followers: string[]
-
(Optional) List of user identifiers (OID, ID, or email) who follow this task.
- Use "me" for the current user.
- Use "inherit" to include followers of the parent task.
- Use "app" for the application itself to follow (receive notifications).
For app followers, additional syntaxes are supported:
app|teamorapp|team|channelapp|/path→ appended to the hook URL (e.g.,.../standard/soc1/33456/a7).
-
string - successors: string[]
-
(Optional) List of successor task identifiers (OID or ID).
IDs can be specified as
#idorid. Integer IDs are also accepted. -
string - yourField: object
-
PLACEHOLDER — do NOT send a key literally named
yourField. Instead, use the custom field's own name (as defined via/project/add-field) as the JSON key, with a value matching the field's type:- Text / Email / Hyperlink: string.
- Number / Money: numeric value (no currency symbol).
- Checkbox:
trueorfalse. - Select: option name (string).
- Date: ISO 8601 timestamp (
yyyy-MM-dd'T'HH:mm:ssZ) or date-only (yyyy-MM-dd). - Duration: number of seconds.
- User: user OID, user ID, or email — server resolves to the user's OID.
-
Task: task OID, integer task ID, or
#<id>string — server resolves to the task's OID (scoped to this project). - Multi-value (fields configured with
multiple: true): provide a list.
Example body fragment:
{"Priority": 3, "Owners": ["alice", "[email protected]"], "Depends": ["#42"]}. - tags: string[]
-
(Optional) A list of tag OIDs or names to be added to the new task. Tag names are case-insensitive.
-
string - tasks: CreateTaskBody
-
(Optional) List of subtasks to create along with this task.
-
CreateTaskBody - name: string
-
The name of the task.
- etc: integer
-
(Optional) Estimated time to complete, in seconds. Must be non-negative.
- status: integer
-
(Optional) Task status. Must be between 0 and 100. Default: 0.
- priority: integer -1, 0, 1, 2
-
(Optional) Task priority.
-1(lowest) through2(highest);0is Normal. Default: 0. (The server also accepts the case-insensitive English namesLow,Medium,High,Urgent, but the integer form is recommended for typed callers.) - sourceRef: object
-
(Optional) Arbitrary source reference data to attach to the task. Available via API when retrieving the task.
If the entry contains a key
text, its value will be displayed client-side and should be formatted in Markdown. It is recommended to include a source link.
Example
{
"description": "This is a *cool* task.",
"assignees": [
"6QMKkEPBVWETLWrXqws94ALU"
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"recurrence": {
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"peekaboo": true,
"section": true,
"milestone": true,
"asUser": true,
"followers": [
"tzufRLqCnud74dARyDSvjWDl"
],
"successors": "[\"#13\"]",
"yourField": "object",
"tags": [
"X6nmx9XjEO2wKbqeB1pRT43C"
],
"tasks": [
{
"description": "This is a *cool* task.",
"assignees": [
"6QMKkEPBVWETLWrXqws94ALU"
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"recurrence": "#/definitions/Recurrence",
"peekaboo": true,
"section": true,
"milestone": true,
"asUser": true,
"followers": [
"tzufRLqCnud74dARyDSvjWDl"
],
"successors": "[\"#13\"]",
"yourField": "object",
"tags": [
"X6nmx9XjEO2wKbqeB1pRT43C"
],
"tasks": [
"#/definitions/CreateTaskBody"
],
"name": "Design new **logo**",
"etc": 0,
"status": 0,
"priority": 0,
"sourceRef": "{\"text\": \"Source: [Gmail](https://gmail.com/link)\"}"
}
],
"name": "Design new **logo**",
"etc": 0,
"status": 0,
"priority": 0,
"sourceRef": "{\"text\": \"Source: [Gmail](https://gmail.com/link)\"}"
}
Doc: object
- url: string
-
URL of this document on the Quire website.
- nameText: string
-
Name with Markdown removed.
- nameHtml: string
-
Name rendered as an HTML fragment converted from Markdown.
- name: string
-
Display name (Markdown supported).
- id: string
-
ID.
- description: string
-
Description (Markdown supported).
- descriptionText: string
-
Description with Markdown removed.
- descriptionHtml: string
-
Description rendered as an HTML fragment converted from Markdown.
- iconColor: string
-
Color index for the icon from Quire’s predefined palette. Two-digit code: first digit 0–5, second digit 0–7 (e.g.,
37). - image: string
-
Image URL representing this record.
- oid: string
-
Object identifier (OID), a UUID-like unique string.
- partner: SimpleTaggingEntity
-
External team this record belongs to. Null if the record is not accessible to external-team members.
- archivedAt: string
-
Timestamp (UTC, ISO 8601) when this record was archived. Null if not archived.
- start: string
-
Target start date for this record, or null if not specified.
- due: string
-
Target due date for this record, or null if not specified.
- owner: DocOwner
-
Project this document belongs to.
- createdAt: string
-
Creation timestamp in UTC (ISO 8601).
- createdBy: SimpleIdentity
-
User who created this record.
Example
{
"url": "https://quire.io/w/my_project?doc=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
DocOwner: object
- url: string
-
URL of this owner on the Quire website.
- type: string
-
Type of the owning object (e.g., Project).
- id: string
-
Identifier for this record.
- iconColor: string
-
Color index for the icon from Quire’s predefined palette. Two-digit code: first digit 0–5, second digit 0–7 (e.g.,
37). - image: string
-
Image URL representing this record.
- name: string
-
Display name.
- oid: string
-
Object identifier (OID), a UUID-like unique string.
Example
{
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
ErrorResponse: object
Represents an error response.
- code: integer
-
The error code.
- message: string
-
Human-readable error message.
Example
{
"code": 429,
"message": "Something went wrong."
}
FieldConditionFormat: object
- when: string past, yesterday, today, tomorrow, upcoming, last7d, next7d, lastWeek, thisWeek, nextWeek
-
(Date fields) Date condition.
- op: string >=, >, <=, <, =, !=, between, notBetween
-
(Value fields) Comparison operator.
- color: string
-
Palette color index. Format: two digits
[0-5][0-7](first = row 0-5, second = column 0-7). Examples:00,13,57. NOT a CSS hex color. - first: Number
-
(Value fields) First operand. For
duration, must be an integer number of seconds. - second: Number
-
(Value fields,
between/notBetweenonly) Second operand. Forduration, must be an integer number of seconds.
Example
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
FieldDefinition: object
- resultType: string text, number, money, date, duration, checkbox
-
(Optional,
formulaonly) Expected result type. - formula: string
-
(Required for
formula) Formula expression. - conditionFormat: FieldConditionFormat
-
(Optional) Conditional-format rules. Applicable to
date(date rules usewhen) and tonumber/money/duration/lookup(value rules useop/first/second). Aformulais resolved by itsresultType:date→ date rules,number/money/duration→ value rules. -
FieldConditionFormat - private: boolean
-
(Optional) Restrict access to non-guest members only.
- durationFormat: string hh:mm:ss, hh:mm, 1h1m, 1h, 1d1h, dd:hh:mm:ss, dd:hh:mm, dd:hh
-
(Optional,
durationorformulaonly) Duration display format. - withTime: boolean
-
(Optional,
dateonly) Include time-of-day in addition to the date. - lookup: object
-
(Required for
lookup) Map from lookup key to numeric value. Keys are OIDs of the configuredlookupTypeentity (e.g. user OIDs whenlookupType=User). Values are numbers. Example:{"abc123": 1, "def456": 2}. - lookupType: string User, Task, Project, Organization
-
(Optional,
lookuponly) Source type for lookup keys. Default:User. - hidden: boolean
-
(Optional) Hide this field from the task detail panel.
- ndecimal: integer -1, 0, 1, 2, 3
-
(Optional,
number/moneyonly) Number of decimal digits.-1means no rounding. - multiple: boolean
-
(Optional) Allow multiple values. Applies to
select,user,task, andfile(always true forfile). - clearOnDup: boolean
-
(Optional) Clear this field when duplicating a task.
- options: FieldOption
-
(Required for
select) Option list. -
FieldOption - type: string text, number, money, date, duration, select, checkbox, user, task, hyperlink, email, formula, file, lookup
-
Field type.
- percent: boolean
-
(Optional,
numberonly) Format the value as a percentage. - currency: string
-
(Optional,
moneyorformulaonly) Currency symbol. When omitted on a money field, defaults to$.
Example
{
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"type": "number",
"percent": false,
"currency": "USD"
}
FieldDefinitionWithName: object
- name: string
-
Field name (equals the path
fieldNamefor update/rename/move, or thenamesupplied in the body for add). - resultType: string text, number, money, date, duration, checkbox
-
(Optional,
formulaonly) Expected result type. - formula: string
-
(Required for
formula) Formula expression. - conditionFormat: FieldConditionFormat
-
(Optional) Conditional-format rules. Applicable to
date(date rules usewhen) and tonumber/money/duration/lookup(value rules useop/first/second). Aformulais resolved by itsresultType:date→ date rules,number/money/duration→ value rules. -
FieldConditionFormat - private: boolean
-
(Optional) Restrict access to non-guest members only.
- durationFormat: string hh:mm:ss, hh:mm, 1h1m, 1h, 1d1h, dd:hh:mm:ss, dd:hh:mm, dd:hh
-
(Optional,
durationorformulaonly) Duration display format. - withTime: boolean
-
(Optional,
dateonly) Include time-of-day in addition to the date. - lookup: object
-
(Required for
lookup) Map from lookup key to numeric value. Keys are OIDs of the configuredlookupTypeentity (e.g. user OIDs whenlookupType=User). Values are numbers. Example:{"abc123": 1, "def456": 2}. - lookupType: string User, Task, Project, Organization
-
(Optional,
lookuponly) Source type for lookup keys. Default:User. - hidden: boolean
-
(Optional) Hide this field from the task detail panel.
- ndecimal: integer -1, 0, 1, 2, 3
-
(Optional,
number/moneyonly) Number of decimal digits.-1means no rounding. - multiple: boolean
-
(Optional) Allow multiple values. Applies to
select,user,task, andfile(always true forfile). - clearOnDup: boolean
-
(Optional) Clear this field when duplicating a task.
- options: FieldOption
-
(Required for
select) Option list. -
FieldOption - type: string text, number, money, date, duration, select, checkbox, user, task, hyperlink, email, formula, file, lookup
-
Field type.
- percent: boolean
-
(Optional,
numberonly) Format the value as a percentage. - currency: string
-
(Optional,
moneyorformulaonly) Currency symbol. When omitted on a money field, defaults to$.
Example
{
"name": "Priority",
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"type": "number",
"percent": false,
"currency": "USD"
}
FieldOption: object
- color: string
-
(Optional) Palette color index for the option's chip. Format: two digits
[0-5][0-7](first = row 0-5, second = column 0-7). Examples:00,13,57. NOT a CSS hex color. If omitted on creation, a color is auto-assigned. - name: string
-
Option name (unique within the field).
Example
{
"color": "13",
"name": "High"
}
Insight: object
- url: string
-
URL of this insight view on the Quire website.
- nameText: string
-
Name with Markdown removed.
- nameHtml: string
-
Name rendered as an HTML fragment converted from Markdown.
- name: string
-
Display name (Markdown supported).
- id: string
-
ID.
- description: string
-
Description (Markdown supported).
- descriptionText: string
-
Description with Markdown removed.
- descriptionHtml: string
-
Description rendered as an HTML fragment converted from Markdown.
- iconColor: string
-
Color index for the icon from Quire’s predefined palette. Two-digit code: first digit 0–5, second digit 0–7 (e.g.,
37). - image: string
-
Image URL representing this record.
- oid: string
-
Object identifier (OID), a UUID-like unique string.
- partner: SimpleTaggingEntity
-
External team this record belongs to. Null if the record is not accessible to external-team members.
- archivedAt: string
-
Timestamp (UTC, ISO 8601) when this record was archived. Null if not archived.
- start: string
-
Target start date for this record, or null if not specified.
- due: string
-
Target due date for this record, or null if not specified.
- fields: object
-
Custom-field definitions for this insight view, keyed by field name. Use the
add-field,update-field,remove-field,rename-field, andmove-fieldextensions to mutate entries. - owner: InsightOwner
-
Owner this insight belongs to.
- createdAt: string
-
Creation timestamp in UTC (ISO 8601).
- createdBy: SimpleIdentity
-
User who created this record.
Example
{
"url": "https://quire.io/w/my_project?insight=View101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"fields": "object",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
InsightOwner: object
- url: string
-
URL of this owner on the Quire website.
- type: string
-
Type of the owning object (e.g., Project).
- id: string
-
Identifier for this record.
- iconColor: string
-
Color index for the icon from Quire’s predefined palette. Two-digit code: first digit 0–5, second digit 0–7 (e.g.,
37). - image: string
-
Image URL representing this record.
- name: string
-
Display name.
- oid: string
-
Object identifier (OID), a UUID-like unique string.
Example
{
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
Organization: object
- url: string
-
URL of this organization on the Quire website.
- email: string
-
Organization email address.
- nameText: string
-
Organization name with Markdown removed.
- nameHtml: string
-
Organization name rendered as an HTML fragment converted from Markdown.
- name: string
-
Display name of the organization (Markdown supported).
- id: string
-
Organization ID.
- website: string
-
Website URL.
- description: string
-
Description (Markdown supported).
- descriptionText: string
-
Description with Markdown removed.
- descriptionHtml: string
-
Description rendered as an HTML fragment converted from Markdown.
- iconColor: string
-
Color index for the icon from Quire’s predefined palette. Two-digit code: first digit 0–5, second digit 0–7 (e.g.,
37). - image: string
-
Image URL representing this record.
- oid: string
-
Object identifier (OID), a UUID-like unique string.
- editedAt: string
-
Timestamp (UTC, ISO 8601) when this record was last edited.
- followers: SimpleIdentity
-
Users who follow this organization.
-
SimpleIdentity - createdAt: string
-
Creation timestamp in UTC (ISO 8601).
- createdBy: SimpleIdentity
-
User who created this record.
Example
{
"url": "https://quire.io/c/my_organization",
"email": "[email protected]",
"nameText": "My Organization",
"nameHtml": "My Organization",
"name": "My Organization",
"id": "my_organization",
"website": "https://coolwebsites.com",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"editedAt": "2018-12-22T02:06:58.158Z",
"followers": [
{
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
OrganizationWithPlan: object
- url: string
-
URL of this organization on the Quire website.
- email: string
-
Organization email address.
- nameText: string
-
Organization name with Markdown removed.
- nameHtml: string
-
Organization name rendered as an HTML fragment converted from Markdown.
- name: string
-
Display name of the organization (Markdown supported).
- id: string
-
Organization ID.
- website: string
-
Website URL.
- description: string
-
Description (Markdown supported).
- descriptionText: string
-
Description with Markdown removed.
- descriptionHtml: string
-
Description rendered as an HTML fragment converted from Markdown.
- iconColor: string
-
Color index for the icon from Quire’s predefined palette. Two-digit code: first digit 0–5, second digit 0–7 (e.g.,
37). - image: string
-
Image URL representing this record.
- oid: string
-
Object identifier (OID), a UUID-like unique string.
- subscription: Subscription
-
Subscription details for this organization.
- editedAt: string
-
Timestamp (UTC, ISO 8601) when this record was last edited.
- followers: SimpleIdentity
-
Users who follow this organization.
-
SimpleIdentity - createdAt: string
-
Creation timestamp in UTC (ISO 8601).
- createdBy: SimpleIdentity
-
User who created this record.
Example
{
"url": "https://quire.io/c/my_organization",
"email": "[email protected]",
"nameText": "My Organization",
"nameHtml": "My Organization",
"name": "My Organization",
"id": "my_organization",
"website": "https://coolwebsites.com",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"subscription": {
"due": "2038-02-22T02:06:58Z",
"expired": false,
"plan": "Professional"
},
"editedAt": "2018-12-22T02:06:58.158Z",
"followers": [
{
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
Partner: object
- name: string
-
Display name of the external team.
- color: string
-
Color index from Quire’s predefined color palette. Two-digit code where the first digit is 0–5 and the second digit is 0–7 (e.g.,
35). The palette is available in Quire’s color picker. - oid: string
-
Object identifier (OID), a UUID-like unique string.
- image: string
-
Image URL representing this team.
- project: SimpleIdentity
-
The project this tag belongs to.
- createdAt: string
-
Creation timestamp in UTC (ISO 8601).
- createdBy: SimpleIdentity
-
User who created this record.
Example
{
"name": "UI design team",
"color": "35",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"project": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
Project: object
- rootCount: integer
-
Number of root (top-level) tasks in this project.
- url: string
-
URL of this project on the Quire website.
- nameText: string
-
Project name with Markdown removed.
- nameHtml: string
-
Project name rendered as an HTML fragment converted from Markdown.
- activeCount: integer
-
Number of active (not completed) tasks in this project.
- taskCount: integer
-
Total number of tasks in this project.
- organization: SimpleIdentity
-
Organization this project belongs to.
- name: string
-
Display name of the project (Markdown supported).
- id: string
-
Project ID.
- description: string
-
Description (Markdown supported).
- descriptionText: string
-
Description with Markdown removed.
- descriptionHtml: string
-
Description rendered as an HTML fragment converted from Markdown.
- iconColor: string
-
Color index for the icon from Quire’s predefined palette. Two-digit code: first digit 0–5, second digit 0–7 (e.g.,
37). - image: string
-
Image URL representing this record.
- oid: string
-
Object identifier (OID), a UUID-like unique string.
- archivedAt: string
-
Timestamp (UTC, ISO 8601) when this project was archived (peekaboo). Null if not archived.
- start: string
-
Target start date for this project. Null if not set.
- due: string
-
Target due date for this project. Null if not set.
- publicAt: string
-
Timestamp (UTC, ISO 8601) when this project was made public. Null if not public.
- editedAt: string
-
Timestamp (UTC, ISO 8601) when this record was last edited.
- followers: SimpleIdentity
-
Users who follow this project.
-
SimpleIdentity - attachments: Attachment
-
Attachments associated with this project.
-
Attachment - approvalCategories: AppvCat
-
Approval categories defined on this project. Use the
add-appv-cat,update-appv-cat, andremove-appv-catextensions to mutate entries. Null when only the implicit default category is in effect. -
AppvCat - fields: object
-
Custom-field definitions for this project, keyed by field name. Use the
add-field,update-field,remove-field,rename-field, andmove-fieldextensions to mutate entries. - createdAt: string
-
Creation timestamp in UTC (ISO 8601).
- createdBy: SimpleIdentity
-
User who created this record.
Example
{
"rootCount": 5,
"url": "https://quire.io/w/my_project",
"nameText": "My Project",
"nameHtml": "My Project",
"activeCount": 20,
"taskCount": 30,
"organization": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"name": "My Project",
"id": "my_project",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"archivedAt": "2018-12-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"publicAt": "2018-12-22T02:06:58.158Z",
"editedAt": "2018-12-22T02:06:58.158Z",
"followers": [
"#/definitions/SimpleIdentity"
],
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"approvalCategories": [
{
"name": "Legal Review",
"id": "legal",
"claimers": [
"string"
],
"approvers": [
"string"
],
"createdAt": "2026-04-24T10:00:00.000Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"fields": "object",
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
ProjectJsonMap: object
- oid: string
-
Object identifier (OID), a UUID-like unique string.
- name: string
-
Display name of the project.
- id: string
-
Project ID.
Example
{
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"name": "My Project",
"id": "My_Project"
}
ProjectWithPlan: object
- rootCount: integer
-
Number of root (top-level) tasks in this project.
- url: string
-
URL of this project on the Quire website.
- nameText: string
-
Project name with Markdown removed.
- nameHtml: string
-
Project name rendered as an HTML fragment converted from Markdown.
- activeCount: integer
-
Number of active (not completed) tasks in this project.
- taskCount: integer
-
Total number of tasks in this project.
- organization: SimpleIdentity
-
Organization this project belongs to.
- name: string
-
Display name of the project (Markdown supported).
- id: string
-
Project ID.
- description: string
-
Description (Markdown supported).
- descriptionText: string
-
Description with Markdown removed.
- descriptionHtml: string
-
Description rendered as an HTML fragment converted from Markdown.
- iconColor: string
-
Color index for the icon from Quire’s predefined palette. Two-digit code: first digit 0–5, second digit 0–7 (e.g.,
37). - image: string
-
Image URL representing this record.
- oid: string
-
Object identifier (OID), a UUID-like unique string.
- subscription: Subscription
-
Subscription details for this project.
- archivedAt: string
-
Timestamp (UTC, ISO 8601) when this project was archived (peekaboo). Null if not archived.
- start: string
-
Target start date for this project. Null if not set.
- due: string
-
Target due date for this project. Null if not set.
- publicAt: string
-
Timestamp (UTC, ISO 8601) when this project was made public. Null if not public.
- editedAt: string
-
Timestamp (UTC, ISO 8601) when this record was last edited.
- followers: SimpleIdentity
-
Users who follow this project.
-
SimpleIdentity - attachments: Attachment
-
Attachments associated with this project.
-
Attachment - approvalCategories: AppvCat
-
Approval categories defined on this project. Use the
add-appv-cat,update-appv-cat, andremove-appv-catextensions to mutate entries. Null when only the implicit default category is in effect. -
AppvCat - fields: object
-
Custom-field definitions for this project, keyed by field name. Use the
add-field,update-field,remove-field,rename-field, andmove-fieldextensions to mutate entries. - createdAt: string
-
Creation timestamp in UTC (ISO 8601).
- createdBy: SimpleIdentity
-
User who created this record.
Example
{
"rootCount": 5,
"url": "https://quire.io/w/my_project",
"nameText": "My Project",
"nameHtml": "My Project",
"activeCount": 20,
"taskCount": 30,
"organization": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"name": "My Project",
"id": "my_project",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"subscription": {
"due": "2038-02-22T02:06:58Z",
"expired": false,
"plan": "Professional"
},
"archivedAt": "2018-12-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"publicAt": "2018-12-22T02:06:58.158Z",
"editedAt": "2018-12-22T02:06:58.158Z",
"followers": [
"#/definitions/SimpleIdentity"
],
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"approvalCategories": [
{
"name": "Legal Review",
"id": "legal",
"claimers": [
"string"
],
"approvers": [
"string"
],
"createdAt": "2026-04-24T10:00:00.000Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"fields": "object",
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
RateLimit: object
- plan: string
-
Plan name:
Free,Professional,Premium, orEnterprise. - organization: string
-
OID of the organization these limits apply to.
- hour: RateLimitBucket
-
Hourly rate-limit bucket.
- minute: RateLimitBucket
-
Per-minute rate-limit bucket.
Example
{
"plan": "Enterprise",
"organization": "YxjapXXRCOYxoaiCT4tT3OQm",
"hour": {
"reset": 1774863600,
"used": 42,
"limit": 1250,
"remaining": 1208
},
"minute": "#/definitions/RateLimitBucket"
}
RateLimitBucket: object
- reset: integer
-
Unix epoch (seconds) of the next wall-clock boundary at which the
usedcounter will reset. - used: integer
-
Number of calls consumed so far in the current window.
- limit: integer
-
Maximum number of calls allowed in this window.
-1indicates no limit. - remaining: integer
-
Remaining calls:
max(limit - used, 0), or-1if unlimited.
Example
{
"reset": 1774863600,
"used": 42,
"limit": 1250,
"remaining": 1208
}
Recurrence: object
- freq: string daily, weekly, monthly, yearly
-
Recurrence frequency.
- interval: integer
-
Interval between occurrences. For example,
2withweeklymeans every 2 weeks. Default: 1. - byweekday: integer[]
-
Days of the week to apply the recurrence. Integers where 0=Mon, 1=Tue, …, 6=Sun. For weekly recurrences, provide a list (e.g.,
[1],[0,3]). When provided, these days define when the recurrence occurs. -
integer - byweekno: integer
-
Week number (1-based) used with
monthlyoryearlyfrequencies. - bydayno: integer
-
Day number (1-based) used with
monthlyoryearlyfrequencies. Note:byweekdayandbydaynocannot be specified at the same time. - bymonth: integer
-
Month number (1–12) used with
yearlyfrequency. - dupsubtasks: boolean
-
Whether to duplicate subtasks when the task is completed. Default: true.
- sincelatest: boolean
-
Whether to repeat relative to the last completion date (daily frequency only). Default: false.
- until: string
-
End date for the recurrence (UTC, ISO 8601). If not specified, the series never ends.
Example
{
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
}
RecurrenceX: object
- seriesId: string
-
Identifier for the recurrence series this task belongs to. Tasks that share the same seriesId are part of the same recurring series.
- freq: string daily, weekly, monthly, yearly
-
Recurrence frequency.
- interval: integer
-
Interval between occurrences. For example,
2withweeklymeans every 2 weeks. Default: 1. - byweekday: integer[]
-
Days of the week to apply the recurrence. Integers where 0=Mon, 1=Tue, …, 6=Sun. For weekly recurrences, provide a list (e.g.,
[1],[0,3]). When provided, these days define when the recurrence occurs. -
integer - byweekno: integer
-
Week number (1-based) used with
monthlyoryearlyfrequencies. - bydayno: integer
-
Day number (1-based) used with
monthlyoryearlyfrequencies. Note:byweekdayandbydaynocannot be specified at the same time. - bymonth: integer
-
Month number (1–12) used with
yearlyfrequency. - dupsubtasks: boolean
-
Whether to duplicate subtasks when the task is completed. Default: true.
- sincelatest: boolean
-
Whether to repeat relative to the last completion date (daily frequency only). Default: false.
- until: string
-
End date for the recurrence (UTC, ISO 8601). If not specified, the series never ends.
Example
{
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
}
Referrer: object
- when: string
-
Timestamp (UTC, ISO 8601) when this reference was created.
- user: string
-
OID of the user who created this reference.
- task: string
-
OID of the task that references another task (the referrer task).
Example
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
SimpleAttachment: object
- url: string
-
Direct URL to access this attachment.
- name: string
-
File name of the attachment.
- length: integer
-
Size of the attachment in bytes.
Example
{
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000
}
SimpleEntityWithId: object
- id: string
-
Identifier for this record.
- oid: string
-
Object identifier (OID), a UUID-like unique string.
Example
{
"id": "my_id",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
SimpleIdentity: object
- url: string
-
URL of this record on the Quire website.
- id: string
-
Identifier for this record.
- iconColor: string
-
Color index for the icon from Quire’s predefined palette. Two-digit code: first digit 0–5, second digit 0–7 (e.g.,
37). - image: string
-
Image URL representing this record.
- name: string
-
Display name.
- oid: string
-
Object identifier (OID), a UUID-like unique string.
Example
{
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
SimpleTaggingEntity: object
- color: string
-
Color index from Quire’s predefined palette. Two-digit code: first digit 0–5, second digit 0–7 (e.g.,
35). The palette appears in Quire’s color picker. - name: string
-
Display name.
- oid: string
-
Object identifier (OID), a UUID-like unique string.
Example
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
Status: object
- color: string
-
Color index from Quire’s predefined palette. Two-digit code: first digit 0–5, second digit 0–7 (e.g.,
35). - name: string
-
Display name of the status.
- value: integer
-
Non-negative integer indicating progress. Must be unique within its context (e.g., project). Values ≥ 100 are treated as completed.
Example
{
"color": "35",
"name": "Doing",
"value": 50
}
StorageList: object
- currentProject: string
-
Value stored under the key
currentProject(e.g., a project OID). - myList: string[]
-
List stored under the key
myList. -
string - latest: StorageMap
-
Object stored under the key
latest(key–value map of properties).
Example
{
"currentProject": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"myList": "[\"alpha\", \"beta\", \"gamma\"]",
"latest": {
"key": "My data"
}
}
Sublist: object
- url: string
-
URL of this sublist on the Quire website.
- nameText: string
-
Name with Markdown removed.
- nameHtml: string
-
Name rendered as an HTML fragment converted from Markdown.
- name: string
-
Display name (Markdown supported).
- id: string
-
ID.
- description: string
-
Description (Markdown supported).
- descriptionText: string
-
Description with Markdown removed.
- descriptionHtml: string
-
Description rendered as an HTML fragment converted from Markdown.
- iconColor: string
-
Color index for the icon from Quire’s predefined palette. Two-digit code: first digit 0–5, second digit 0–7 (e.g.,
37). - image: string
-
Image URL representing this record.
- oid: string
-
Object identifier (OID), a UUID-like unique string.
- partner: SimpleTaggingEntity
-
External team this record belongs to. Null if the record is not accessible to external-team members.
- archivedAt: string
-
Timestamp (UTC, ISO 8601) when this record was archived. Null if not archived.
- start: string
-
Target start date for this record, or null if not specified.
- due: string
-
Target due date for this record, or null if not specified.
- owner: SublistOwner
-
Project this sublist belongs to.
- createdAt: string
-
Creation timestamp in UTC (ISO 8601).
- createdBy: SimpleIdentity
-
User who created this record.
Example
{
"url": "https://quire.io/w/my_project?sublist=Highlight101",
"nameText": "Highlight 101",
"nameHtml": "Highlight 101",
"name": "Highlight 101",
"id": "Highlight101",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"partner": {
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"archivedAt": "2020-02-22T02:06:58.158Z",
"start": "2024-01-02",
"due": "2024-05-25",
"owner": {
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
}
SublistOwner: object
- url: string
-
URL of this owner on the Quire website.
- type: string
-
Type of the owning object (e.g., Project).
- id: string
-
Identifier for this record.
- iconColor: string
-
Color index for the icon from Quire’s predefined palette. Two-digit code: first digit 0–5, second digit 0–7 (e.g.,
37). - image: string
-
Image URL representing this record.
- name: string
-
Display name.
- oid: string
-
Object identifier (OID), a UUID-like unique string.
Example
{
"url": "https://quire.io/w/prj_id",
"type": "Project",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
Subscription: object
- due: string
-
Subscription due/renewal timestamp in UTC (ISO 8601).
- expired: boolean
-
Whether the subscription is expired. Available only when a due date is present.
- plan: string
-
Plan name (e.g., Free, Professional, Premium, Enterprise).
Example
{
"due": "2038-02-22T02:06:58Z",
"expired": false,
"plan": "Professional"
}
Tag: object
- global: boolean
-
Whether this tag is global (available across projects). May be omitted in responses when false.
- color: string
-
Color index from Quire’s predefined color palette. Two-digit code where the first digit is 0–5 and the second digit is 0–7 (e.g.,
35). The palette is available in Quire’s color picker. - name: string
-
Display name of the tag.
- oid: string
-
Object identifier (OID), a UUID-like unique string.
- project: SimpleIdentity
-
The project this tag belongs to.
- createdAt: string
-
Creation timestamp in UTC (ISO 8601).
- createdBy: SimpleIdentity
-
User who created this record.
Example
{
"global": true,
"color": "35",
"name": "Later",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"project": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
Task: object
- successors: string[]
-
IDs of tasks that depend on this task.
-
string - tags: SimpleTaggingEntity
-
Tags applied to this task.
-
SimpleTaggingEntity - predecessors: string[]
-
IDs of tasks that this task depends on.
-
string - oid: string
-
Object identifier (OID), a UUID-like unique string.
- id: integer
-
Task id.
- nameText: string
-
Task name with Markdown removed.
- nameHtml: string
-
Task name rendered as an HTML fragment converted from Markdown.
- name: string
-
Task name (Markdown supported).
- description: string
-
Task description (Markdown supported).
- descriptionText: string
-
Task description with Markdown removed.
- descriptionHtml: string
-
Task description rendered as an HTML fragment converted from Markdown.
- etc: integer
-
The estimated time to complete the task, expressed in seconds. If null, no estimate has been specified.
- recurrence: RecurrenceX
-
Contains the recurrence details of this task. If
null, the task does not repeat. - timelogs: Timelog
-
The time log entries associated with this task.
-
Timelog - start: string
-
Start date/time in UTC. If a time component is present, milliseconds are set to
001. If date-only, milliseconds are000(and hour, minute, second are also zero). - due: string
-
Due date/time in UTC. If a time component is present, milliseconds are set to
001. If date-only, milliseconds are000(and hour, minute, second are also zero). - status: integer
-
Task status, from 0 to 100.
100indicates the task is completed. - priority: integer
-
Task priority, from -1 (lowest) to 2 (highest). Default: 0.
- assignors: SimpleIdentity
-
A list of users who assigned this task. Each item in assignors corresponds by index to the matching item in assignees (e.g., the first assignee was assigned by the first assignor).
-
SimpleIdentity - partner: SimpleTaggingEntity
-
The external team to which this task belongs. If
null, this task is not associated with any external team. - partnerBy: SimpleIdentity
-
The user who assigned this task to the external team. If
null, the task is not associated with any external team. - assignees: SimpleIdentity
-
Users assigned to this task.
-
SimpleIdentity - order: integer
-
Indicates the display order of this task in the board view. A smaller value means the task appears earlier. This field is only relevant in board view and has no meaning elsewhere.
- attachments: Attachment
-
The list of files attached to this task.
-
Attachment - cover: string
-
The ID of the attachment used as the cover image for this task.
- childCount: integer
-
The number of subtasks belonging to this task. To retrieve the subtasks, send a GET request to "/task/list/{oid}".
- referrers: Referrer
-
A list of items that reference this task. Note: Some referrers may no longer exist.
-
Referrer - peekaboo: boolean
-
Whether the task is currently peekabooed (arhived).
- section: boolean
-
Whether this task is a section.
- milestone: boolean
-
Whether this task is a milestone.
- url: string
-
URL of this task on the Quire website.
- followers: SimpleIdentity
-
The list of users who are following this task.
-
SimpleIdentity - mutes: SimpleIdentity
-
The list of users who have muted this task and will not receive notifications about it, even if they are assigned.
-
SimpleIdentity - favorites: SimpleIdentity
-
The list of users who have marked this task as a favorite.
-
SimpleIdentity - sourceRef: object
-
Source reference data stored by an app.
- toggledAt: string
-
The timestamp of the most recent status change for this task.
- toggledBy: SimpleIdentity
-
The user who last changed the status of this task.
- editedAt: string
-
Represents the timestamp of the most recent edit to this record.
- commentedAt: string
-
Indicates the timestamp of the most recent comment posted on this record.
If
null, the record has never had a comment.Since comments can be removed, this value may not always match the current set of comments.
- approval: Approval
-
The task's current approval state. Null if no approval has been requested. Mutate via
POST /task/approve/{oid}(request / approve / reject / change) andDELETE /task/revoke-approval/{oid}(cancel). - createdAt: string
-
Creation timestamp in UTC (ISO 8601).
- createdBy: SimpleIdentity
-
User who created this record.
Example
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
TaskInfo: object
- id: integer
-
Task id.
- oid: string
-
Object identifier (OID), a UUID-like unique string.
- parent: TaskInfo
-
Parent task information, if this task has a parent.
At most 10 levels of ancestors are returned. If exceeded, the 10th ancestor contains only the OID to indicate this case.
Example
{
"id": 12,
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"parent": {
"id": 12,
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"parent": "#/definitions/TaskInfo"
}
}
TaskWithParentInfo: object
- successors: string[]
-
IDs of tasks that depend on this task.
-
string - tags: SimpleTaggingEntity
-
Tags applied to this task.
-
SimpleTaggingEntity - predecessors: string[]
-
IDs of tasks that this task depends on.
-
string - oid: string
-
Object identifier (OID), a UUID-like unique string.
- id: integer
-
Task id.
- nameText: string
-
Task name with Markdown removed.
- nameHtml: string
-
Task name rendered as an HTML fragment converted from Markdown.
- name: string
-
Task name (Markdown supported).
- description: string
-
Task description (Markdown supported).
- descriptionText: string
-
Task description with Markdown removed.
- descriptionHtml: string
-
Task description rendered as an HTML fragment converted from Markdown.
- etc: integer
-
The estimated time to complete the task, expressed in seconds. If null, no estimate has been specified.
- recurrence: RecurrenceX
-
Contains the recurrence details of this task. If
null, the task does not repeat. - timelogs: Timelog
-
The time log entries associated with this task.
-
Timelog - start: string
-
Start date/time in UTC. If a time component is present, milliseconds are set to
001. If date-only, milliseconds are000(and hour, minute, second are also zero). - due: string
-
Due date/time in UTC. If a time component is present, milliseconds are set to
001. If date-only, milliseconds are000(and hour, minute, second are also zero). - status: integer
-
Task status, from 0 to 100.
100indicates the task is completed. - priority: integer
-
Task priority, from -1 (lowest) to 2 (highest). Default: 0.
- assignors: SimpleIdentity
-
A list of users who assigned this task. Each item in assignors corresponds by index to the matching item in assignees (e.g., the first assignee was assigned by the first assignor).
-
SimpleIdentity - partner: SimpleTaggingEntity
-
The external team to which this task belongs. If
null, this task is not associated with any external team. - partnerBy: SimpleIdentity
-
The user who assigned this task to the external team. If
null, the task is not associated with any external team. - assignees: SimpleIdentity
-
Users assigned to this task.
-
SimpleIdentity - order: integer
-
Indicates the display order of this task in the board view. A smaller value means the task appears earlier. This field is only relevant in board view and has no meaning elsewhere.
- attachments: Attachment
-
The list of files attached to this task.
-
Attachment - cover: string
-
The ID of the attachment used as the cover image for this task.
- childCount: integer
-
The number of subtasks belonging to this task. To retrieve the subtasks, send a GET request to "/task/list/{oid}".
- referrers: Referrer
-
A list of items that reference this task. Note: Some referrers may no longer exist.
-
Referrer - peekaboo: boolean
-
Whether the task is currently peekabooed (arhived).
- section: boolean
-
Whether this task is a section.
- milestone: boolean
-
Whether this task is a milestone.
- url: string
-
URL of this task on the Quire website.
- followers: SimpleIdentity
-
The list of users who are following this task.
-
SimpleIdentity - mutes: SimpleIdentity
-
The list of users who have muted this task and will not receive notifications about it, even if they are assigned.
-
SimpleIdentity - favorites: SimpleIdentity
-
The list of users who have marked this task as a favorite.
-
SimpleIdentity - sourceRef: object
-
Source reference data stored by an app.
- toggledAt: string
-
The timestamp of the most recent status change for this task.
- toggledBy: SimpleIdentity
-
The user who last changed the status of this task.
- editedAt: string
-
Represents the timestamp of the most recent edit to this record.
- commentedAt: string
-
Indicates the timestamp of the most recent comment posted on this record.
If
null, the record has never had a comment.Since comments can be removed, this value may not always match the current set of comments.
- approval: Approval
-
The task's current approval state. Null if no approval has been requested. Mutate via
POST /task/approve/{oid}(request / approve / reject / change) andDELETE /task/revoke-approval/{oid}(cancel). - parent: TaskInfo
-
The parent information, if this task has a parent. If this task has no parent, this field will be null.
Note: It returns at most 10 levels of parent tasks. If exceeded, the 11th item will contain only the id.
- createdAt: string
-
Creation timestamp in UTC (ISO 8601).
- createdBy: SimpleIdentity
-
User who created this record.
Example
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"parent": {
"id": 12,
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"parent": "#/definitions/TaskInfo"
}
}
TaskWithProjectParentInfo: object
- successors: string[]
-
IDs of tasks that depend on this task.
-
string - tags: SimpleTaggingEntity
-
Tags applied to this task.
-
SimpleTaggingEntity - predecessors: string[]
-
IDs of tasks that this task depends on.
-
string - oid: string
-
Object identifier (OID), a UUID-like unique string.
- id: integer
-
Task id.
- nameText: string
-
Task name with Markdown removed.
- nameHtml: string
-
Task name rendered as an HTML fragment converted from Markdown.
- name: string
-
Task name (Markdown supported).
- description: string
-
Task description (Markdown supported).
- descriptionText: string
-
Task description with Markdown removed.
- descriptionHtml: string
-
Task description rendered as an HTML fragment converted from Markdown.
- etc: integer
-
The estimated time to complete the task, expressed in seconds. If null, no estimate has been specified.
- recurrence: RecurrenceX
-
Contains the recurrence details of this task. If
null, the task does not repeat. - timelogs: Timelog
-
The time log entries associated with this task.
-
Timelog - start: string
-
Start date/time in UTC. If a time component is present, milliseconds are set to
001. If date-only, milliseconds are000(and hour, minute, second are also zero). - due: string
-
Due date/time in UTC. If a time component is present, milliseconds are set to
001. If date-only, milliseconds are000(and hour, minute, second are also zero). - status: integer
-
Task status, from 0 to 100.
100indicates the task is completed. - priority: integer
-
Task priority, from -1 (lowest) to 2 (highest). Default: 0.
- assignors: SimpleIdentity
-
A list of users who assigned this task. Each item in assignors corresponds by index to the matching item in assignees (e.g., the first assignee was assigned by the first assignor).
-
SimpleIdentity - partner: SimpleTaggingEntity
-
The external team to which this task belongs. If
null, this task is not associated with any external team. - partnerBy: SimpleIdentity
-
The user who assigned this task to the external team. If
null, the task is not associated with any external team. - assignees: SimpleIdentity
-
Users assigned to this task.
-
SimpleIdentity - order: integer
-
Indicates the display order of this task in the board view. A smaller value means the task appears earlier. This field is only relevant in board view and has no meaning elsewhere.
- attachments: Attachment
-
The list of files attached to this task.
-
Attachment - cover: string
-
The ID of the attachment used as the cover image for this task.
- childCount: integer
-
The number of subtasks belonging to this task. To retrieve the subtasks, send a GET request to "/task/list/{oid}".
- referrers: Referrer
-
A list of items that reference this task. Note: Some referrers may no longer exist.
-
Referrer - peekaboo: boolean
-
Whether the task is currently peekabooed (arhived).
- section: boolean
-
Whether this task is a section.
- milestone: boolean
-
Whether this task is a milestone.
- url: string
-
URL of this task on the Quire website.
- followers: SimpleIdentity
-
The list of users who are following this task.
-
SimpleIdentity - mutes: SimpleIdentity
-
The list of users who have muted this task and will not receive notifications about it, even if they are assigned.
-
SimpleIdentity - favorites: SimpleIdentity
-
The list of users who have marked this task as a favorite.
-
SimpleIdentity - sourceRef: object
-
Source reference data stored by an app.
- toggledAt: string
-
The timestamp of the most recent status change for this task.
- toggledBy: SimpleIdentity
-
The user who last changed the status of this task.
- editedAt: string
-
Represents the timestamp of the most recent edit to this record.
- commentedAt: string
-
Indicates the timestamp of the most recent comment posted on this record.
If
null, the record has never had a comment.Since comments can be removed, this value may not always match the current set of comments.
- approval: Approval
-
The task's current approval state. Null if no approval has been requested. Mutate via
POST /task/approve/{oid}(request / approve / reject / change) andDELETE /task/revoke-approval/{oid}(cancel). - parent: TaskInfo
-
The parent information, if this task has a parent. If this task has no parent, this field will be null.
Note: It returns at most 10 levels of parent tasks. If exceeded, the 11th item will contain only the id.
- project: SimpleEntityWithId
-
The project to which this task belongs.
- createdAt: string
-
Creation timestamp in UTC (ISO 8601).
- createdBy: SimpleIdentity
-
User who created this record.
Example
{
"successors": "['#135', '#26']",
"tags": [
{
"color": "35",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
],
"predecessors": "['#17', '#66', '#91']",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"id": 12,
"nameText": "Design new logo",
"nameHtml": "Design new <b>logo</b>",
"name": "Design new **logo**",
"description": "This is a *cool* task.",
"descriptionText": "This is a cool task.",
"descriptionHtml": "This is a <i>cool</i> task.",
"etc": 500,
"recurrence": {
"seriesId": "j47xvxul26",
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"timelogs": [
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"status": 0,
"priority": 0,
"assignors": [
"#/definitions/SimpleIdentity"
],
"partner": "#/definitions/SimpleTaggingEntity",
"partnerBy": "#/definitions/SimpleIdentity",
"assignees": [
"#/definitions/SimpleIdentity"
],
"order": 99,
"attachments": [
{
"type": 2,
"url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png",
"name": "file.txt",
"length": 20000,
"createdAt": "2018-12-22T02:06:58.158Z",
"createdBy": "#/definitions/SimpleIdentity"
}
],
"cover": "qfqVmUtC",
"childCount": 5,
"referrers": [
{
"when": "2018-12-22T02:06:58.158Z",
"user": "wrSpgghWFCzPHBqiShSurDeD",
"task": "wrSpgghWFCzPHBqiShSurDeD"
}
],
"peekaboo": true,
"section": true,
"milestone": true,
"url": "https://quire.io/w/my_project/123",
"followers": [
"#/definitions/SimpleIdentity"
],
"mutes": [
"#/definitions/SimpleIdentity"
],
"favorites": [
"#/definitions/SimpleIdentity"
],
"sourceRef": "{'text': 'Source: [Gmail](https://gmail.com/link)'}",
"toggledAt": "2018-12-22T02:06:58.158Z",
"toggledBy": "#/definitions/SimpleIdentity",
"editedAt": "2018-12-22T02:06:58.158Z",
"commentedAt": "2023-12-22T09:06:28.253Z",
"approval": {
"category": "legal",
"requester": "string",
"approver": "string",
"toggledAt": "2026-04-24T10:05:00.000Z",
"state": "awaiting"
},
"parent": {
"id": 12,
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"parent": "#/definitions/TaskInfo"
}
}
Timelog: object
- start: string
-
Start timestamp (UTC) for this time log.
- end: string
-
End timestamp (UTC) for this time log.
- user: SimpleIdentity
-
User who recorded this time log.
- billable: boolean
-
Whether this time log is billable. May be omitted in responses when false.
- note: string
-
Optional note for this time log.
Example
{
"start": "2023-02-20T00:00:00.000Z",
"end": "2023-02-20T00:05:35.000Z",
"user": {
"url": "https://quire.io/u/my_id",
"id": "my_id",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"name": "Foo",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
},
"billable": true,
"note": "A piece of cake"
}
UpdateAppvCatBody: object
- claimers: string[]
-
(Optional) New claimers list — users allowed to request approval in this category.
null: anyone can request.[](empty list): admins only.- List of user OIDs: those specific users.
-
string - approvers: string[]
-
(Optional) New approvers list — users allowed to approve, reject, or request changes in this category.
null: anyone can respond.[](empty list): admins only.- List of user OIDs: those specific users.
-
string - name: string
-
(Optional) New display name.
Example
{
"claimers": [
"string"
],
"approvers": [
"string"
],
"name": "Legal Review"
}
UpdateChatBody: object
Request body for updating a chat channel. Extends UpdateWorkBody with no additional fields; omitted fields preserve existing values.
- description: string
-
(Optional) New description for this record (Markdown supported).
- archived: boolean
-
(Optional) Archive toggle. Specify true to archive this record; specify false to unarchive.
- start: string
-
(Optional) Target start date for this record.
- due: string
-
(Optional) Target due date for this record.
- iconColor: string
-
(Optional) Icon color index from Quire's predefined palette. Two-digit code
[0-5][0-7]: first digit 0-5, second digit 0-7 (e.g.00,37,57). NOT a CSS hex color. - image: string icon-view-list, icon-view-kanban, icon-briefcase-o, icon-rocket-o, icon-bug-o, icon-leaf-o, icon-clapperboard, icon-sitemap-o, icon-flash-on-o, icon-piggy-bank-o, icon-graduation-cap-o, icon-paper-plane-o, icon-globe-o, icon-music-o, icon-detail, icon-beach-o, icon-paper, icon-home-o, icon-building, icon-database-o, icon-microscope-o, icon-hamburger-o, icon-trophy-o, icon-thumbs-o-up, icon-thumbs-o-down, icon-smile-o, icon-frown-o, icon-meh-o, icon-bullseye, icon-square-dotted-o
-
(Optional) Icon image for this record.
- name: string
-
(Optional) New display name for this record.
- id: string
-
(Optional) New ID for this record.
Example
{
"description": "**Great** record to start with.",
"archived": true,
"start": "2024-01-02",
"due": "2024-05-25",
"iconColor": "37",
"image": "icon-view-kanban",
"name": "Highlight 101",
"id": "Highlight101"
}
UpdateCommentBody: object
- description: string
-
(Optional) New comment content (Markdown supported).
- pinned: boolean
-
(Optional) Whether the comment is pinned.
Example
{
"description": "Adjust style",
"pinned": false
}
UpdateDocBody: object
Request body for updating a doc. Extends UpdateWorkBody with no additional fields; omitted fields preserve existing values.
- description: string
-
(Optional) New description for this record (Markdown supported).
- archived: boolean
-
(Optional) Archive toggle. Specify true to archive this record; specify false to unarchive.
- start: string
-
(Optional) Target start date for this record.
- due: string
-
(Optional) Target due date for this record.
- iconColor: string
-
(Optional) Icon color index from Quire's predefined palette. Two-digit code
[0-5][0-7]: first digit 0-5, second digit 0-7 (e.g.00,37,57). NOT a CSS hex color. - image: string icon-view-list, icon-view-kanban, icon-briefcase-o, icon-rocket-o, icon-bug-o, icon-leaf-o, icon-clapperboard, icon-sitemap-o, icon-flash-on-o, icon-piggy-bank-o, icon-graduation-cap-o, icon-paper-plane-o, icon-globe-o, icon-music-o, icon-detail, icon-beach-o, icon-paper, icon-home-o, icon-building, icon-database-o, icon-microscope-o, icon-hamburger-o, icon-trophy-o, icon-thumbs-o-up, icon-thumbs-o-down, icon-smile-o, icon-frown-o, icon-meh-o, icon-bullseye, icon-square-dotted-o
-
(Optional) Icon image for this record.
- name: string
-
(Optional) New display name for this record.
- id: string
-
(Optional) New ID for this record.
Example
{
"description": "**Great** record to start with.",
"archived": true,
"start": "2024-01-02",
"due": "2024-05-25",
"iconColor": "37",
"image": "icon-view-kanban",
"name": "Highlight 101",
"id": "Highlight101"
}
UpdateFieldBody: object
- resultType: string text, number, money, date, duration, checkbox
-
(Optional,
formulaonly) Expected result type. - formula: string
-
(Optional,
formulaonly) Formula expression. - conditionFormat: FieldConditionFormat
-
(Optional) Replacement conditional-format rules (replaces the entire list).
-
FieldConditionFormat - private: boolean
-
(Optional) Restrict access to non-guest members only.
- durationFormat: string hh:mm:ss, hh:mm, 1h1m, 1h, 1d1h, dd:hh:mm:ss, dd:hh:mm, dd:hh
-
(Optional,
duration/formulaonly) Duration display format. - withTime: boolean
-
(Optional,
dateonly) Include time-of-day in addition to the date. - lookup: object
-
(Optional,
lookuponly) Map from lookup key to numeric value. Keys are OIDs of the configuredlookupTypeentity. Replaces the entire map. - lookupType: string User, Task, Project, Organization
-
(Optional,
lookuponly) Source type for lookup keys. - hidden: boolean
-
(Optional) Hide this field from the task detail panel.
- ndecimal: integer -1, 0, 1, 2, 3
-
(Optional,
number/moneyonly) Number of decimal digits.-1means no rounding. - multiple: boolean
-
(Optional) Allow multiple values. Applies to
select,user,task, andfile(always true forfile). - clearOnDup: boolean
-
(Optional) Clear this field when duplicating a task.
- options: FieldOption
-
(Optional,
selectonly) Replacement option list (replaces the entire set). -
FieldOption - type: string text, number, money, date, duration, select, checkbox, user, task, hyperlink, email, formula, file, lookup
-
(Optional) Field type. Immutable on update — if supplied, must match the existing field's type. Usually omitted; include only to verify the stored type.
- percent: boolean
-
(Optional,
numberonly) Format the value as a percentage. - currency: string
-
(Optional,
money/formulaonly) Currency symbol. Pass$to reset a money field to its default.
Example
{
"resultType": "number",
"formula": "SUM(Subtask.Amount)",
"conditionFormat": [
{
"when": "today",
"op": ">=",
"color": "42",
"first": "100",
"second": "#/definitions/Number"
}
],
"private": false,
"durationFormat": "hh:mm",
"withTime": false,
"lookup": "object",
"lookupType": "User",
"hidden": false,
"ndecimal": 2,
"multiple": true,
"clearOnDup": false,
"options": [
{
"color": "13",
"name": "High"
}
],
"type": "number",
"percent": false,
"currency": "USD"
}
UpdateInsightBody: object
Request body for updating an insight view. Extends UpdateWorkBody with no additional fields; omitted fields preserve existing values.
- description: string
-
(Optional) New description for this record (Markdown supported).
- archived: boolean
-
(Optional) Archive toggle. Specify true to archive this record; specify false to unarchive.
- start: string
-
(Optional) Target start date for this record.
- due: string
-
(Optional) Target due date for this record.
- iconColor: string
-
(Optional) Icon color index from Quire's predefined palette. Two-digit code
[0-5][0-7]: first digit 0-5, second digit 0-7 (e.g.00,37,57). NOT a CSS hex color. - image: string icon-view-list, icon-view-kanban, icon-briefcase-o, icon-rocket-o, icon-bug-o, icon-leaf-o, icon-clapperboard, icon-sitemap-o, icon-flash-on-o, icon-piggy-bank-o, icon-graduation-cap-o, icon-paper-plane-o, icon-globe-o, icon-music-o, icon-detail, icon-beach-o, icon-paper, icon-home-o, icon-building, icon-database-o, icon-microscope-o, icon-hamburger-o, icon-trophy-o, icon-thumbs-o-up, icon-thumbs-o-down, icon-smile-o, icon-frown-o, icon-meh-o, icon-bullseye, icon-square-dotted-o
-
(Optional) Icon image for this record.
- name: string
-
(Optional) New display name for this record.
- id: string
-
(Optional) New ID for this record.
Example
{
"description": "**Great** record to start with.",
"archived": true,
"start": "2024-01-02",
"due": "2024-05-25",
"iconColor": "37",
"image": "icon-view-kanban",
"name": "Highlight 101",
"id": "Highlight101"
}
UpdateOrganizationBody: object
- description: string
-
(Optional) New description for this organization (Markdown supported).
- followers: string[]
-
(Optional) Followers to replace the current followers of this organization (user OIDs). This replaces all existing followers. To modify incrementally, use
addFollowersorremoveFollowers.Accepts the same special values as
addFollowers:"me"(the current user) and"app"/"app|team"/"app|team|channel"/"app|/path"(the application). -
string - addFollowers: string[]
-
(Optional) Followers to add to this organization (user OIDs). Special values:
- "me": the current user follows the organization
- "app": the application follows (receives notifications)
App follower syntax:
app|teamorapp|team|channelapp|/path→ appended to the hook URL when invoking the registered hook. Example: hookhttps://super.app/hooks/standard+ followerapp|/soc1/33456/a7→https://super.app/hooks/standard/soc1/33456/a7
-
string - removeFollowers: string[]
-
(Optional) Followers to remove from this organization (user OIDs). Accepts the same special values as
addFollowers:"me"(the current user) and"app"/"app|team"/"app|team|channel"/"app|/path"(the application). -
string - name: string
-
(Optional) New display name for this organization (Markdown supported).
Example
{
"description": "**Great** organization to start with.",
"followers": [
"string"
],
"addFollowers": [
"string"
],
"removeFollowers": [
"string"
],
"name": "My Organization"
}
UpdateProjectBody: object
- description: string
-
(Optional) New description for this project (Markdown supported).
- archived: boolean
-
(Optional) Archive toggle. Specify true to archive this project; specify false to unarchive.
- start: string
-
(Optional) Target start date for this project.
- due: string
-
(Optional) Target due date for this project.
- followers: string[]
-
(Optional) Followers to replace the current followers of this project (user OIDs). This replaces all existing followers. To modify incrementally, use
addFollowersorremoveFollowers.Accepts the same special values as
addFollowers:"me"(the current user) and"app"/"app|team"/"app|team|channel"/"app|/path"(the application). -
string - addFollowers: string[]
-
(Optional) Followers to add to this project (user OIDs). Special values:
- "me": the current user follows the project
- "app": the application follows (receives notifications)
App follower syntax:
app|teamorapp|team|channelapp|/path→ appended to the hook URL when invoking the registered hook. Example: hookhttps://super.app/hooks/standard+ followerapp|/soc1/33456/a7→https://super.app/hooks/standard/soc1/33456/a7
-
string - removeFollowers: string[]
-
(Optional) Followers to remove from this project (user OIDs). Accepts the same special values as
addFollowers:"me"(the current user) and"app"/"app|team"/"app|team|channel"/"app|/path"(the application). -
string - public: boolean
-
(Optional) Public toggle. Specify true to make this project public; specify false to make it private.
- name: string
-
(Optional) New display name for this project (Markdown supported).
Example
{
"description": "**Great** project to start with.",
"archived": true,
"start": "2024-01-02",
"due": "2024-05-25",
"followers": [
"tzufRLqCnud74dARyDSvjWDl",
"app"
],
"addFollowers": [
"sfsvLbDVPvi1QMf2GkDn7VSy"
],
"removeFollowers": [
"aBuz4MwfZ5CasOae6stnFa2f"
],
"public": true,
"name": "My Project"
}
UpdateStatusBody: object
- color: string
-
(Optional) Status color index from Quire’s predefined palette (two digits: first 0–5, second 0–7; e.g.,
35). - name: string
-
(Optional) New display name for the status.
- value: integer
-
(Optional) New numeric status value. Non-negative integer indicating progress. Must be unique within the context (e.g., project). Values ≥ 100 are treated as completed.
Example
{
"color": "35",
"name": "Later",
"value": 50
}
UpdateSublistBody: object
- changes: Change
-
(Optional) List of changes that add or remove tasks from this sublist. See
Changefor the operation schema. -
Change - description: string
-
(Optional) New description for this record (Markdown supported).
- archived: boolean
-
(Optional) Archive toggle. Specify true to archive this record; specify false to unarchive.
- start: string
-
(Optional) Target start date for this record.
- due: string
-
(Optional) Target due date for this record.
- iconColor: string
-
(Optional) Icon color index from Quire's predefined palette. Two-digit code
[0-5][0-7]: first digit 0-5, second digit 0-7 (e.g.00,37,57). NOT a CSS hex color. - image: string icon-view-list, icon-view-kanban, icon-briefcase-o, icon-rocket-o, icon-bug-o, icon-leaf-o, icon-clapperboard, icon-sitemap-o, icon-flash-on-o, icon-piggy-bank-o, icon-graduation-cap-o, icon-paper-plane-o, icon-globe-o, icon-music-o, icon-detail, icon-beach-o, icon-paper, icon-home-o, icon-building, icon-database-o, icon-microscope-o, icon-hamburger-o, icon-trophy-o, icon-thumbs-o-up, icon-thumbs-o-down, icon-smile-o, icon-frown-o, icon-meh-o, icon-bullseye, icon-square-dotted-o
-
(Optional) Icon image for this record.
- name: string
-
(Optional) New display name for this record.
- id: string
-
(Optional) New ID for this record.
Example
{
"changes": [
{
"exclude": false,
"single": false,
"task": "2MmYOpJH_ZLeehIjjytH1Rwr"
}
],
"description": "**Great** record to start with.",
"archived": true,
"start": "2024-01-02",
"due": "2024-05-25",
"iconColor": "37",
"image": "icon-view-kanban",
"name": "Highlight 101",
"id": "Highlight101"
}
UpdateTagBody: object
- color: string
-
(Optional) Tag color index from Quire's predefined palette. Two-digit code
[0-5][0-7]: first digit 0-5, second digit 0-7 (e.g.00,35,57). NOT a CSS hex color. - project: string
-
(Optional) Project OID that this tag is limited to. Used only when
globalis explicitly set to false; ignored otherwise. - name: string
-
(Optional) New display name for the tag.
- global: boolean
-
(Optional) Whether the tag is global (available across projects). If set to false, you must also provide
project.
Example
{
"color": "35",
"project": "Dyh2YkFcu9uLgLFIeN1kB4Ld",
"name": "Later",
"global": true
}
UpdateTaskBody: object
- description: string
-
(Optional) New task description.
- assignees: string[]
-
(Optional) Assignees to replace the current assignees (OID, ID, or email). This replaces all existing assignees. To modify incrementally, use
addAssigneesorremoveAssignees.Accepts the same special values as
addAssignees:"me"(the current user) and"inherit"(all assignees of the parent task). -
string - start: string
-
(Optional) Start date/time in UTC.
- With time:
yyyy-MM-dd'T'HH:mmZ(e.g.,2020-10-30T09:30Z). - Date only:
yyyy-MM-dd(e.g.,2020-10-30).
Notes:
- Seconds are not supported.
2020-10-30T00:00:00is treated as2020-10-30(date only).- To specify exactly midnight UTC, use
2020-10-30T00:00(no seconds).
- With time:
- due: string
-
(Optional) Due date/time in UTC.
- With time:
yyyy-MM-dd'T'HH:mmZ(e.g.,2020-10-30T09:30Z). - Date only:
yyyy-MM-dd(e.g.,2020-10-30).
Notes:
- Seconds are not supported.
2020-10-30T00:00:00is treated as2020-10-30(date only).- To specify exactly midnight UTC, use
2020-10-30T00:00(no seconds).
- With time:
- recurrence: Recurrence
-
(Optional) Recurrence details.
nullif the task is not recurring.freq:daily,weekly,monthly,yearly.interval: Interval between occurrences. Default: 1.until: End date. Default: never ends.bymonth: Month (1 = January). Supported only withyearly. Default: 1.byweekno: Week number (starting from 1) orlast. Supported withmonthly/yearly.byweekday: Day(s) of week (0 = Monday ... 6 = Sunday). For weekly, use a list (e.g.,[1],[0,3]).bydayno: Day of month (1 = first day). Supported withmonthly/yearly. Note:byweekdayandbydaynocannot both be specified.dupsubtasks: Duplicate subtasks when the task is completed. Default: true.sincelatest: Daily only. Repeat based on the last completion date. Default: false.
-
peekaboo:
- boolean
- integer
-
(Optional) Peekaboo setting. Accepts a boolean or a positive integer:
true: Hide indefinitely (task and subtasks).- positive integer: Number of days to hide.
false: Undo previous peekaboo.
Default: false.
- section: boolean
-
(Optional) Whether this task is a section. Default: false.
- milestone: boolean
-
(Optional) Whether this task is a milestone. Default: false.
- asUser: boolean
-
(Optional) If true, marks this update as performed by the app. Default: false (updated by the authorizing user).
- followers: string[]
-
(Optional) Followers to replace the current followers (OID, ID, or email).
Special values:
"me": the current user"inherit": include followers of the parent task"app": the application follows (receives notifications)
App follower syntax:
app|teamorapp|team|channelapp|/path→ appended to the hook URL (e.g.,.../standard/soc1/33456/a7).
-
string - successors: string[]
-
(Optional) Successors to replace the current successors (task OID or ID).
IDs can be specified as
#idorid. Integer IDs are also accepted. -
string - yourField: object
-
PLACEHOLDER — do NOT send a key literally named
yourField. Instead, use the custom field's own name (as defined via/project/add-field) as the JSON key, with a value matching the field's type:- Text / Email / Hyperlink: string.
- Number / Money: numeric value (no currency symbol).
- Checkbox:
trueorfalse. - Select: option name (string).
- Date: ISO 8601 timestamp (
yyyy-MM-dd'T'HH:mm:ssZ) or date-only (yyyy-MM-dd). - Duration: number of seconds.
- User: user OID, user ID, or email — server resolves to the user's OID.
-
Task: task OID, integer task ID, or
#<id>string — server resolves to the task's OID (scoped to this project). - Multi-value (fields configured with
multiple: true): provide a list. Passnullto clear the field.
Example body fragment:
{"Priority": 3, "Owners": ["alice", "[email protected]"], "Depends": ["#42"]}. - addTags: string[]
-
(Optional) Tags to add to this task (OID or name). Tag names are case-insensitive.
-
string - removeTags: string[]
-
(Optional) Tags to remove from this task (OID or name). Tag names are case-insensitive.
-
string - addAssignees: string[]
-
(Optional) Assignees to add (OID, ID, or email). Special values:
- "me": the current user
- "inherit": include all assignees of the parent task
-
string - removeAssignees: string[]
-
(Optional) Assignees to remove (OID, ID, or email).
Accepts the same special values as
addAssignees:"me"(the current user) and"inherit"(all assignees of the parent task). -
string - addFollowers: string[]
-
(Optional) Followers to add (OID, ID, or email). Special values:
- "me": the current user
- "inherit": include followers of the parent task
- "app": the application follows (receives notifications)
App follower syntax:
app|teamorapp|team|channelapp|/path→ appended to the hook URL (e.g.,.../standard/soc1/33456/a7).
-
string - removeFollowers: string[]
-
(Optional) Followers to remove (OID, ID, or email).
Special values:
"me": the current user"inherit": remove followers that were inherited from the parent task"app": the application
App follower syntax:
app|teamorapp|team|channelapp|/path→ appended to the hook URL.
-
string - addSuccessors: string[]
-
(Optional) Successors to add (task OID or ID).
IDs can be specified as
#idorid. Integer IDs are also accepted. -
string - removeSuccessors: string[]
-
(Optional) Successors to remove (task OID or ID).
IDs can be specified as
#idorid. Integer IDs are also accepted. -
string - tags: string[]
-
(Optional) Tags to replace the current tags on this task (OID or name). This replaces all existing tags. To modify incrementally, use
addTagsorremoveTags. Tag names are case-insensitive. -
string - name: string
-
(Optional) New task name.
- etc: integer
-
(Optional) Estimated time to complete, in seconds. Must be non-negative or
null. Specifynullto clear the value. - status: integer
-
(Optional) New status, between 0 and 100. Specify 100 to complete the task.
- priority: integer -1, 0, 1, 2
-
(Optional) New priority.
-1(lowest) through2(highest);0is Normal. (The server also accepts the case-insensitive English namesLow,Medium,High,Urgent, but the integer form is recommended for typed callers.) - sourceRef: object
-
(Optional) Arbitrary source reference data to store with the task. Available via API on retrieval.
If the map contains
text, its value will be displayed client-side and should be Markdown. Including a source link is recommended.
Example
{
"description": "This is a **cool** task.",
"assignees": [
"6QMKkEPBVWETLWrXqws94ALU"
],
"start": "2018-12-20T00:00:00.000Z",
"due": "2018-12-22T00:00:00.000Z",
"recurrence": {
"freq": "weekly",
"interval": 1,
"byweekday": "[1,3]",
"byweekno": 2,
"bydayno": 25,
"bymonth": 10,
"dupsubtasks": false,
"sincelatest": true,
"until": "2020-12-22"
},
"peekaboo": true,
"section": true,
"milestone": true,
"asUser": true,
"followers": [
"tzufRLqCnud74dARyDSvjWDl",
"app"
],
"successors": "[\"#13\"]",
"yourField": "object",
"addTags": [
"X6nmx9XjEO2wKbqeB1pRT43C"
],
"removeTags": [
"mPAQrYU1qt8wAYAInKRlTnvl"
],
"addAssignees": [
"6QMKkEPBVWETLWrXqws94ALU"
],
"removeAssignees": [
"Job4NSW9xK6Owcke8iKj7zyH"
],
"addFollowers": [
"sfsvLbDVPvi1QMf2GkDn7VSy"
],
"removeFollowers": [
"aBuz4MwfZ5CasOae6stnFa2f"
],
"addSuccessors": "[\"#13\"]",
"removeSuccessors": "[\"#13\"]",
"tags": [
"ITaVbkhh3iVcEcV3vuSLeE2k"
],
"name": "New idea",
"etc": 0,
"status": 100,
"priority": 0,
"sourceRef": "{\"text\": \"Source: [Gmail](https://gmail.com/link)\"}"
}
UpdateTimelogBody: object
- end: string
-
(Optional) New end timestamp (ISO 8601, UTC). Must be on or after the (new or existing) start. Sub-second precision is truncated to whole seconds. Omit or set
nullto preserve. - user: string
-
(Optional) New user the log is credited to (OID, ID, or email). Omit or set
nullto preserve. Send empty string to reset to the authenticated caller. - start: string
-
(Optional) New start timestamp (ISO 8601, UTC). Sub-second precision is truncated to whole seconds. Omit or set
nullto preserve. - billable: boolean
-
(Optional) New billable flag. Omit or set
nullto preserve. - note: string
-
(Optional) New note. Omit or set
nullto preserve. Send empty string to clear.
Example
{
"end": "2026-04-26T10:45:00Z",
"user": "[email protected]",
"start": "2026-04-26T09:15:00Z",
"billable": false,
"note": "Updated note"
}
User: object
- url: string
-
URL of this user on the Quire website.
- nameText: string
-
User name with Markdown removed.
- nameHtml: string
-
User name rendered as an HTML fragment converted from Markdown.
- name: string
-
Display name of the user (Markdown supported).
- id: string
-
User ID.
- timeZone: object
-
The time zone of the current user, or null if the user is not the current one.
- locale: string
-
The locale of the current user, or null if the user is not the current one.
- website: string
-
Website URL.
- email: string
-
Email address.
- description: string
-
Description (Markdown supported).
- descriptionText: string
-
Description with Markdown removed.
- descriptionHtml: string
-
Description rendered as an HTML fragment converted from Markdown.
- iconColor: string
-
Color index for the icon from Quire’s predefined palette. Two-digit code: first digit 0–5, second digit 0–7 (e.g.,
37). - image: string
-
Image URL representing this record.
- oid: string
-
Object identifier (OID), a UUID-like unique string.
Example
{
"url": "https://quire.io/u/john",
"nameText": "John",
"nameHtml": "John",
"name": "John",
"id": "john",
"timeZone": "`{'offset': 0, 'name': 'Europe/London'}`",
"locale": "en_GB",
"website": "https://coolwebsites.com",
"email": "[email protected]",
"description": "This is *cool*!",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"iconColor": "37",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}
Get all comments of a chat channel (by project ID and chat ID).
Returns all comments of the specified chat channel.
Project ID.
Chat channel ID.
OK — list of comments (may be empty).
Not Found — chat channel does not exist.
Response Content-Types: application/json
Response Example (200 OK)
[ { "oid": "iDsPd.QP_qM.hN.Trymukn8b", "description": "It is *cool*!", "descriptionText": "It is cool!", "descriptionHtml": "It is <i>cool</i>!", "attachments": [ { "type": 2, "url": "https://quire.io/att/Ta/sdcQOGgeUtyaFFzb9p0IwAgi/qfqVmUtC/image.png", "name": "file.txt", "length": 20000, "createdAt": "2018-12-22T02:06:58.158Z", "createdBy": { "url": "https://quire.io/u/my_id", "id": "my_id", "iconColor": "37", "image": "https://quire.s3.amazonaws.com/oid/image.jpg", "name": "Foo", "oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld" } } ], "pinAt": "2018-12-22T02:06:58.158Z", "pinBy": "#/definitions/SimpleIdentity", "editedBy": "#/definitions/SimpleIdentity", "url": "string", "editedAt": "2018-12-22T02:06:58.158Z", "owner": { "url": "https://quire.io/w/my_id", "type": "Project", "name": "Foo", "oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld" }, "createdAt": "2018-12-22T02:06:58.158Z", "createdBy": "#/definitions/SimpleIdentity" } ]