---
title: "Order prints"
method: POST
path: "/v1/orders"
tags: ["prints"]
---

# Order prints

`POST /v1/orders`

## Request

- Base URL: `https://api.noerrands.com/c/prints`
- URL: `https://api.noerrands.com/c/prints/v1/orders`
- Auth: HTTP bearer

Place the print order a quote describes; CONSEQUENTIAL and charged (the quote's total_cents, from general credit) -- real prints, shirts or mugs are made to order and posted. Takes the quote_id with confirm:true. Sensitive write: it requires the human's approval of the quote's total, photos, products (with shirt size and colour), address and warnings. Calling it again with the same quote_id returns the same order instead of a second one.

## Request body

- object
  - `quote_id` string, required
  - `confirm` true, required: Must be true: the human has seen this quote's total, photos, sizes and address and said yes.

## Response `200`

Success.

- object
  - `order_id` string, required: Opaque id, "po_...". Report it to the human.
  - `status` 'submitted' | 'in_production' | 'shipped' | 'cancelled', required
  - `credits_charged_cents` integer, required
  - `balance_cents` integer, required: General credit left after the charge.
  - `shipping_method` 'budget' | 'standard' | 'express', required
  - `typical_delivery` string, required

## Other responses

- `400`: invalid_request
- `401`: unauthorized. Carries WWW-Authenticate: Bearer resource_metadata="..."
- `402`: insufficient_credits, with required_cents and topup_url.
- `403`: forbidden_scope: a write tool called with a read-only key.
- `404`: not_found
- `409`: idempotency_conflict: this quote is being ordered by another request.
- `429`: rate_limited
- `502`: provider_error

---

[API](https://skmtc.dev/noerrands/apis/no-errands-prints-api.md) · [All operations](https://skmtc.dev/noerrands/apis/no-errands-prints-api/llms.txt) · [OpenAPI document](https://skmtc.dev/noerrands/apis/no-errands-prints-api/revisions/f3ad0da7ed08?raw)
