# Delivery rates

> Offer delivery choices at checkout.

Source: https://storeware.ai/docs/sdk/rates

```ts
import { ... } from '@storeware/plugin-sdk';
```

### verifyRatesRequest

Verifies a delivery-rate request and returns the basket it asks about.

```ts
function verifyRatesRequest(options: VerifyWebhookOptions): Promise<DeliveryRatesRequest>
```

### DeliveryRatesRequest

What Storeware posts to your `[checkout.delivery_rates] url` for a basket with a delivery address, to ask what you would charge to deliver it.

| Name | Type | Description |
| --- | --- | --- |
| `storeId` | `string` |  |
| `currency` | `string` | ISO 4217, upper case. Your amounts are read in it. |
| `destination` | `{ /** ISO 3166-1 alpha-2. */ country: string; region: string \| null; postalCode: string \| null; city: string \| null; }` |  |
| `lines` | `{ variantId: string; sku: string \| null; title: string; quantity: number; /** Per unit. */ unitPrice: number; /** Per unit, or null when the merchant has not weighed it. */ grams: number \| null; }[]` | Only the lines that are delivered: a download is left out. |
| `subtotal` | `number` | The goods, after any discount on them, before delivery and tax. |

### DeliveryRate

```ts
type DeliveryRate = z.infer<typeof deliveryRate>;
```

### DeliveryRatesAnswer

```ts
type DeliveryRatesAnswer = z.infer<typeof deliveryRatesAnswer>;
```

### deliveryRate

One rate you offer. `id` is yours and stable: a shopper's choice is kept by it while the basket changes, as long as you keep answering with it.

```ts
const deliveryRate: z.ZodObject<{ id: z.ZodString; name: z.ZodString; amount: z.ZodNumber; description: z.ZodOptional<z.ZodString>; min_days: z.ZodOptional<z.ZodNumber>; max_days: z.ZodOptional<z.ZodNumber>; }, z.core.$strip>
```

### deliveryRatesAnswer

The answer Storeware reads: up to 20 rates. An empty list is a fine answer and means you do not deliver this basket.

```ts
const deliveryRatesAnswer: z.ZodObject<{ rates: z.ZodArray<z.ZodObject<{ id: z.ZodString; name: z.ZodString; amount: z.ZodNumber; description: z.ZodOptional<z.ZodString>; min_days: z.ZodOptional<z.ZodNumber>; max_days: z.ZodOptional<z.ZodNumber>; }, z.core.$strip>>; }, z.core.$strip>
```
