# `order.return.approve` Approve a return — issues the instructions the shopper sees (snapshotted as evidence). - **scope**: `orders:write` - **storefront-visible** (bumps the catalog generation): no - **destructive**: no ## Payload | field | type | required | notes | |---|---|---|---| | `returnId` | string (/^ret_[a-zA-Z0-9]{1,32}$/) | yes | | | `instructions` | object | yes | | | ` address` | string (≤300 chars) | yes | | | ` carrierName` | string (≤60 chars) | no | | | ` costBearer` | "merchant" \| "consumer" | yes | | | ` costKurus` | integer (0..10000000000000) | no | | | ` note` | string (≤500 chars) | no | | ### JSON Schema ```json { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "returnId": { "type": "string", "pattern": "^ret_[a-zA-Z0-9]{1,32}$" }, "instructions": { "type": "object", "properties": { "address": { "type": "string", "minLength": 1, "maxLength": 300 }, "carrierName": { "type": "string", "minLength": 1, "maxLength": 60 }, "costBearer": { "type": "string", "enum": [ "merchant", "consumer" ] }, "costKurus": { "type": "integer", "minimum": 0, "maximum": 10000000000000 }, "note": { "type": "string", "minLength": 1, "maxLength": 500 } }, "required": [ "address", "costBearer" ], "additionalProperties": false } }, "required": [ "returnId", "instructions" ], "additionalProperties": false } ```