Bulk upsert projects
Header Parameters
Path Parameters
Company ID. Must be one of the IDs returned by GET /api/v2/companies/.
Body Parameters
Optional, for matching only. Unlike the other resources, an id that matches nothing in this company is a hard per-row error (unknown_id), falling through to softer lookups could overwrite an unrelated project.
Your own project number. Lookup step 2 and 3 of the matching ladder.
Reference in your system. Lookup step 1.5: matches an already-linked project, or links the project the later steps find. Never silently re-linked, see external_id_conflict.
Lookup step 4 of the matching ladder.
A active, C closed.
ACThe parent project's projectNumber, not an id. Empty or null clears the parent. An unknown number fails the row with parent_not_found.
The legal entity's name, not an id. Empty or null clears it. An unknown name fails the row with legal_entity_not_found.
Company address id. Must belong to this company and must not be deleted.
Company address id. Must belong to this company and must not be deleted.
Who approves for the project: SIMPLE project owner, MEDIUM owner and budget owner, EXTENDED owner, budget owner and the department heads involved, or USE_PURCHASE_REQUEST_WORKFLOWS to fall back to the normal request workflows.
USE_PURCHASE_REQUEST_WORKFLOWSSIMPLEMEDIUMEXTENDEDTotal budget as a decimal string.
User ids or emails. Each must be an active member of this company.
Show child attributes
User emails, not ids. Each must be an active member of this company; an unknown email fails the row with users_not_found.
Show child attributes
User emails, not ids. Each must be an active member of this company; an unknown email fails the row with users_not_found.
Show child attributes
Budget figures you may set on a project write. Every key is optional. amount is the total; sending it is the same as sending totalProjectBudget. usedBudget, pendingBudget and remainingBudget are normally computed by Hivebuy from purchase requests and invoices. Sending any of them overrides the computed value and skips Hivebuy's own recalculation for this write, so a system of record for consumption (an ERP) can push its figures. The override holds until the next purchase requ...
Show child attributes
Response
Always 200, even when rows failed: per-row results in upserted and errors, in row order.
Response Attributes
One entry per stored row, in row order: the row as you sent it, plus the record's id and the action taken.
Show child attributes
One entry per failed row. A failed row never fails the batch.
Show child attributes
The whole request was refused: the body is not a JSON array, or it has more than 50 rows. Plain {"error": …} body, this one predates the error envelope and existing clients parse it.
Response Attributes
Only on the over-limit refusal.
Only on the over-limit refusal.
Missing, invalid, or expired API key, or a session credential was used instead of an API key.
Response Attributes
validationErrorclientErrorserverError Show child attributes
Authenticated but not entitled: the key's user is not an active member of this company, the External API feature (or the resource's own feature) is not enabled for it, the key lacks the scope this verb needs, or a browser session was used.
Response Attributes
validationErrorclientErrorserverError Show child attributes
Rate limit exceeded (60 requests per minute per API key). Retry after the number of seconds given in the message.
Response Attributes
validationErrorclientErrorserverError