> For the complete documentation index, see [llms.txt](https://dev.skladon.com/main/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dev.skladon.com/main/integration/api/claims.md).

# Claims

You may find descriptions of endpoints for work with claims bellow.

## Filter claims (grid)

> Paged claim search. Body: \`#/definitions/V21GridRequestGeneric\`.\
> Use \*\*claim\*\* column names from that definition in \`columns\`, \`sorts\`, and \`filters\`.<br>

```json
{"openapi":"3.1.1","info":{"title":"GWMS API v2.1 (v21)","version":"2.1.0"},"tags":[{"name":"Claims","description":"Claims"}],"servers":[{"url":"https://gw.new.skladon.net/v21"}],"security":[{"authorization":[],"XApiKey":[]}],"components":{"securitySchemes":{"authorization":{"type":"apiKey","name":"authorization","in":"header"}},"parameters":{"HeaderXApiKey":{"schema":{"type":"string"},"name":"x-api-key","in":"header","required":true,"description":"Eshop API key from onboarding"},"HeaderAuthorization":{"schema":{"type":"string"},"name":"authorization","in":"header","required":true,"description":"Bearer JWT from POST /v21/users/login"}},"schemas":{"V21GenericGridResponse":{"type":"object","description":"Grid result envelope. `data.data` is an array of row objects (shape depends on requested `columns`).\n`data.request` echoes the grid request. `data.totalCount` is the total number of matching rows (for pagination).\n","required":["statusCode","message"],"properties":{"statusCode":{"type":"number"},"message":{"type":"string"},"data":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}},"request":{"type":"object"},"totalCount":{"type":"number"}}}}},"ErrorMessageResponse":{"type":"object","description":"Shape of every 4xx and 5xx response under `/v21`. See the \"Error response format\" section in the API description.","properties":{"statusCode":{"type":"number","description":"Repeats the HTTP status code of the response."},"error":{"type":"string","description":"Standard HTTP status text for `statusCode`."},"message":{"type":"string","description":"Human readable detail of what went wrong."}},"required":["statusCode","error","message"]},"V21GridRequestGeneric":{"type":"object","description":"Paged list / search body for all `POST …/filter` endpoints.\n\n**Top-level fields**\n- `page` (integer ≥ 1, default 1)\n- `items` (page size, 1–1000, default 10)\n- `columns` (string[]): which fields each row should include; **empty array = all columns** for that grid\n- `sorts`: array of `{ column, direction }`; `direction` is `ASC`, `DESC`, `asc`, or `desc`\n- `filters`: **OR of AND-groups**. Outer array = OR. Each inner array = AND of conditions. Each condition = `{ column, operator, value }`.\n\n**Filter operators** (unless noted for stock movements only)\n- `eq` / `neq` — equal / not equal\n- `gt` / `gte` / `lt` / `lte` — comparisons\n- `in` / `nin` — value must be an **array** of scalars in `value`\n- `like` / `nlike` — substring match / not match\n- `between` / `nbetween` — `value` must be an **array of two** endpoints\n- `null` / `notnull` — column IS NULL / IS NOT NULL\n- `empty` / `notempty` — null or empty string / neither\n- **Stock movements only** (this endpoint’s filters): `likein` is also allowed (same family as `like`).\n\n**`value` type**: string, number, boolean, array, or `null`, depending on `operator` (e.g. `in`/`nin`/`between` expect arrays as above).\n\n---\n\n**Columns that are filter only**: a few columns can be filtered and sorted on but are not part of\nthe response — orders `method` (internal delivery marker, always `DEL`), products\n`insertToProductId` (the response exposes the resolved `insertToProductSkus` and\n`insertToCountries` instead) and claims `note` (a Skladon-internal note that v2.1 no longer returns).\n\n**Sorting and `NULL` values**: sorting is delegated to MySQL `ORDER BY` without an explicit\n`NULLS FIRST` / `NULLS LAST` clause, so rows with `NULL` in the sorted column come **first** for\n`ASC` and **last** for `DESC`. Rows that compare equal have no guaranteed order between pages —\nwhen paging through a full export, always append a stable tiebreaker such as\n`{\"column\": \"id\", \"direction\": \"ASC\"}` as the last sort.\n\n---\n\n**Column names for `POST /products/filter`** (also use these in `sorts[].column` and filter `column`):\n`id`, `customField1`, `customField2`, `customField3`, `description`, `ean`, `eanLockedByDcix`, `expMethod`, `guid`, `hsCode`, `isbn`, `mpn`, `name`, `note`, `price`, `productType`, `rop`, `sku`, `upc`, `active`, `scanImeiSn`, `originCountry`, `snRegex`, `unitPrice`, `weight`, `width`, `height`, `length`, `insertToProductId`, `insertType`, `insertByOrderType`, `insertPriceFrom`, `insertPriceTo`, `expirationDays`, `createdAt`, `updatedAt`, `dimensionsChangedAt`, `deletedAt`, `quantityConversion`, `isDeleted`, `ageCheck`, `batteryType`, `sourceSys`.\n\n**Column names for `POST /orders/filter`**:\n`id`, `addressId`, `allowExpedition`, `billingAddressAdditionalInfo`, `billingAttentionName`, `billingCity`, `billingCompanyId`, `billingCompanyName`, `billingEmail`, `billingName`, `billingPhone`, `billingPostCode`, `billingProvinceCode`, `billingState`, `billingStreet`, `billingTaxId`, `codCurrency`, `codPrice`, `codRefNumber`, `currency`, `eshopOrderId`, `invoiceDate`, `requiredExpeditionDate`, `invoiceNumber`, `marketplace`, `message`, `method`, `note`, `orderType`, `paid`, `partnerOrderId`, `paymentMethod`, `price`, `printFiles`, `holdByQuality`, `pickFromCustomsWarehouse`, `underSanction`, `recipientAddressAdditionalInfo`, `recipientAttentionName`, `recipientCity`, `recipientCompanyId`, `recipientCompanyName`, `recipientEmail`, `recipientName`, `recipientPhone`, `recipientPostCode`, `recipientProvinceCode`, `recipientState`, `recipientStreet`, `recipientTaxId`, `shipper`, `shipperServiceCode`, `branchId`, `shippingPrice`, `status`, `timestamp`, `trackingNumbers`, `recipientGln`, `billingGln`, `deliveredAt`, `updatedAt`, `disableShippingReorder`, `waitingForPaymentAt`, `productsNotAvailableAt`, `suspendedAt`, `releaseFromSuspendedAt`, `incorrectAt`, `waitingForShipmentAt`, `shipmentOrderedAt`, `inProcessAt`, `packedAt`, `waitingForCarrierAt`, `shippedAt`, `atPickupPointAt`, `returningBackAt`, `returnedBackAt`, `preReceivedAt`, `parentOrderId`, `parentEshopOrderId`, `returnTrackingNumber`, `exchangeTrackingNumber`, `eshopNote`, `orderBoxCount`, `incorrectOrderMessage`, `canceledAt`, `slaDate`, `scannedAt`, `preorderReleaseAt`, `printReturnLabel`, `sourceSys`, `weight`.\n\n**Column names for `POST /receivings/filter`**:\n`id`, `asn`, `createdAt`, `slaDate`, `quantity`, `received`, `diffQuantity`, `driverCompanyOtherName`, `canceledAt`, `confirmedAt`, `unloadedAt`, `receivedAt`, `eshopReceivingId`, `deliveryNoteNumber`, `deliveryType`, `description`, `driverCompany`, `driverDispatcherContact`, `driverName`, `driverPhone`, `driverTrailerLicensePlate`, `duty`, `estimatedDelivery`, `status`, `supplier`, `trackingNumber`, `unitsAmount`, `urgent`, `eshopNote`, `asnLabelEmail`, `priority`, `containerNumber`, `announcedPalletsCount`, `receivingType`, `realDelivery`, `slaSuspended`, `photoDocumentationTaken`, `deliveredPalletsCount`, `deliveredCartonsCount`, `incoterms`, `returnedEurPalletsCount`, `deliveredStandardPalletsCount`, `returnedStandardPalletsCount`, `deliveredOtherPalletsCount`, `deliveredBrokenPalletsCount`, `skladonNote`.\n\n**Column names for `POST /returns/filter`**:\n`id`, `description`, `eshopReturnId`, `eshopOrderId`, `note`, `orderType`, `shipper`, `shipperServiceCode`, `status`, `trackingNumber`, `rma`, `createdAt`, `eshopNote`, `canceledAt`, `confirmedAt`, `receivedAt`, `sourceSys`, `transportPaidBy`, `orderId`, `partnerOrderId`, `recipientName`, `senderStreet`, `senderCity`, `senderState`, `senderPostcode`, `senderPhone`, `orderShipper`, `orderShipperServiceCode`, `orderTrackingNumber`.\n\n**Column names for `POST /claims/filter`**:\n`id`, `fcn`, `eshopClaimId`, `eshopOrderId`, `orderId`, `orderType`, `shipper`, `trackingNumber`, `returnTrackingNumber`, `cctv`, `description`, `note`, `claimCause`, `causeOtherType`, `status`, `createdAt`, `closedAt`, `inProcessAt`, `moreInfoNeededAt`, `informationAddedAt`, `rejectedAt`, `canceledAt`, `acceptedExpectCompensationAt`, `acceptedPendingClientCompensationAt`, `resolutionText`, `resolver`, `transportPrice`, `goodsPrice`, `totalServicePrice`, `compensationCurrency`, `eshopNote`.\n\n**Column names for `POST /stock-movements/filter`**:\n`count`, `createdAt`, `updatedAt`, `expirationDate`, `id`, `lot`, `sku`, `type`.\n","properties":{"page":{"type":"integer","minimum":1,"default":1},"items":{"type":"integer","minimum":1,"maximum":1000,"default":10},"columns":{"type":"array","items":{"type":"string"}},"sorts":{"type":"array","items":{"type":"object","required":["column","direction"],"properties":{"column":{"type":"string"},"direction":{"type":"string","enum":["ASC","DESC","asc","desc"]}}}},"filters":{"type":"array","description":"Outer array = OR of groups. Each inner array = AND of `{ column, operator, value }`.\nOperators and allowed `column` values are documented on `V21GridRequestGeneric`.\n","items":{"type":"array","items":{"type":"object","required":["column","operator","value"],"properties":{"column":{"type":"string"},"operator":{"type":"string","description":"Filter operator; see `V21GridRequestGeneric` for the full list.\nStock-movement filters also support `likein`.\n"},"value":{"description":"Scalar, array, or null — depends on operator (e.g. `in`/`nin`/`between` use arrays)."}}}}}}}}},"paths":{"/claims/filter":{"post":{"tags":["Claims"],"summary":"Filter claims (grid)","description":"Paged claim search. Body: `#/definitions/V21GridRequestGeneric`.\nUse **claim** column names from that definition in `columns`, `sorts`, and `filters`.\n","operationId":"v21_postClaimsFilter","parameters":[{"$ref":"#/components/parameters/HeaderXApiKey"},{"$ref":"#/components/parameters/HeaderAuthorization"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/V21GenericGridResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V21GridRequestGeneric"}}},"required":true}}}}}
```

## POST /claims

> Create claim

```json
{"openapi":"3.1.1","info":{"title":"GWMS API v2.1 (v21)","version":"2.1.0"},"tags":[{"name":"Claims","description":"Claims"}],"servers":[{"url":"https://gw.new.skladon.net/v21"}],"security":[{"authorization":[],"XApiKey":[]}],"components":{"securitySchemes":{"authorization":{"type":"apiKey","name":"authorization","in":"header"}},"parameters":{"HeaderXApiKey":{"schema":{"type":"string"},"name":"x-api-key","in":"header","required":true,"description":"Eshop API key from onboarding"},"HeaderAuthorization":{"schema":{"type":"string"},"name":"authorization","in":"header","required":true,"description":"Bearer JWT from POST /v21/users/login"}},"schemas":{"V21ClaimResponseEnvelope":{"type":"object","required":["statusCode","message"],"properties":{"statusCode":{"type":"number"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/V21ClaimResponse"}}},"V21ClaimResponse":{"allOf":[{"$ref":"#/components/schemas/V21ClaimWritableFields"},{"type":"object","required":["eshopClaimId"],"properties":{"eshopClaimId":{"type":"string"},"eshopOrderId":{"type":"string"},"status":{"type":"string","description":"Current claim status.","enum":["received","inProcess","accepted","rejected","storno","acceptedWaitingForCompensationFromShipper","moreInfoNeeded","informationAdded","acceptedPendingClientCompensation"]},"createdAt":{"type":"string"},"closedAt":{"type":"string"},"resolutionText":{"type":"string"},"resolver":{"type":"string"},"transportPrice":{"type":"number","format":"double","description":"Money value. Decimal number with two decimal places."},"goodsPrice":{"type":"number","format":"double","description":"Money value. Decimal number with two decimal places."},"totalServicePrice":{"type":"number","format":"double","description":"Money value. Decimal number with two decimal places."},"compensationCurrency":{"type":"string"},"id":{"type":"integer","description":"Internal identifier of the claim."},"fcn":{"type":"string","description":"Skladon claim number assigned when the claim is created."},"causeOtherType":{"type":"string","description":"Free-text cause used when `claimCause` is `others`. Read only — the write payload uses `claimCauseOthersType` for the same value."},"cctv":{"type":"boolean","description":"Whether camera footage of the packing process was requested for this claim."},"inProcessAt":{"type":"string"},"moreInfoNeededAt":{"type":"string"},"informationAddedAt":{"type":"string"},"rejectedAt":{"type":"string"},"canceledAt":{"type":"string"},"acceptedExpectCompensationAt":{"type":"string"},"acceptedPendingClientCompensationAt":{"type":"string"},"orderId":{"type":"integer","description":"Internal identifier of the claimed order. Only returned by `POST /claims/filter`."},"orderType":{"type":"string","description":"Order type of the claimed order. Only returned by `POST /claims/filter`."},"shipper":{"type":"string","description":"Carrier of the claimed order. Only returned by `POST /claims/filter`."},"trackingNumber":{"type":"string","description":"Tracking number of the claimed order. Only returned by `POST /claims/filter`."},"returnTrackingNumber":{"type":"string","description":"Return tracking number of the claimed order. Only returned by `POST /claims/filter`."}}}]},"V21ClaimWritableFields":{"type":"object","description":"Shape of the writable claim fields without the create/update requirements. Responses reuse it because a partial response (for example the 409 conflict body) does not repeat every field.","properties":{"description":{"type":"string","description":"What the claim is about. Required when creating or updating a claim."},"eshopNote":{"type":"string","description":"E-shop note; writable on POST/PUT/PATCH and always returned."},"claimCause":{"type":"string","minLength":1,"description":"Cause of the claim. Required when creating or updating a claim; use `causeOtherType` to describe the cause when it is `others`."},"causeOtherType":{"type":"string","description":"Required in practice when claimCause is others."},"files":{"type":"array","description":"Photos and documents attached to the claim.","items":{"$ref":"#/components/schemas/V21ClaimFile"}},"products":{"type":"array","description":"Claimed order lines.","items":{"$ref":"#/components/schemas/V21ClaimProduct"}}}},"V21ClaimFile":{"type":"object","required":["fileName","type","fileType"],"properties":{"id":{"type":"integer"},"data":{"type":"string"},"fileName":{"type":"string"},"type":{"type":"string"},"fileType":{"type":"string"},"fileSize":{"type":"string"},"createdAt":{"type":"string","format":"date-time","description":"Upload timestamp from files.CREATED_AT"},"creatorRole":{"type":"string","enum":["skladon_employee","client"],"description":"Who uploaded the file (Skladon employee or client)"}}},"V21ClaimProduct":{"type":"object","required":["sku","claimedQuantity"],"properties":{"sku":{"type":"string","minLength":1},"claimedQuantity":{"type":"integer","minimum":1},"resendQuantity":{"type":"number","readOnly":true,"description":"Quantity Skladon resends to the customer as the resolution of the claim. Null until the claim is resolved that way. Read only - ignored on write."},"lineState":{"type":"string"}}},"ErrorMessageResponse":{"type":"object","description":"Shape of every 4xx and 5xx response under `/v21`. See the \"Error response format\" section in the API description.","properties":{"statusCode":{"type":"number","description":"Repeats the HTTP status code of the response."},"error":{"type":"string","description":"Standard HTTP status text for `statusCode`."},"message":{"type":"string","description":"Human readable detail of what went wrong."}},"required":["statusCode","error","message"]},"V21ClaimCreate":{"allOf":[{"$ref":"#/components/schemas/V21ClaimWritableBody"},{"type":"object","required":["eshopClaimId","eshopOrderId"],"properties":{"eshopClaimId":{"type":"string","minLength":1},"eshopOrderId":{"type":"string","minLength":1}}}]},"V21ClaimWritableBody":{"allOf":[{"$ref":"#/components/schemas/V21ClaimWritableFields"},{"type":"object","required":["description","claimCause"]}]}}},"paths":{"/claims":{"post":{"tags":["Claims"],"summary":"Create claim","operationId":"v21_postClaims","parameters":[{"$ref":"#/components/parameters/HeaderXApiKey"},{"$ref":"#/components/parameters/HeaderAuthorization"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/V21ClaimResponseEnvelope"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V21ClaimCreate"}}},"required":true}}}}}
```

## GET /claims/{eshopClaimId}

> Get claim detail

```json
{"openapi":"3.1.1","info":{"title":"GWMS API v2.1 (v21)","version":"2.1.0"},"tags":[{"name":"Claims","description":"Claims"}],"servers":[{"url":"https://gw.new.skladon.net/v21"}],"security":[{"authorization":[],"XApiKey":[]}],"components":{"securitySchemes":{"authorization":{"type":"apiKey","name":"authorization","in":"header"}},"schemas":{"V21ClaimResponseEnvelope":{"type":"object","required":["statusCode","message"],"properties":{"statusCode":{"type":"number"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/V21ClaimResponse"}}},"V21ClaimResponse":{"allOf":[{"$ref":"#/components/schemas/V21ClaimWritableFields"},{"type":"object","required":["eshopClaimId"],"properties":{"eshopClaimId":{"type":"string"},"eshopOrderId":{"type":"string"},"status":{"type":"string","description":"Current claim status.","enum":["received","inProcess","accepted","rejected","storno","acceptedWaitingForCompensationFromShipper","moreInfoNeeded","informationAdded","acceptedPendingClientCompensation"]},"createdAt":{"type":"string"},"closedAt":{"type":"string"},"resolutionText":{"type":"string"},"resolver":{"type":"string"},"transportPrice":{"type":"number","format":"double","description":"Money value. Decimal number with two decimal places."},"goodsPrice":{"type":"number","format":"double","description":"Money value. Decimal number with two decimal places."},"totalServicePrice":{"type":"number","format":"double","description":"Money value. Decimal number with two decimal places."},"compensationCurrency":{"type":"string"},"id":{"type":"integer","description":"Internal identifier of the claim."},"fcn":{"type":"string","description":"Skladon claim number assigned when the claim is created."},"causeOtherType":{"type":"string","description":"Free-text cause used when `claimCause` is `others`. Read only — the write payload uses `claimCauseOthersType` for the same value."},"cctv":{"type":"boolean","description":"Whether camera footage of the packing process was requested for this claim."},"inProcessAt":{"type":"string"},"moreInfoNeededAt":{"type":"string"},"informationAddedAt":{"type":"string"},"rejectedAt":{"type":"string"},"canceledAt":{"type":"string"},"acceptedExpectCompensationAt":{"type":"string"},"acceptedPendingClientCompensationAt":{"type":"string"},"orderId":{"type":"integer","description":"Internal identifier of the claimed order. Only returned by `POST /claims/filter`."},"orderType":{"type":"string","description":"Order type of the claimed order. Only returned by `POST /claims/filter`."},"shipper":{"type":"string","description":"Carrier of the claimed order. Only returned by `POST /claims/filter`."},"trackingNumber":{"type":"string","description":"Tracking number of the claimed order. Only returned by `POST /claims/filter`."},"returnTrackingNumber":{"type":"string","description":"Return tracking number of the claimed order. Only returned by `POST /claims/filter`."}}}]},"V21ClaimWritableFields":{"type":"object","description":"Shape of the writable claim fields without the create/update requirements. Responses reuse it because a partial response (for example the 409 conflict body) does not repeat every field.","properties":{"description":{"type":"string","description":"What the claim is about. Required when creating or updating a claim."},"eshopNote":{"type":"string","description":"E-shop note; writable on POST/PUT/PATCH and always returned."},"claimCause":{"type":"string","minLength":1,"description":"Cause of the claim. Required when creating or updating a claim; use `causeOtherType` to describe the cause when it is `others`."},"causeOtherType":{"type":"string","description":"Required in practice when claimCause is others."},"files":{"type":"array","description":"Photos and documents attached to the claim.","items":{"$ref":"#/components/schemas/V21ClaimFile"}},"products":{"type":"array","description":"Claimed order lines.","items":{"$ref":"#/components/schemas/V21ClaimProduct"}}}},"V21ClaimFile":{"type":"object","required":["fileName","type","fileType"],"properties":{"id":{"type":"integer"},"data":{"type":"string"},"fileName":{"type":"string"},"type":{"type":"string"},"fileType":{"type":"string"},"fileSize":{"type":"string"},"createdAt":{"type":"string","format":"date-time","description":"Upload timestamp from files.CREATED_AT"},"creatorRole":{"type":"string","enum":["skladon_employee","client"],"description":"Who uploaded the file (Skladon employee or client)"}}},"V21ClaimProduct":{"type":"object","required":["sku","claimedQuantity"],"properties":{"sku":{"type":"string","minLength":1},"claimedQuantity":{"type":"integer","minimum":1},"resendQuantity":{"type":"number","readOnly":true,"description":"Quantity Skladon resends to the customer as the resolution of the claim. Null until the claim is resolved that way. Read only - ignored on write."},"lineState":{"type":"string"}}},"ErrorMessageResponse":{"type":"object","description":"Shape of every 4xx and 5xx response under `/v21`. See the \"Error response format\" section in the API description.","properties":{"statusCode":{"type":"number","description":"Repeats the HTTP status code of the response."},"error":{"type":"string","description":"Standard HTTP status text for `statusCode`."},"message":{"type":"string","description":"Human readable detail of what went wrong."}},"required":["statusCode","error","message"]}}},"paths":{"/claims/{eshopClaimId}":{"get":{"tags":["Claims"],"summary":"Get claim detail","operationId":"v21_getClaim","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/V21ClaimResponseEnvelope"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageResponse"}}}}}}}}}
```

## Update claim

> Body \*\*must not\*\* include \`eshopClaimId\` or \`eshopOrderId\`.

```json
{"openapi":"3.1.1","info":{"title":"GWMS API v2.1 (v21)","version":"2.1.0"},"tags":[{"name":"Claims","description":"Claims"}],"servers":[{"url":"https://gw.new.skladon.net/v21"}],"security":[{"authorization":[],"XApiKey":[]}],"components":{"securitySchemes":{"authorization":{"type":"apiKey","name":"authorization","in":"header"}},"schemas":{"V21ClaimResponseEnvelope":{"type":"object","required":["statusCode","message"],"properties":{"statusCode":{"type":"number"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/V21ClaimResponse"}}},"V21ClaimResponse":{"allOf":[{"$ref":"#/components/schemas/V21ClaimWritableFields"},{"type":"object","required":["eshopClaimId"],"properties":{"eshopClaimId":{"type":"string"},"eshopOrderId":{"type":"string"},"status":{"type":"string","description":"Current claim status.","enum":["received","inProcess","accepted","rejected","storno","acceptedWaitingForCompensationFromShipper","moreInfoNeeded","informationAdded","acceptedPendingClientCompensation"]},"createdAt":{"type":"string"},"closedAt":{"type":"string"},"resolutionText":{"type":"string"},"resolver":{"type":"string"},"transportPrice":{"type":"number","format":"double","description":"Money value. Decimal number with two decimal places."},"goodsPrice":{"type":"number","format":"double","description":"Money value. Decimal number with two decimal places."},"totalServicePrice":{"type":"number","format":"double","description":"Money value. Decimal number with two decimal places."},"compensationCurrency":{"type":"string"},"id":{"type":"integer","description":"Internal identifier of the claim."},"fcn":{"type":"string","description":"Skladon claim number assigned when the claim is created."},"causeOtherType":{"type":"string","description":"Free-text cause used when `claimCause` is `others`. Read only — the write payload uses `claimCauseOthersType` for the same value."},"cctv":{"type":"boolean","description":"Whether camera footage of the packing process was requested for this claim."},"inProcessAt":{"type":"string"},"moreInfoNeededAt":{"type":"string"},"informationAddedAt":{"type":"string"},"rejectedAt":{"type":"string"},"canceledAt":{"type":"string"},"acceptedExpectCompensationAt":{"type":"string"},"acceptedPendingClientCompensationAt":{"type":"string"},"orderId":{"type":"integer","description":"Internal identifier of the claimed order. Only returned by `POST /claims/filter`."},"orderType":{"type":"string","description":"Order type of the claimed order. Only returned by `POST /claims/filter`."},"shipper":{"type":"string","description":"Carrier of the claimed order. Only returned by `POST /claims/filter`."},"trackingNumber":{"type":"string","description":"Tracking number of the claimed order. Only returned by `POST /claims/filter`."},"returnTrackingNumber":{"type":"string","description":"Return tracking number of the claimed order. Only returned by `POST /claims/filter`."}}}]},"V21ClaimWritableFields":{"type":"object","description":"Shape of the writable claim fields without the create/update requirements. Responses reuse it because a partial response (for example the 409 conflict body) does not repeat every field.","properties":{"description":{"type":"string","description":"What the claim is about. Required when creating or updating a claim."},"eshopNote":{"type":"string","description":"E-shop note; writable on POST/PUT/PATCH and always returned."},"claimCause":{"type":"string","minLength":1,"description":"Cause of the claim. Required when creating or updating a claim; use `causeOtherType` to describe the cause when it is `others`."},"causeOtherType":{"type":"string","description":"Required in practice when claimCause is others."},"files":{"type":"array","description":"Photos and documents attached to the claim.","items":{"$ref":"#/components/schemas/V21ClaimFile"}},"products":{"type":"array","description":"Claimed order lines.","items":{"$ref":"#/components/schemas/V21ClaimProduct"}}}},"V21ClaimFile":{"type":"object","required":["fileName","type","fileType"],"properties":{"id":{"type":"integer"},"data":{"type":"string"},"fileName":{"type":"string"},"type":{"type":"string"},"fileType":{"type":"string"},"fileSize":{"type":"string"},"createdAt":{"type":"string","format":"date-time","description":"Upload timestamp from files.CREATED_AT"},"creatorRole":{"type":"string","enum":["skladon_employee","client"],"description":"Who uploaded the file (Skladon employee or client)"}}},"V21ClaimProduct":{"type":"object","required":["sku","claimedQuantity"],"properties":{"sku":{"type":"string","minLength":1},"claimedQuantity":{"type":"integer","minimum":1},"resendQuantity":{"type":"number","readOnly":true,"description":"Quantity Skladon resends to the customer as the resolution of the claim. Null until the claim is resolved that way. Read only - ignored on write."},"lineState":{"type":"string"}}},"ErrorMessageResponse":{"type":"object","description":"Shape of every 4xx and 5xx response under `/v21`. See the \"Error response format\" section in the API description.","properties":{"statusCode":{"type":"number","description":"Repeats the HTTP status code of the response."},"error":{"type":"string","description":"Standard HTTP status text for `statusCode`."},"message":{"type":"string","description":"Human readable detail of what went wrong."}},"required":["statusCode","error","message"]},"V21ClaimUpdate":{"$ref":"#/components/schemas/V21ClaimWritableBody","description":"Same writable fields as create **without** `eshopOrderId` or `eshopClaimId`. Runtime Zod strict validation – no extra keys (including `note`).\n"},"V21ClaimWritableBody":{"allOf":[{"$ref":"#/components/schemas/V21ClaimWritableFields"},{"type":"object","required":["description","claimCause"]}]}}},"paths":{"/claims/{eshopClaimId}":{"put":{"tags":["Claims"],"summary":"Update claim","description":"Body **must not** include `eshopClaimId` or `eshopOrderId`.","operationId":"v21_putClaim","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/V21ClaimResponseEnvelope"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V21ClaimUpdate"}}},"required":true}}}}}
```

## PATCH /claims/{eshopClaimId}

> Partial update claim

```json
{"openapi":"3.1.1","info":{"title":"GWMS API v2.1 (v21)","version":"2.1.0"},"tags":[{"name":"Claims","description":"Claims"}],"servers":[{"url":"https://gw.new.skladon.net/v21"}],"security":[{"authorization":[],"XApiKey":[]}],"components":{"securitySchemes":{"authorization":{"type":"apiKey","name":"authorization","in":"header"}},"schemas":{"V21ClaimResponseEnvelope":{"type":"object","required":["statusCode","message"],"properties":{"statusCode":{"type":"number"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/V21ClaimResponse"}}},"V21ClaimResponse":{"allOf":[{"$ref":"#/components/schemas/V21ClaimWritableFields"},{"type":"object","required":["eshopClaimId"],"properties":{"eshopClaimId":{"type":"string"},"eshopOrderId":{"type":"string"},"status":{"type":"string","description":"Current claim status.","enum":["received","inProcess","accepted","rejected","storno","acceptedWaitingForCompensationFromShipper","moreInfoNeeded","informationAdded","acceptedPendingClientCompensation"]},"createdAt":{"type":"string"},"closedAt":{"type":"string"},"resolutionText":{"type":"string"},"resolver":{"type":"string"},"transportPrice":{"type":"number","format":"double","description":"Money value. Decimal number with two decimal places."},"goodsPrice":{"type":"number","format":"double","description":"Money value. Decimal number with two decimal places."},"totalServicePrice":{"type":"number","format":"double","description":"Money value. Decimal number with two decimal places."},"compensationCurrency":{"type":"string"},"id":{"type":"integer","description":"Internal identifier of the claim."},"fcn":{"type":"string","description":"Skladon claim number assigned when the claim is created."},"causeOtherType":{"type":"string","description":"Free-text cause used when `claimCause` is `others`. Read only — the write payload uses `claimCauseOthersType` for the same value."},"cctv":{"type":"boolean","description":"Whether camera footage of the packing process was requested for this claim."},"inProcessAt":{"type":"string"},"moreInfoNeededAt":{"type":"string"},"informationAddedAt":{"type":"string"},"rejectedAt":{"type":"string"},"canceledAt":{"type":"string"},"acceptedExpectCompensationAt":{"type":"string"},"acceptedPendingClientCompensationAt":{"type":"string"},"orderId":{"type":"integer","description":"Internal identifier of the claimed order. Only returned by `POST /claims/filter`."},"orderType":{"type":"string","description":"Order type of the claimed order. Only returned by `POST /claims/filter`."},"shipper":{"type":"string","description":"Carrier of the claimed order. Only returned by `POST /claims/filter`."},"trackingNumber":{"type":"string","description":"Tracking number of the claimed order. Only returned by `POST /claims/filter`."},"returnTrackingNumber":{"type":"string","description":"Return tracking number of the claimed order. Only returned by `POST /claims/filter`."}}}]},"V21ClaimWritableFields":{"type":"object","description":"Shape of the writable claim fields without the create/update requirements. Responses reuse it because a partial response (for example the 409 conflict body) does not repeat every field.","properties":{"description":{"type":"string","description":"What the claim is about. Required when creating or updating a claim."},"eshopNote":{"type":"string","description":"E-shop note; writable on POST/PUT/PATCH and always returned."},"claimCause":{"type":"string","minLength":1,"description":"Cause of the claim. Required when creating or updating a claim; use `causeOtherType` to describe the cause when it is `others`."},"causeOtherType":{"type":"string","description":"Required in practice when claimCause is others."},"files":{"type":"array","description":"Photos and documents attached to the claim.","items":{"$ref":"#/components/schemas/V21ClaimFile"}},"products":{"type":"array","description":"Claimed order lines.","items":{"$ref":"#/components/schemas/V21ClaimProduct"}}}},"V21ClaimFile":{"type":"object","required":["fileName","type","fileType"],"properties":{"id":{"type":"integer"},"data":{"type":"string"},"fileName":{"type":"string"},"type":{"type":"string"},"fileType":{"type":"string"},"fileSize":{"type":"string"},"createdAt":{"type":"string","format":"date-time","description":"Upload timestamp from files.CREATED_AT"},"creatorRole":{"type":"string","enum":["skladon_employee","client"],"description":"Who uploaded the file (Skladon employee or client)"}}},"V21ClaimProduct":{"type":"object","required":["sku","claimedQuantity"],"properties":{"sku":{"type":"string","minLength":1},"claimedQuantity":{"type":"integer","minimum":1},"resendQuantity":{"type":"number","readOnly":true,"description":"Quantity Skladon resends to the customer as the resolution of the claim. Null until the claim is resolved that way. Read only - ignored on write."},"lineState":{"type":"string"}}},"ErrorMessageResponse":{"type":"object","description":"Shape of every 4xx and 5xx response under `/v21`. See the \"Error response format\" section in the API description.","properties":{"statusCode":{"type":"number","description":"Repeats the HTTP status code of the response."},"error":{"type":"string","description":"Standard HTTP status text for `statusCode`."},"message":{"type":"string","description":"Human readable detail of what went wrong."}},"required":["statusCode","error","message"]},"V21ClaimPatch":{"type":"object","minProperties":1,"additionalProperties":true,"description":"Partial V21ClaimWritableBody – at least one field. Do not send `eshopOrderId`, `eshopClaimId`, or `note`."}}},"paths":{"/claims/{eshopClaimId}":{"patch":{"tags":["Claims"],"summary":"Partial update claim","operationId":"v21_patchClaim","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/V21ClaimResponseEnvelope"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V21ClaimPatch"}}},"required":true}}}}}
```
