Properties
| Name | Type | Description |
|---|---|---|
| projectId | string | Identifier of the project. |
| contactId | string | Identifier of the contact this project was created for. |
| name | string | Name of the project. |
| currencyCode | string | |
| minutesLogged | integer | A total of minutes logged against all tasks on the Project. |
| totalTaskAmount | object | |
| totalExpenseAmount | object | |
| estimateAmount | object | |
| minutesToBeInvoiced | integer | Minutes which have not been invoiced across all chargeable tasks in the project. |
| taskAmountToBeInvoiced | object | |
| taskAmountInvoiced | object | |
| expenseAmountToBeInvoiced | object | |
| expenseAmountInvoiced | object | |
| projectAmountInvoiced | object | |
| deposit | object | |
| depositApplied | object | |
| creditNoteAmount | object | |
| deadlineUtc | string | Deadline for the project. UTC Date Time in ISO-8601 format. |
| totalInvoiced | object | |
| totalToBeInvoiced | object | |
| estimate | object | |
| status | string |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "#/components/schemas/Project",
"title": "Project",
"externalDocs": {
"url": "https://developer.xero.com/documentation/projects/projects"
},
"type": "object",
"properties": {
"projectId": {
"type": "string",
"format": "uuid",
"example": "254553fa-2be8-4991-bd5e-70a97ea12ef8",
"description": "Identifier of the project."
},
"contactId": {
"externalDocs": {
"url": "https://developer.xero.com/documentation/api/contacts"
},
"type": "string",
"format": "uuid",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"description": "Identifier of the contact this project was created for."
},
"name": {
"type": "string",
"example": "New Kitchen",
"description": "Name of the project."
},
"currencyCode": {
"$ref": "#/components/schemas/CurrencyCode",
"type": "string"
},
"minutesLogged": {
"type": "integer",
"example": 0,
"description": "A total of minutes logged against all tasks on the Project."
},
"totalTaskAmount": {
"$ref": "#/components/schemas/Amount"
},
"totalExpenseAmount": {
"$ref": "#/components/schemas/Amount"
},
"estimateAmount": {
"$ref": "#/components/schemas/Amount"
},
"minutesToBeInvoiced": {
"type": "integer",
"example": 0,
"description": "Minutes which have not been invoiced across all chargeable tasks in the project."
},
"taskAmountToBeInvoiced": {
"$ref": "#/components/schemas/Amount"
},
"taskAmountInvoiced": {
"$ref": "#/components/schemas/Amount"
},
"expenseAmountToBeInvoiced": {
"$ref": "#/components/schemas/Amount"
},
"expenseAmountInvoiced": {
"$ref": "#/components/schemas/Amount"
},
"projectAmountInvoiced": {
"$ref": "#/components/schemas/Amount"
},
"deposit": {
"$ref": "#/components/schemas/Amount"
},
"depositApplied": {
"$ref": "#/components/schemas/Amount"
},
"creditNoteAmount": {
"$ref": "#/components/schemas/Amount"
},
"deadlineUtc": {
"type": "string",
"format": "date-time",
"example": "2019-12-10T12:59:59Z",
"description": "Deadline for the project. UTC Date Time in ISO-8601 format."
},
"totalInvoiced": {
"$ref": "#/components/schemas/Amount"
},
"totalToBeInvoiced": {
"$ref": "#/components/schemas/Amount"
},
"estimate": {
"$ref": "#/components/schemas/Amount"
},
"status": {
"type": "string",
"$ref": "#/components/schemas/ProjectStatus"
}
},
"required": [
"name"
]
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/xero-project"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.