## Update allocation status

### cURL

```
curl --request POST \
  --url https://api.fabric.inc/v3/allocations/{allocationIdType}/{allocationIdValue}/actions/update-status \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --header 'x-fabric-channel-id: <x-fabric-channel-id>' \
  --header 'x-fabric-tenant-id: <x-fabric-tenant-id>' \
  --data '
{
  "statusCode": "ALLOCATED",
  "requestContext": {
    "type": "<string>",
    "requestTime": "2022-04-12T09:30:31.198Z",
    "attributes": {
      "attribute": "N",
      "someFlag": true
    }
  },
  "statusDescription": "Allocation completed successfully"
}
'```

### Python

```
import requests

url = "https://api.fabric.inc/v3/allocations/{allocationIdType}/{allocationIdValue}/actions/update-status"

payload = {
    "statusCode": "ALLOCATED",
    "requestContext": {
        "type": "<string>",
        "requestTime": "2022-04-12T09:30:31.198Z",
        "attributes": {
            "attribute": "N",
            "someFlag": True
        }
    },
    "statusDescription": "Allocation completed successfully"
}
headers = {
    "x-fabric-tenant-id": "<x-fabric-tenant-id>",
    "x-fabric-channel-id": "<x-fabric-channel-id>",
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
```

### JavaScript

```
const options = {
  method: 'POST',
  headers: {
    'x-fabric-tenant-id': '<x-fabric-tenant-id>',
    'x-fabric-channel-id': '<x-fabric-channel-id>',
    Authorization: 'Bearer <token>',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    statusCode: 'ALLOCATED',
    requestContext: {
      type: '<string>',
      requestTime: '2022-04-12T09:30:31.198Z',
      attributes: {attribute: 'N', someFlag: true}
    },
    statusDescription: 'Allocation completed successfully'
  })
};

fetch('https://api.fabric.inc/v3/allocations/{allocationIdType}/{allocationIdValue}/actions/update-status', options)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.error(err));
```

### PHP

```
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://api.fabric.inc/v3/allocations/{allocationIdType}/{allocationIdValue}/actions/update-status",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => json_encode([
    'statusCode' => 'ALLOCATED',
    'requestContext' => [
        'type' => '<string>',
        'requestTime' => '2022-04-12T09:30:31.198Z',
        'attributes' => [
                'attribute' => 'N',
                'someFlag' => true
        ]
    ],
    'statusDescription' => 'Allocation completed successfully'
  ]),
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer <token>",
    "Content-Type: application/json",
    "x-fabric-channel-id: <x-fabric-channel-id>",
    "x-fabric-tenant-id: <x-fabric-tenant-id>"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
?>
```

### Go

```
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

url := "https://api.fabric.inc/v3/allocations/{allocationIdType}/{allocationIdValue}/actions/update-status"

payload := strings.NewReader("{\n  \"statusCode\": \"ALLOCATED\",\n  \"requestContext\": {\n    \"type\": \"<string>\",\n    \"requestTime\": \"2022-04-12T09:30:31.198Z\",\n    \"attributes\": {\n      \"attribute\": \"N\",\n      \"someFlag\": true\n    }\n  },\n  \"statusDescription\": \"Allocation completed successfully\"\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("x-fabric-tenant-id", "<x-fabric-tenant-id>")
	req.Header.Add("x-fabric-channel-id", "<x-fabric-channel-id>")
	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))
}
```

### Response Status Codes

- **200**: Allocation response details
- **400**: Mandatory parameter(s) missing
- **401**: Unauthorized request
- **404**: Allocation not found
- **500**: Internal server error

### Response Body

```json
{
  "allocationId": "62ff5c0bec0aed3c86202c32",
  "allocationRequestId": "62ff5c0bec0aed3c86202c32",
  "createdAt": "2022-08-01T18:03:28.483971941Z",
  "locationNumber": "1234B",
  "version": 2,
  "allocationNumber": 13000004,
  "allocationExternalId": "123k4h123k",
  "auditLogs": [{
    "amount": 2.4,
    "auditId": "a05b72dc-78d8-4ea4-90fc-2fe6a1fe1111",
    "auditType": "CANCEL",
    "auditedAt": "2023-03-12T09:24:54.804Z",
    "employeeId": "6227",
    "isSuccess": true,
    "lineItemId": "b03b72dc-78d8-4ea4-90fc-2fe6a1fe6569",
    "lineItemNumber": 1,
    "note": "Note",
    "paymentToken": {
      "paymentType": "VISA",
      "token": "pi_34tr6787rt"
    },
    "policyCode": "POS",
    "quantity": 1,
    "reasonCode": "Scratched item",
    "sku": "SKU0023",
    "source": "POS",
    "subReasonCode": "Scratched item",
    "updatedFields": [{
      "fieldName": "UOM",
      "fieldOriginalValue": "PK"
    }]
  }],
  "currency": "USD",
  "decisionContexts": [{
    "allocatedOrderLineIds": ["<string>"],
    "methodConfigs": {},
    "methodName": "<string>",
    "ruleName": "<string>",
    "ruleSetId": "<string>",
    "ruleSetVersion": "<string>"
  }],
  "items": [{
    "allocationLineNumber": 3,
    "itemId": 100064,
    "quantity": 3,
    "sku": "123k4h123k",
    "uom": "EA",
    "channelId": "4a35cc1b-4e15-46df-96c9-38a697d88dfe",
    "cost": 150.6,
    "estimatedDeliveryDate": "2022-08-01T18:03:28.483971941Z",
    "itemStatus": "PARTIALLY_ALLOCATED",
    "notes": [{
      "createdAt": "2022-05-12T09:30:31.198Z",
      "notes": "Fragile - handle with care",
      "user": "62272e917b12209e68751d94"
    }],
    "orderId": "62f3982438bcab1951be0a19",
    "orderLineId": "134fqfaa532qrf",
    "orderLineNumber": 1,
    "orderNumber": "123k4h123k",
    "orderExternalId": "123k4h123k",
    "orderedAt": "2022-08-01T18:03:28.483971941Z",
    "parentAllocationLineNumber": 3,
    "price": 50.2,
    "reallocationReasonCode": "Reallocating due to unavailability of location number",
    "reallocationRequestId": "123k4h123k",
    "reshipReasonCode": "Stock refilled",
    "scratchQuantity": 1,
    "scratchedReasonCode": "Out of stock",
    "shippedQuantity": 1,
    "weight": 5.5
  }],
  "itemsType": "WEB_SHIP",
  "locationType": "DC",
  "notifiedToPPSAt": "2022-08-01T18:03:28.483971941Z",
  "orderSubType": "ANDROID",
  "parentAllocationId": "62ff5c0bec0aed3c86202c32",
  "previousAllocatedLocationNums": ["410"],
  "recipients": [{
    "email": "test@example.com",
    "name": {"firstName": "Alex","lastName": "Doe","middleName": "E"},
    "phone": {"number": "123-456-7890","type": "MOBILE"},
    "pickupType": "PRIMARY"
  }],
  "shipToAddress": {
    "addressLine1": "123 Main St.",
    "city": "Seattle",
    "countryCode": "US",
    "latitude": 47.6205,
    "longitude": -122.3493,
    "postalCode": "98121",
    "region": "WA",
    "type": "Home",
    "addressLine2": "Suite 100",
    "addressLine3": "Seventh floor",
    "addressLine4": "Attention: Pat E. Kake",
    "email": "test@example.com",
    "name": {"firstName": "Alex","lastName": "Doe","middleName": "E"},
    "phone": {"number": "123-456-7890","type": "MOBILE"}
  },
  "shipFromAddress": {
    "addressLine1": "123 Main St.",
    "city": "Seattle",
    "countryCode": "US",
    "latitude": 47.6205,
    "longitude": -122.3493,
    "postalCode": "98121",
    "region": "WA",
    "type": "Home",
    "addressLine2": "Suite 100",
    "addressLine3": "Seventh floor",
    "addressLine4": "Attention: Pat E. Kake",
    "email": "test@example.com",
    "name": {"firstName": "Alex","lastName": "Doe","middleName": "E"},
    "phone": {"number": "123-456-7890","type": "MOBILE"}
  },
  "shipToId": "98ff5c0bec0aed3c86202c32",
  "shipmentMethod": "Parcel Post Delivery",
  "shipmentType": "SHIP_TO_ADDRESS",
  "shippedAt": "2022-08-01T20:03:28.483971941Z",
  "statusCode": "ALLOCATED",
  "type": "ALLOCATED",
  "updatedAt": "2022-08-01T20:03:28.483971941Z"
}
```

### Error Response
```json
{
  "type": "CLIENT_ERROR",
  "errorCode": "SERVICE-4003",
  "message": "Mandatory param(s): `requiredField1` is/are missing",
  "errors": [{
    "type": "CLIENT_ERROR",
    "errorCode": "SERVICE-4002",
    "message": "Invalid value(s) specified for 'requiredField.field3'",
    "errors": []
  }],
  "context": {
    "service": "allocations",
    "endpoint": "POST /v3/allocations/{allocationIdType}/{allocationIdValue}/actions/update-status"
  }
}
```

```json
{
  "type": "CLIENT_ERROR",
  "errorCode": "SERVICE-4001",
  "message": "Unauthorized request",
  "errors": [],
  "context": {
    "service": "allocations",
    "endpoint": "POST /v3/allocations/{allocationIdType}/{allocationIdValue}/actions/update-status"
  }
}
```

```json
{
  "message": "Allocation not found",
  "type": "CLIENT_ERROR"
}
```

```json
{
  "type": "SERVER_ERROR",
  "errorCode": "SERVICE-5000",
  "message": "Internal server error",
  "errors": [],
  "context": {
    "service": "allocations",
    "endpoint": "POST /v3/allocations/{allocationIdType}/{allocationIdValue}/actions/update-status"
  }
}
```

### Authorizations
#### Authorization

`Bearer <token>` is required for authentication.

### Headers

- **x-fabric-tenant-id**: Identifies the tenant making the request.
- **x-fabric-channel-id**: Identifies the sales channel for the API request.
