---
title: "Delivered price quote"
method: POST
path: "/v1/quotes"
---

# Delivered price quote

`POST /v1/quotes`

## Request

- Base URL: `https://pod.agentmade.dev`
- URL: `https://pod.agentmade.dev/v1/quotes`
- Auth: none declared

## Request body

- QuoteRequest
  - `items` object[], required
    - `product_id` string, required: Product id from search_products, e.g. "tee-heavyweight".
    - `color` string, required: Colour id or name, e.g. "black".
    - `size` string, required: Size, e.g. "XL". For one-size products use "ONE SIZE" ("ONE" also works).
    - `quantity` integer
    - `artwork` object[], required: One entry per print placement. Each placement may appear once per item.
      - `placement` string: Print location on the product, e.g. "front" or "back". See get_product for the list.
      - `preset` string: Named position inside the placement, e.g. "center_chest", "left_chest", "full_front". Defaults to the placement default.
      - `width_mm` number: Exact printed width of the visible artwork in millimetres. Height follows the aspect ratio.
      - `height_mm` number: Maximum printed height in millimetres.
      - `top_mm` number: Distance from the top of the print area to the top of the artwork.
      - `left_mm` number: Distance from the left edge of the print area. Default: horizontally centred.
      - `artwork_id` string, required: artwork_id returned by validate_artwork.
  - `ship_to` object, required: Destination. country_code is required; postal_code and state_code improve shipping accuracy.
    - `country_code` string, required
    - `state_code` string
    - `postal_code` string
    - `city` string
  - `preference` 'fewest_packages' | 'cheapest' | 'fastest': How AgentMade picks the manufacturing route: fewest_packages (default: fewest parcels, then best price among the fastest routes), cheapest, or fastest.
  - `purpose` 'gift' | 'personal' | 'group' | 'work' | 'event' | 'sample': What the order is for. Set it only if the user already said it. Do not ask for it.
  - `deliver_by` string, date: Date by which the parcel should arrive, e.g. "2026-12-20". The quote is never refused because of it: if the estimate is later, the quote says so.
  - `speed` 'standard' | 'express': Shipping speed. Only standard is offered now; express returns a note and a standard quote.
  - `currency` string: ISO 4217 currency of the payer, e.g. "USD". Optional. The quote states the currency that it uses.
  - `buyer` object: Only for a company purchase with an invoice. Business checkout is not open yet: the quote charges destination VAT.
    - `company_name` string, required: Registered company name for the invoice.
    - `vat_id` string: EU or UK VAT number with the country prefix, e.g. "DE123456789".

## Response `201`

Quote

- Quote
  - `quote_id` string, required: Use in purchase before expires_at.
  - `status` 'valid' | 'expired', required
  - `expires_at` string, required
  - `currency` string, required
  - `items` object[], required
    - `line_id` string, required
    - `product_id` string, required
    - `variant_id` string, required
    - `title` string, required
    - `color` string, required
    - `size` string, required
    - `quantity` integer, required
    - `line_total_minor` integer, required: Integer minor units (cents) of `currency`.
    - `placements` object[], required
      - `artwork_id` string, required
      - `placement` string, required
      - `validation` 'PASS' | 'WARN' | 'FAIL', required
      - `warnings` string[], required
  - `ship_to` object, required
    - `country_code` string, required
  - `shipping` object, required
    - `name` string, required
    - `price_minor` integer, required: Integer minor units (cents) of `currency`.
    - `transit_business_days` object, required
      - `min` number, nullable, required
      - `max` number, nullable, required
  - `packages` object[], required
    - `package` integer, required
    - `line_ids` string[], required
    - `ships_from` string, nullable, required: Country code where the package is printed.
  - `package_count` integer, required
  - `tax` object, required
    - `label` string, required
    - `rate_percent` number, required
    - `amount_minor` integer, required: Integer minor units (cents) of `currency`.
    - `included_in_total` boolean, required
    - `note` string, required
  - `totals` object, required: total_minor is the full amount that the payer pays. Show total_formatted to the user. products_minor and shipping_minor are before VAT; tax_minor is the VAT included in the total, or 0 when tax is not collected.
    - `products_minor` integer, required: Integer minor units (cents) of `currency`.
    - `shipping_minor` integer, required: Integer minor units (cents) of `currency`.
    - `tax_minor` integer, required: Integer minor units (cents) of `currency`.
    - `total_minor` integer, required: Integer minor units (cents) of `currency`.
    - `total_formatted` string, required
  - `delivery_estimate_business_days` object, required
    - `min` number, nullable, required
    - `max` number, nullable, required
  - `delivery_estimate_dates` object, required: Calendar dates (YYYY-MM-DD) for the delivery estimate. Tell the user these dates.
    - `earliest` string, required
    - `latest` string, required
    - `note` string, required
  - `purchase_open` boolean, required: False when this destination does not take orders yet or the quote expired. Then do not call purchase.
  - `assumptions` string[], required
  - `notes` string[], required: Things to tell the user before purchase.
  - `next_step` string, required: What the agent should do next, in plain language.

## Other responses

- `4XX`: Error with a machine-readable code and a hint for the next step
- `5XX`: Error with a machine-readable code and a hint for the next step

---

[API](https://skmtc.dev/agentmade/apis/agentmade-print-on-demand-api.md) · [All operations](https://skmtc.dev/agentmade/apis/agentmade-print-on-demand-api/llms.txt) · [OpenAPI document](https://skmtc.dev/agentmade/apis/agentmade-print-on-demand-api/revisions/542fad1de43b?raw)
