QuickBooks
Update a project
Changes a QuickBooks project's name, customer, status, dates, notes, addresses or custom fields. Only the fields you send change.
- Uses 1 run: 100 a day on Standard, 500 on Velocity, reset at midnight UTC.
- On Standard, 1 call every 30 seconds across the Projects endpoints.
- Also served at
/integrations/quickbooks/projects, for older integrations. - For assistants, the MCP tool update_quickbooks_project.
Request
curl -X PUT https://api.clickr.cloud/v2/integrations/quickbooks/projects \
-H "Authorization: Bearer $CLICKR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"projectId": "4821",
"status": "completed",
"endDate": "12/18/2026",
"statusCallbackUrl": "https://example.com/clickr/runs"
}'const response = await fetch(`https://api.clickr.cloud/v2/integrations/quickbooks/projects`, {
method: "PUT",
headers: {
Authorization: `Bearer ${process.env.CLICKR_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"projectId": "4821",
"status": "completed",
"endDate": "12/18/2026",
"statusCallbackUrl": "https://example.com/clickr/runs"
}),
});
const data = await response.json();import os
import requests
response = requests.put(
"https://api.clickr.cloud/v2/integrations/quickbooks/projects",
headers={"Authorization": f"Bearer {os.environ['CLICKR_API_KEY']}"},
json={
"projectId": "4821",
"status": "completed",
"endDate": "12/18/2026",
"statusCallbackUrl": "https://example.com/clickr/runs"
},
)
data = response.json()Response
{
"receipt": "6729c1f04b7e3d0012a91e07"
}Find the project by projectId, or on Velocity by its current name with projectNameIdentifier.
Body
JSON, with Content-Type: application/json.
projectIdstringQuickBooks' id for the project to update. Required unless you give projectNameIdentifier.
projectNameIdentifierstringThe project's current name, to find it by. Velocity only.
projectNamestringA new name for the project.
customerNamestringA different QuickBooks customer for the project.
projectCodestringThe Project ID field on the QuickBooks project form: your own reference, such as a job number. Not the projectId QuickBooks assigns. Ignored if the form has no Project ID field.
startDatestringStart date, as MM/DD/YYYY.
endDatestringEnd date, as MM/DD/YYYY.
statusstringThe project's status. Both spellings of cancelled are accepted.
One of not-started, in-progress, completed, canceled, cancelled
notesstringThe project's notes.
billingAddressobjectThe project's billing address.
countrystringRequiredCountry.
streetAddress1stringRequiredFirst line of the street address.
streetAddress2stringSecond line of the street address.
citystringRequiredCity.
statestringRequiredState or region.
zipCodestringRequiredZIP or postal code.
shippingAddressobjectThe project's shipping address.
countrystringRequiredCountry.
streetAddress1stringRequiredFirst line of the street address.
streetAddress2stringSecond line of the street address.
citystringRequiredCity.
statestringRequiredState or region.
zipCodestringRequiredZIP or postal code.
customFieldsarray of objectsCustom fields to fill on the project form.
labelstringRequiredThe custom field's name, as it appears on the project form.
valuestringRequiredThe value to set.
fieldTypestringRequiredWhether the field is free text or a dropdown in QuickBooks.
One of text, dropdown
statusCallbackUrlstringA URL Clickr POSTs the run's result to when it finishes, as JSON with your metaData. Sent once, with a 30-second timeout.
metaDataobjectAny JSON object of your own, such as your id for the job. Sent back with the result to statusCallbackUrl.
Response
200, as JSON, once the run is queued. What the run did comes from Get a run, or is POSTed to your statusCallbackUrl.
receiptstringThe id of the run this call started. Pass it to Get a run.
Errors
JSON with an error and, on most, a message saying what to change. All errors
| Status | Error | When |
|---|---|---|
| 500 | Failed to update project | The body has no projectId (or projectNameIdentifier), or a field is in the wrong format. The message says which. |
| 429 | Updating Projects through projectNameIdentifier is not available on your account plan… | projectNameIdentifier was sent on Standard. |
| 401 | No API Key provided | The Authorization header is missing. |
| 401 | No account found for api key provided | The key isn't recognised: mistyped, revoked, or held by someone who has left the account. |
| 401 | No integration found for account | The account has no connector connected yet. |
| 401 | This integration is still pending setup… | QuickBooks isn't fully set up in Clickr: its sign-in or two-factor setup is unfinished. The error says what to do. |
| 403 | Forbidden | Your access on the account doesn't include this action. |
| 403 | Daily cap exceeded | The account has used its runs for the day: 100 on Standard, 500 on Velocity. They reset at midnight UTC. |
| 403 | Rate limit exceeded | A second call within 30 seconds on Standard. Velocity has no wait. |