Step 1 of 3. Returns a pre-signed Amazon S3 URL that accepts exactly one file — the size and MIME type declared in this request — together with the generated storage file name needed in step 3. The URL expires 5 minutes after it is issued and should be treated as a secret.
Security
The requesting user must have all of the following permissions:
- Accounts Payable → AP Invoices → Edit AP Invoices
- Accounts Payable → AP Credit Memos → Edit AP Credit Memos
- Accounts Payable → AP Payments → Edit AP Payments
Attaching a file to an existing AP transaction takes three calls. Only the first and third are Restaurant365 endpoints; the second is a direct upload to Amazon S3 using a URL the first call returns.
Generate Upload URL — POST /public/v1/accounting/accounts-payable/attachments/upload-url
Upload File to S3 — upload the file from your device to the returned URL
Register Attachment — POST /public/v1/accounting/accounts-payable/attachments
Supported AP transaction types are invoices, credit memos and payments. The transaction must already exist; attaching a file is a separate operation from creating the transaction.
Identifies the R365 tenant the request applies to. Required on every request.
The original file name, including an extension that matches fileType — for example "receipt-scan.pdf" with fileType "application/pdf". The extensions .jpg, .jpeg and .jpe are interchangeable, as are .tif and .tiff.
The MIME content type of the file. The file you upload in step 2 must be of this type.
The exact size of the file in bytes. The file you upload in step 2 must be exactly this size. The default maximum is 26,214,400 bytes (25 MiB), configurable per organization.
A size-constrained pre-signed upload URL and generated storage file name were created successfully.
The pre-signed Amazon S3 URL to PUT the raw file bytes to. Expires 5 minutes after it is issued. Treat as a secret.
The generated storage file name. Pass this value as newFileName in step 3. It is derived from fileName — special characters are replaced with hyphens and a unique identifier is appended — so it will not match the name you sent.
The storage backend the file will be uploaded to. Currently always "S3".
Bad Request — a parameter value is malformed, of the wrong type, or outside its allowed range.
Unauthorized — the bearer token is missing, invalid or expired, or is not valid for the specified tenant.
Forbidden — the caller lacks the permission required for this operation.
Not Found — the requested resource does not exist, or the supplied continuation token is unknown or has expired.
Conflict — the request conflicts with the current state of the resource and cannot be applied.
Unprocessable Entity — a required parameter is missing, or a supplied parameter value is invalid.
Too Many Requests — the caller has exceeded the rate limit; retry after a short delay.
Internal Server Error — an unexpected error occurred while processing the request.