---
title: "Submit On Behalf"
method: POST
path: "/api/v1/admin/projects/{project_id}/submit-on-behalf"
tags: ["admin-projects"]
---

# Submit On Behalf

`POST /api/v1/admin/projects/{project_id}/submit-on-behalf`

Advance a DRAFT project to SUBMITTED on behalf of the user.

Replicates the user's own "Request Quote" side effects (quote row,
admin notification, DRAFT → SUBMITTED transition) plus an audit log
entry attributing the action to the admin and a user-facing
notification so the customer knows their project was submitted by
our team.

Shipping address resolution is described in
``AdminSubmitOnBehalfRequest`` — at most one of the two fields may
be set, and if neither is set the project must already have an
address linked.

## Path parameters

- `project_id` string, uuid, required

## Request body

- AdminSubmitOnBehalfRequest — Admin request to advance a DRAFT project to SUBMITTED on behalf of the user. Mirrors the user's ``QuoteRequestCreate`` payload plus an optional shipping address resolution: * ``shipping_address_id`` — pick one of the user's saved addresses. The service verifies it belongs to the project's user. * ``shipping_address`` — create a new address, persisted to the user's address book (same as if the user had saved it themselves). At most one of the two address fields may be set. If neither is set, the project must already have ``shipping_address_id`` populated; otherwise the service returns 400.
  - `notes` string, nullable — Optional notes passed through to the quote request
  - `target_delivery_date` string, date, nullable — Optional target delivery date on the project
  - `shipping_address_id` string, uuid, nullable — Existing saved address belonging to the project's user. Mutually exclusive with ``shipping_address``.
  - `shipping_address` ShippingAddressCreate — Request body for creating a new shipping address.
    - `label` string, required
    - `address_line1` string, required
    - `address_line2` string, nullable
    - `city` string, required
    - `state` string, required
    - `postal_code` string, required
    - `country` string
    - `is_default` boolean

## Response `200`

Successful Response

- AdminProjectDetailResponse — Full project detail for admin view with all nested data.
  - `id` string, uuid, required
  - `name` string, required
  - `description` string, nullable
  - `notes` string, nullable
  - `internal_status` string, nullable
  - `internal_notes` string, nullable
  - `status` string, required
  - `priority` string, required
  - `target_delivery_date` string, date, nullable
  - `shipping_address_id` string, uuid, nullable
  - `shipping_address` ShippingAddressResponse — Full shipping address representation.
    - `id` string, uuid, required
    - `user_id` string, uuid, required
    - `label` string, required
    - `address_line1` string, required
    - `address_line2` string, nullable
    - `city` string, required
    - `state` string, required
    - `postal_code` string, required
    - `country` string, required
    - `is_default` boolean, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
  - `customer_billing_address` string, nullable
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `user` UserSummary, required — Minimal user info for denormalized list views.
    - `id` string, uuid, required
    - `email` string, required
    - `first_name` string, required
    - `last_name` string, required
    - `company` string, nullable
  - `parts` AdminPartDetail[]
    - `id` string, uuid, required
    - `name` string, required
    - `description` string, nullable
    - `required_quantity` integer, required
    - `machining_process_id` string, uuid, nullable
    - `material_id` string, uuid, nullable
    - `finishing_id` string, uuid, nullable
    - `machining_process_label` string, nullable
    - `material_label` string, nullable
    - `finishing_label` string, nullable
    - `custom_material_name` string, nullable
    - `custom_finishing_name` string, nullable
    - `coating_id` string, uuid, nullable
    - `coating_label` string, nullable
    - `coating_color` string, nullable
    - `coating_spec` string, nullable
    - `custom_coating_name` string, nullable
    - `general_tolerance` string, nullable
    - `edge_break_default` string, nullable
    - `ai_estimate` AdminPartAiEstimate — Lean AI pricing and lead-time summary for admin project rows.
      - `unit_price_mid` number, nullable
      - `total_price_mid` number, nullable
      - `confidence` union
        - number
        - string
      - `manual_quote_required` boolean
      - `raw_shop_days` integer, nullable
      - `standard_days` integer, nullable
      - `buffer_days` integer, nullable
      - `customer_lead_time_min_days` integer, nullable
      - `customer_lead_time_max_days` integer, nullable
    - `effective_coating_label` string, nullable
    - `effective_finishing_label` string, nullable
    - `versions` AppSchemasAdminCadVersionSummary[]
      - `id` string, uuid, required
      - `version_number` integer, required
      - `is_latest` boolean, required
      - `file_name` string, required
      - `original_file_name` string, required
      - `file_format` string, required
      - `file_size` integer, required
      - `status` string, required
      - `thumbnail_url` string, nullable
      - `dfm_issues` union
        - object
        - unknown[]
          - unknown
      - `created_at` string, date-time, required
      - `width` number, nullable
      - `height` number, nullable
      - `depth` number, nullable
      - `dimension_unit` string, nullable
      - `volume` number, nullable
      - `surface_area` number, nullable
    - `drawing_file_name` string, nullable
    - `drawing_r2_key` string, nullable
    - `drawing_file_size` integer, nullable
    - `drawing_analysis` object, nullable
    - `redacted_drawing_r2_key` string, nullable
    - `redaction_status` string, nullable
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
  - `quotes` QuoteDetailResponse[]
    - `id` string, uuid, required
    - `status` string, required
    - `intent` string
    - `total_amount` string, nullable
    - `lead_time_days` integer, nullable
    - `lead_time_display` string, nullable
    - `additional_line_items` AdditionalLineItemOutput[], nullable
      - `label` string, required
      - `quantity` integer, nullable — Optional display quantity for admin-entered misc line items. When set, the PDF shows the quantity alongside the label. The amount remains the line amount, not a unit price.
      - `amount` string, required
    - `additional_line_items_post_tax` AdditionalLineItemOutput[], nullable
      - `label` string, required
      - `quantity` integer, nullable — Optional display quantity for admin-entered misc line items. When set, the PDF shows the quantity alongside the label. The amount remains the line amount, not a unit price.
      - `amount` string, required
    - `valid_until` string, date-time, nullable
    - `notes` string, nullable
    - `ai_estimate` object, nullable
    - `ai_estimate_generated_at` string, date-time, nullable
    - `is_human_reviewed` boolean, required
    - `require_deposit` boolean
    - `deposit_percentage` string, nullable
    - `customer_name_override` string, nullable
    - `customer_email_override` string, nullable
    - `customer_billing_address_override` string, nullable
    - `customer_shipping_address_override` string, nullable
    - `customer_shipping_name_override` string, nullable
    - `reviewed_by` string, nullable
    - `reviewed_at` string, date-time, nullable
    - `tax_amount` string, nullable
    - `tax_auto_calculated` string, nullable
    - `tax_rate` string, nullable
    - `quote_pdf_url` string, nullable
    - `cost_snapshot` object, nullable
    - `pricing_config_version` string, nullable
    - `snapshot_version` integer
    - `selected_delivery_option_id` string, uuid, nullable
    - `selected_delivery_option` QuoteDeliveryOptionResponse — Selectable quote option with its own lead time and pricing.
      - `id` string, uuid, required
      - `quote_id` string, uuid, required
      - `key` string, required
      - `label` string, required
      - `description` string, nullable
      - `sort_order` integer, required
      - `is_enabled` boolean, required
      - `is_default` boolean, required
      - `lead_time_days` integer, nullable
      - `lead_time_display` string, nullable
      - `pricing_multiplier` string, nullable
      - `lead_time_multiplier` string, nullable
      - `taxable_amount` string, nullable
      - `tax_amount` string, nullable
      - `tax_auto_calculated` string, nullable
      - `tax_rate` string, nullable
      - `stripe_tax_calculation_id` string, nullable
      - `post_tax_amount` string, nullable
      - `grand_total_amount` string, nullable
      - `admin_notes` string, nullable
      - `line_items` QuoteDeliveryOptionLineItemResponse[]
        - `id` string, uuid, required
        - `delivery_option_id` string, uuid, required
        - `part_id` string, uuid, nullable
        - `part_name` string, nullable
        - `description` string, nullable
        - `quantity` integer, nullable
        - `unit_price` string, nullable
        - `total_price` string, nullable
        - `is_additional` boolean
        - `is_taxable` boolean
        - `sort_order` integer
        - `notes` string, nullable
        - `created_at` string, date-time, required
        - `updated_at` string, date-time, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
    - `project_id` string, uuid, required
    - `line_items` QuoteLineItemResponse[]
      - `id` string, uuid, required
      - `part_id` string, uuid, required
      - `part_name` string, nullable
      - `description` string, nullable
      - `quantity` integer, required
      - `unit_price` string, nullable
      - `total_price` string, nullable
      - `notes` string, nullable
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
    - `delivery_options` QuoteDeliveryOptionResponse[]
      - `id` string, uuid, required
      - `quote_id` string, uuid, required
      - `key` string, required
      - `label` string, required
      - `description` string, nullable
      - `sort_order` integer, required
      - `is_enabled` boolean, required
      - `is_default` boolean, required
      - `lead_time_days` integer, nullable
      - `lead_time_display` string, nullable
      - `pricing_multiplier` string, nullable
      - `lead_time_multiplier` string, nullable
      - `taxable_amount` string, nullable
      - `tax_amount` string, nullable
      - `tax_auto_calculated` string, nullable
      - `tax_rate` string, nullable
      - `stripe_tax_calculation_id` string, nullable
      - `post_tax_amount` string, nullable
      - `grand_total_amount` string, nullable
      - `admin_notes` string, nullable
      - `line_items` QuoteDeliveryOptionLineItemResponse[]
        - `id` string, uuid, required
        - `delivery_option_id` string, uuid, required
        - `part_id` string, uuid, nullable
        - `part_name` string, nullable
        - `description` string, nullable
        - `quantity` integer, nullable
        - `unit_price` string, nullable
        - `total_price` string, nullable
        - `is_additional` boolean
        - `is_taxable` boolean
        - `sort_order` integer
        - `notes` string, nullable
        - `created_at` string, date-time, required
        - `updated_at` string, date-time, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
  - `comments` ProjectCommentResponse[]
    - `id` string, uuid, required
    - `project_id` string, uuid, required
    - `author_id` string, required
    - `author_type` string, required
    - `author_name` string, required
    - `message` string, required
    - `is_internal` boolean, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
  - `request_for_order_date` string, date-time, nullable
  - `order_placed_at` string, date-time, nullable
  - `expected_delivery_date_min` string, date, nullable
  - `expected_delivery_date_max` string, date, nullable
  - `is_locked` boolean
  - `quote_needs_resend` boolean

## 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)
