---
title: "Submit Purchase Order"
method: POST
path: "/api/v1/payments/purchase-order"
tags: ["payments"]
---

# Submit Purchase Order

`POST /api/v1/payments/purchase-order`

Submit a Purchase Order for an approved project.

The quote must be approved and human-reviewed before a PO can be
submitted.

If ``tax_calculation_id`` is provided (from a prior ``calculate-tax``
call), the tax amounts are stored on the Payment record and will be
used when the admin marks the PO as received to create a Stripe Tax
Transaction.

## Request body

- PurchaseOrderCreate — Request to submit a purchase order. If ``tax_calculation_id`` is provided (from a prior ``calculate-tax`` call), the tax amounts are stored on the Payment record for later use when the admin marks the PO as received.
  - `project_id` string, uuid, required
  - `po_number` string, required
  - `po_document_r2_key` string, nullable
  - `shipping_address` string, nullable
  - `shipping_address_id` string, uuid, nullable
  - `tax_calculation_id` string, nullable
  - `tax_amount` integer, nullable
  - `total_with_tax` union
    - number
    - string

## Response `201`

Successful Response

- PaymentResponse — Payment summary returned in list/detail views.
  - `id` string, uuid, required
  - `project_id` string, uuid, required
  - `quote_id` string, uuid, required
  - `method` string, required
  - `status` string, required
  - `amount` string, required
  - `deposit_amount` string, nullable
  - `currency` string, required
  - `po_number` string, nullable
  - `shipping_address` string, nullable
  - `tax_amount` integer, nullable
  - `total_with_tax` string, nullable
  - `notes` string, nullable
  - `paid_at` string, date-time, nullable
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `submitted_by_admin_id` string, uuid, nullable
  - `submitted_by_label` string, nullable
  - `po_document_extraction` CommercialDocumentExtractionSummary — Compact extraction status for list/detail views.
    - `id` string, uuid, required
    - `status` string, required
    - `provider` string, required
    - `schema_version` string, required
    - `confidence` number, nullable
    - `aggregate_total_cents` integer, nullable
    - `currency` string, nullable
    - `max_lead_time_days` integer, nullable
    - `error_message` string, nullable
    - `started_at` string, date-time, nullable
    - `completed_at` string, date-time, nullable
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/prototyping/apis/prototyping-io-api.md) · [All operations](https://skmtc.dev/prototyping/apis/prototyping-io-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/prototyping/prototyping-io-api/revisions/f4a0079fbb57/schema)
