> ## 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. # AP Credit Memos > Updates one or more AP credit memos. Currently supports updating the approval status to Approved. Returns 207 for every processed request, whether all items succeeded, some succeeded, or none did. Check the status field of each entry in results[] rather than the HTTP status code. Failures are isolated — a failed item does not prevent the others from being applied. **Security** The requesting user must have the following permission to approve AP credit memos: - Accounts Payable → AP Credit Memos → Approve AP Credit Memos Approve and create are separate permissions — this permission does not grant create rights. ## OpenAPI ````json PATCH /public/v1/accounting/accounts-payable/credit-memos { "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/credit-memos": { "patch": { "tags": [ "accounting" ], "summary": "AP Credit Memos", "description": "Updates one or more AP credit memos. Currently supports updating the approval status to Approved.\n\nReturns 207 for every processed request, whether all items succeeded, some succeeded, or none did. Check the status field of each entry in results[] rather than the HTTP status code. Failures are isolated — a failed item does not prevent the others from being applied.\n\n**Security**\n\nThe requesting user must have the following permission to approve AP credit memos:\n\n- Accounts Payable → AP Credit Memos → Approve AP Credit Memos\n\nApprove and create are separate permissions — this permission does not grant create rights.", "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PatchCreditMemosRequest" } } } }, "responses": { "207": { "description": "Per-item outcomes. This endpoint returns 207 for every processed request — including when every item succeeded and when every item failed — so the HTTP status is not a success indicator. Inspect each entry in results[] and check its status field.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PatchCreditMemosResponse" } } } }, "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." }, "404": { "description": "Not Found — the requested resource does not exist, or the supplied continuation token is unknown or has expired." }, "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." } }, "parameters": [ { "$ref": "#/components/parameters/TenantId" } ] } } }, "components": { "schemas": { "PatchCreditMemosRequest": { "required": [ "creditMemos" ], "type": "object", "properties": { "creditMemos": { "minItems": 1, "type": "array", "items": { "$ref": "#/components/schemas/PatchCreditMemoItem" } } }, "additionalProperties": false }, "PatchCreditMemosResponse": { "type": "object", "description": "Per-item outcomes for the submitted batch.", "properties": { "results": { "type": "array", "items": { "$ref": "#/components/schemas/CreditMemoPatchResult" }, "description": "One entry per submitted credit memo, in request order." } }, "additionalProperties": false }, "PatchCreditMemoItem": { "required": [ "id", "approvalStatus" ], "type": "object", "properties": { "id": { "type": "string", "description": "Identifier of the credit memo to update.", "format": "uuid" }, "approvalStatus": { "enum": [ "Approved" ], "type": "string", "description": "The approval status to set on the credit memo." } }, "additionalProperties": false }, "CreditMemoPatchResult": { "type": "object", "description": "Outcome for one credit memo in the batch.", "properties": { "requestIndex": { "type": "integer", "format": "int32", "description": "Zero-based position of this item in the submitted creditMemos array." }, "creditMemoId": { "type": "string", "format": "uuid", "description": "Identifier of the credit memo this result refers to. Echoed back even when the id was not found." }, "status": { "type": "string", "enum": [ "Succeeded", "Failed" ], "description": "Outcome for this item." }, "errorCode": { "type": "string", "nullable": true, "description": "Machine-readable failure reason when status is Failed; null on success. Observed values: ENTITY_NOT_FOUND, APPROVE_FAILED, INVALID_FIELD_VALUE." }, "errorMessage": { "type": "string", "nullable": true, "description": "Human-readable failure reason when status is Failed; null on success." } }, "additionalProperties": false } }, "parameters": { "TenantId": { "name": "x-r365-context-tenant-id", "in": "header", "required": true, "description": "Identifies the R365 tenant the request applies to. Required on every request.", "schema": { "type": "string" } } }, "securitySchemes": { "Bearer": { "type": "http", "scheme": "Bearer" } } } } ````