# Create confirm — POST /v1/commerce/store/{storeid}/checkout/paypal/confirm/{payKey}

URL: https://docs.hanzo.ai/docs/openapi/commerce/post-commerce-store-by-storeid-checkout-paypal-confirm-by-paykey

> Meant to mark the payments carrying the given pay key as paid and set the order to paid, it cannot reach that work from this address: the shared checkout handler takes its order from an ORDER ID path parameter this route does not carry, so the order is always fresh and untyped and the confirm dispatch refuses with 400 before the pay key is queried.

`POST /v1/commerce/store/{storeid}/checkout/paypal/confirm/{payKey}`

> [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/store/{storeid}/checkout/paypal/confirm/{payKey}` |
| **Method**    | `POST`                                                                              |
| **Operation** | `post_commerce_store_by_storeid_checkout_paypal_confirm_by_paykey`                  |
| **Auth**      | `Authorization: Bearer $HANZO_API_KEY`                                              |

Meant to mark the payments carrying the given pay key as paid and set the order to paid, it cannot reach that work from this address: the shared checkout handler takes its order from an ORDER ID path parameter this route does not carry, so the order is always fresh and untyped and the confirm dispatch refuses with 400 before the pay key is queried. The token gate, the namespace middleware and the store lookup all run ahead of that, so authentication and store failures surface first. Behaviour is identical to the unprefixed confirm address; the checkout prefix changes nothing here.

## Request

2 fields.

| Field     | In   | Type   | Required | Description |
| --------- | ---- | ------ | -------- | ----------- |
| `storeid` | path | string | yes      |             |
| `payKey`  | 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 store checkout paypal confirm add <storeid> <payKey>
```

**SDK**

**.ts**

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

const api = new CommerceApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postCommerceStoreByStoreidCheckoutPaypalConfirmByPaykey({ storeid: 'storeid', payKey: 'payKey' });
```

**.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).post_commerce_store_by_storeid_checkout_paypal_confirm_by_paykey(storeid='storeid', pay_key='payKey')
```

**.go**

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

resp, _, err := client.CommerceAPI.PostCommerceStoreByStoreidCheckoutPaypalConfirmByPaykey(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::post_commerce_store_by_storeid_checkout_paypal_confirm_by_paykey(&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).postCommerceStoreByStoreidCheckoutPaypalConfirmByPaykey();
```

**HTTP**

```bash
curl -X POST https://api.hanzo.ai/v1/commerce/store/<storeid>/checkout/paypal/confirm/<payKey> \
  -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)
