# Replace stocklocation

URL: https://docs.hanzo.ai/docs/openapi/commerce/put-commerce-stocklocation-by-stocklocationid

> A stock location is a physical address inventory can be held at — a name, street lines, city, province, country, postal code and a phone.

`PUT /v1/commerce/stocklocation/{stocklocationid}`

> [Commerce →](https://docs.hanzo.ai/docs/openapi/commerce) · [All API references →](https://docs.hanzo.ai/docs/openapi) · [Get started →](https://docs.hanzo.ai/docs/guides)

|               |                                                                    |
| ------------- | ------------------------------------------------------------------ |
| **Address**   | `https://api.hanzo.ai/v1/commerce/stocklocation/{stocklocationid}` |
| **Method**    | `PUT`                                                              |
| **Operation** | `put_commerce_stocklocation_by_stocklocationid`                    |
| **Auth**      | `Authorization: Bearer $HANZO_API_KEY`                             |

A stock location is a physical address inventory can be held at — a name, street lines, city, province, country, postal code and a phone. None of it is validated, there are no coordinates, and the row carries no enabled flag and no inventory link, so deleting it is the only way to retire one. This is a true REPLACEMENT, not a merge: the stored row's key is preserved, but the body is decoded onto a FRESH entity, so every field the body omits is written back as its ZERO value. Patch is the verb for changing part of a row. The id is resolved inside the caller org's own namespace and an absent one is 404 before anything is written; a body that fails to decode is 400. Answers the stored result. Any valid access token reaches it. The org must also be entitled to the commerce admin: the paywall answers 402 subscription\_required unless the org holds an active or trialing pro subscription, a live trial credit or a redeemed invite, and 503 when that entitlement cannot be read rather than admitting on an unknown. A platform superadmin passes straight through. The per-kind permission table has no entry for stocklocation, so the scaffold skips that second check with a warning and the gate above is the whole authorization story.

## Request

1 field.

| Field             | In   | Type   | Required | Description |
| ----------------- | ---- | ------ | -------- | ----------- |
| `stocklocationid` | path | string | yes      |             |

## Response

The document declares no response body for this operation. It answers `200` on success and the platform error shape on failure — see [Errors](https://docs.hanzo.ai/docs/errors).

## Examples

**CLI**

```bash
hanzo commerce stocklocation set <stocklocationid>
```

**SDK**

**.ts**

```ts
import { Configuration, CommerceApi } from 'hanzoai';

const api = new CommerceApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.putCommerceStocklocationByStocklocationid({ stocklocationid: 'stocklocationid' });
```

**.py**

```python
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import CommerceApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = CommerceApi(client).put_commerce_stocklocation_by_stocklocationid(stocklocationid='stocklocationid')
```

**.go**

```go
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.CommerceAPI.PutCommerceStocklocationByStocklocationid(context.Background()).Execute()
if err != nil {
	return err
}
```

**.rs**

```rust
use hanzo_client::apis::{configuration::Configuration, commerce_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = commerce_api::put_commerce_stocklocation_by_stocklocationid(&cfg, Default::default()).await?;
```

**.java**

```java
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.CommerceApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new CommerceApi(client).putCommerceStocklocationByStocklocationid();
```

**HTTP**

```bash
curl -X PUT https://api.hanzo.ai/v1/commerce/stocklocation/<stocklocationid> \
  -H "Authorization: Bearer $HANZO_API_KEY"
```

**MCP**

MCP reaches **commerce** through the `commerce` tool, which names its 5 operations with its own verbs — this one among them, under a name only MCP declares. `describe` explains any of them:

```bash
curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "describe",
         "arguments": {
           "op": "get_commerce_health"
         }
       }
     }'
```

---

[Commerce API](https://docs.hanzo.ai/docs/openapi/commerce) · [All Hanzo APIs](https://docs.hanzo.ai/docs/openapi) · [Interactive reference](https://docs.hanzo.ai/docs/openapi/reference)
