Invoice Comments
Comments let your team annotate an invoice with context — the source of an evidence document, a note explaining a manual adjustment, or a question for a teammate. Comments support tagging other users (@mentions, which trigger an in-app notification) and file attachments.
Only the comment’s author can edit or delete it.
Authentication
All endpoints require the standard headers:string
required
Your API key for authentication
string
required
Your organization UUID. The invoice must belong to a facility owned by this organization, or the request returns
404.Create a Comment
POST/v1/invoices/{invoice_id}/comments
uuid
required
UUID of the invoice to comment on
string
required
The comment text (1–10,000 characters)
uuid[]
IDs of users to tag. Invalid or non-existent user ids are silently dropped. Each valid mention receives an in-app notification.
cURL
List Comments
GET/v1/invoices/{invoice_id}/comments
Returns all comments for the invoice, oldest first.
Edit a Comment
PATCH/v1/invoices/comments/{comment_id}
Same body as create. Only the original author may edit; any other user gets 403. Only newly-added mentions (not already-mentioned users) receive a notification.
Delete a Comment
DELETE/v1/invoices/comments/{comment_id}
Author-only, 403 otherwise. Deleting a comment also deletes its mentions and attachments.
Response Object
string
UUID of the comment
string
UUID of the invoice
string
Comment text
string | null
UUID of the author
object | null
Author details
string[]
UUIDs of users mentioned in this comment
array
List of attachment objects (see below)
datetime
When the comment was created
datetime | null
When the comment was last edited
Attachments
Attaching a file to a comment is a two-step flow: request a presigned upload URL, upload the file directly to S3, then register the attachment.1. Request a Presigned Upload URL
POST/v1/invoices/comments/{comment_id}/attachments/presigned-url
string
required
Original file name with extension (no path separators)
string
MIME type of the file
{"upload_url": "...", "file_id": "...", "file_name": "..."}. upload_url is a short-lived (5 minute) presigned S3 PUT URL.
2. Upload the File
PUT the raw file bytes directly to upload_url, setting the Content-Type header to match what you sent in step 1 (the URL signature covers Content-Type).
3. Register the Attachment
POST/v1/invoices/comments/{comment_id}/attachments
string
required
Same file name as step 1
string
required
The
file_id returned in step 1. Must belong to this invoice’s own organization — a file_id issued for a different organization is rejected with 400.integer
File size in bytes, for display purposes
csv, xlsx, xls, pdf, jpg, jpeg, png, doc, docx, txt, json, xml. The attachment is also mirrored into your organization’s general Files listing.
Attachment Object
string
UUID of the attachment
string
UUID of the parent comment
string
Original file name
string
Public URL of the stored file
string
S3 key of the stored file
string | null
UUID of the user who uploaded it
datetime
When the attachment was registered
Common Errors
404 Not Found
Cause: The invoice (or comment) doesn’t exist, or doesn’t belong to your organization.403 Forbidden
Cause: Attempting to edit or delete a comment you didn’t author.400 Bad Request
Cause: Unsupported attachment file extension, orfile_id wasn’t issued for this organization.
Related Endpoints
Get Invoice
Get a single invoice by ID
List Invoices
Retrieve invoices with filtering and pagination