# Xero Projects API API

> Xero Projects API API on Apizie: 16 endpoints (Retrieves all projects, Create one or more new projects, Retrieves a single project, Updates a specific project, …) returned as clean JSON through one API key. Send your own provider key in the x-upstream-key header. Call it over REST at https://www.apizie.tech/v1/finance:xero-projects/{endpoint} or from Claude, ChatGPT and Cursor through the Apizie MCP server. Free plan: 1,000 requests a month.

- Project key: `finance:xero-projects`
- Category: Finance
- Status: byok
- Source: https://developer.xero.com
- Page: https://www.apizie.tech/api/finance/xero-projects
- OpenAPI: https://www.apizie.tech/api/finance/xero-projects/openapi.json

This is the Xero Projects API

## Endpoints

### Retrieves all projects
`GET https://www.apizie.tech/v1/finance:xero-projects/get-projects` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| Xero-Tenant-Id | string | yes | Xero identifier for Tenant |
| projectIds | array | no | Search for all projects that match a comma separated list of projectIds |
| contactID | string | no | Filter for projects for a specific contact |
| states | string | no | Filter for projects in a particular state (INPROGRESS or CLOSED) |
| page | integer | no | set to 1 by default. The requested number of the page in paged response - Must be a number greater than 0. |
| pageSize | integer | no | Optional, it is set to 50 by default. The number of items to return per page in a paged response - Must be a number between 1 and 500. |

### Create one or more new projects
`POST https://www.apizie.tech/v1/finance:xero-projects/create-project` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| Xero-Tenant-Id | string | yes | Xero identifier for Tenant |
| Idempotency-Key | string | no | This allows you to safely retry requests without the risk of duplicate processing. 128 character max. |
| body | object | yes | JSON request body |

### Retrieves a single project
`GET https://www.apizie.tech/v1/finance:xero-projects/get-project` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| Xero-Tenant-Id | string | yes | Xero identifier for Tenant |
| projectId | string | yes | You can specify an individual project by appending the projectId to the endpoint |

### Updates a specific project
`POST https://www.apizie.tech/v1/finance:xero-projects/update-project` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| Xero-Tenant-Id | string | yes | Xero identifier for Tenant |
| Idempotency-Key | string | no | This allows you to safely retry requests without the risk of duplicate processing. 128 character max. |
| projectId | string | yes | You can specify an individual project by appending the projectId to the endpoint |
| body | object | yes | JSON request body |

### creates a project for the specified contact
`POST https://www.apizie.tech/v1/finance:xero-projects/patch-project` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| Xero-Tenant-Id | string | yes | Xero identifier for Tenant |
| Idempotency-Key | string | no | This allows you to safely retry requests without the risk of duplicate processing. 128 character max. |
| projectId | string | yes | You can specify an individual project by appending the projectId to the endpoint |
| body | object | yes | JSON request body |

### Retrieves a list of all project users
`GET https://www.apizie.tech/v1/finance:xero-projects/get-project-users` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| Xero-Tenant-Id | string | yes | Xero identifier for Tenant |
| page | integer | no | set to 1 by default. The requested number of the page in paged response - Must be a number greater than 0. |
| pageSize | integer | no | Optional, it is set to 50 by default. The number of items to return per page in a paged response - Must be a number between 1 and 500. |

### Retrieves all project tasks
`GET https://www.apizie.tech/v1/finance:xero-projects/get-tasks` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| Xero-Tenant-Id | string | yes | Xero identifier for Tenant |
| projectId | string | yes | You can specify an individual project by appending the projectId to the endpoint |
| page | integer | no | Set to 1 by default. The requested number of the page in paged response - Must be a number greater than 0. |
| pageSize | integer | no | Optional, it is set to 50 by default. The number of items to return per page in a paged response - Must be a number between 1 and 500. |
| taskIds | string | no | Search for all tasks that match a comma separated list of taskIds, i.e. GET https://.../tasks?taskIds={taskID},{taskID} |
| chargeType | string | no | Can be `TIME`, `FIXED` or `NON_CHARGEABLE`, defines how the task will be charged. Use `TIME` when you want to charge per hour and `FIXED`… |

### Allows you to create a task
`POST https://www.apizie.tech/v1/finance:xero-projects/create-task` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| Xero-Tenant-Id | string | yes | Xero identifier for Tenant |
| Idempotency-Key | string | no | This allows you to safely retry requests without the risk of duplicate processing. 128 character max. |
| projectId | string | yes | You can create a task on a specified projectId |
| body | object | yes | JSON request body |

### Retrieves a single project task
`GET https://www.apizie.tech/v1/finance:xero-projects/get-task` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| Xero-Tenant-Id | string | yes | Xero identifier for Tenant |
| projectId | string | yes | You can specify an individual project by appending the projectId to the endpoint |
| taskId | string | yes | You can specify an individual task by appending the taskId to the endpoint, i.e. GET https://.../tasks/{taskID} |

### Allows you to update a task
`POST https://www.apizie.tech/v1/finance:xero-projects/update-task` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| Xero-Tenant-Id | string | yes | Xero identifier for Tenant |
| Idempotency-Key | string | no | This allows you to safely retry requests without the risk of duplicate processing. 128 character max. |
| projectId | string | yes | You can specify an individual project by appending the projectId to the endpoint |
| taskId | string | yes | You can specify an individual task by appending the id to the endpoint |
| body | object | yes | JSON request body |

### Allows you to delete a task
`POST https://www.apizie.tech/v1/finance:xero-projects/delete-task` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| Xero-Tenant-Id | string | yes | Xero identifier for Tenant |
| projectId | string | yes | You can specify an individual project by appending the projectId to the endpoint |
| taskId | string | yes | You can specify an individual task by appending the id to the endpoint |

### Retrieves all time entries associated with a specific project
`GET https://www.apizie.tech/v1/finance:xero-projects/get-time-entries` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| Xero-Tenant-Id | string | yes | Xero identifier for Tenant |
| projectId | string | yes | Identifier of the project, that the task (which the time entry is logged against) belongs to. |
| userId | string | no | The xero user identifier of the person who logged time. |
| taskId | string | no | Identifier of the task that time entry is logged against. |
| invoiceId | string | no | Finds all time entries for this invoice. |
| contactId | string | no | Finds all time entries for this contact identifier. |
| page | integer | no | Set to 1 by default. The requested number of the page in paged response - Must be a number greater than 0. |
| pageSize | integer | no | Optional, it is set to 50 by default. The number of items to return per page in a paged response - Must be a number between 1 and 500. |
| states | array | no | Comma-separated list of states to find. Will find all time entries that are in the status of whatever is specified. |
| isChargeable | boolean | no | Finds all time entries which relate to tasks with the charge type `TIME` or `FIXED`. |
| dateAfterUtc | string | no | ISO 8601 UTC date. Finds all time entries on or after this date filtered on the `dateUtc` field. |
| dateBeforeUtc | string | no | ISO 8601 UTC date. Finds all time entries on or before this date filtered on the `dateUtc` field. |

### Creates a time entry for a specific project
`POST https://www.apizie.tech/v1/finance:xero-projects/create-time-entry` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| Xero-Tenant-Id | string | yes | Xero identifier for Tenant |
| Idempotency-Key | string | no | This allows you to safely retry requests without the risk of duplicate processing. 128 character max. |
| projectId | string | yes | You can specify an individual project by appending the projectId to the endpoint |
| body | object | yes | JSON request body |

### Retrieves a single time entry for a specific project
`GET https://www.apizie.tech/v1/finance:xero-projects/get-time-entry` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| Xero-Tenant-Id | string | yes | Xero identifier for Tenant |
| projectId | string | yes | You can specify an individual project by appending the projectId to the endpoint |
| timeEntryId | string | yes | You can specify an individual time entry by appending the id to the endpoint |

### Updates a time entry for a specific project
`POST https://www.apizie.tech/v1/finance:xero-projects/update-time-entry` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| Xero-Tenant-Id | string | yes | Xero identifier for Tenant |
| Idempotency-Key | string | no | This allows you to safely retry requests without the risk of duplicate processing. 128 character max. |
| projectId | string | yes | You can specify an individual project by appending the projectId to the endpoint |
| timeEntryId | string | yes | You can specify an individual time entry by appending the id to the endpoint |
| body | object | yes | JSON request body |

### Deletes a time entry for a specific project
`POST https://www.apizie.tech/v1/finance:xero-projects/delete-time-entry` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| Xero-Tenant-Id | string | yes | Xero identifier for Tenant |
| projectId | string | yes | You can specify an individual project by appending the projectId to the endpoint |
| timeEntryId | string | yes | You can specify an individual task by appending the id to the endpoint |

## Example
```
curl "https://www.apizie.tech/v1/finance:xero-projects/get-projects" \
  -H "x-api-key: $APIZIE_KEY" \
  -H "x-upstream-key: $PROVIDER_KEY"
```

## FAQ

### How do I call the Xero Projects API API?
Create a free Apizie key, then send GET https://www.apizie.tech/v1/finance:xero-projects/get-projects with the header x-api-key. Every endpoint returns { project, data, timestamp }.

### Is the Xero Projects API API free on Apizie?
Yes. The Free plan includes 1,000 requests a month at 100 requests a minute, no credit card. Xero Projects API itself also needs your own key from xero.

### Can AI agents use the Xero Projects API API?
Yes. Add the Apizie MCP server (https://www.apizie.tech/mcp) to Claude, ChatGPT, Cursor or VS Code, then ask in plain language. The agent calls run_scraper with project key finance:xero-projects.

### What is the status of the Xero Projects API API?
Needs your own provider key (bring your own key)
