> ## Documentation Index > Fetch the complete documentation index at: https://docs.restaurant365.com/llms.txt > Use this file to discover all available pages before exploring further. # Register Attachment > Step 3 of 3. Links a file already uploaded to Amazon S3 in step 2 to an existing AP transaction. Attachments must be enabled for the organization; if they are not, this endpoint returns 403. ## OpenAPI ````json POST /public/v1/accounting/accounts-payable/attachments { "openapi": "3.0.1", "info": { "title": "R365 Public API", "contact": { "name": "R365 Services Team", "email": "r365@restaurant365.com" }, "version": "1.0" }, "security": [ { "Bearer": [] } ], "paths": { "/public/v1/accounting/accounts-payable/attachments": { "post": { "tags": [ "accounting" ], "summary": "Register Attachment", "description": "Step 3 of 3. Links a file already uploaded to Amazon S3 in step 2 to an existing AP transaction.\n\nAttachments must be enabled for the organization; if they are not, this endpoint returns 403.", "parameters": [ { "$ref": "#/components/parameters/TenantId" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RegisterAttachmentRequest" } } } }, "responses": { "200": { "description": "The attachment was registered successfully.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RegisterAttachmentResponse" } } } }, "400": { "description": "Bad Request — a parameter value is malformed, of the wrong type, or outside its allowed range." }, "401": { "description": "Unauthorized — the bearer token is missing, invalid or expired, or is not valid for the specified tenant." }, "403": { "description": "Forbidden — the caller lacks the permission required for this operation, or attachments are not enabled for this organization." }, "404": { "description": "Not Found — no AP transaction exists with the specified formId, or it is not of the type given by formName." }, "409": { "description": "Conflict — the request conflicts with the current state of the resource and cannot be applied." }, "422": { "description": "Unprocessable Entity — a required parameter is missing, or a supplied parameter value is invalid." }, "429": { "description": "Too Many Requests — the caller has exceeded the rate limit; retry after a short delay." }, "500": { "description": "Internal Server Error — an unexpected error occurred while processing the request." } }, "x-d360-narrative-url": "
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.