---
title: "Submit a signed CoW order"
method: POST
path: "/orders"
---

# Submit a signed CoW order

`POST /orders`

## Request

- Base URL: `https://swap.vurto.cc/v1`
- URL: `https://swap.vurto.cc/v1/orders`
- Auth: none required

Only for plans where `steps[].type === 'signature'`. Sign `steps[].typedData` with the wallet's private key (EIP-712), then POST the fields from `steps[].submit.bodyTemplate` with `signature` filled in. The server re-derives the order from the buildId's stored quote server-side — the body you send is proof of signature, not the source of truth for what gets submitted, so a compromised transport can't smuggle a different order past your signature.

## Request body

- object
  - `wallet` string, required: EVM address that signed the order.
  - `chainId` integer, required
  - `quoteId` string, required
  - `signature` string, required
  - `order` object: Optional: echo back the signed message for the server to double-check it matches what it built. Mismatches reject with 409 instead of submitting.

## Response `200`

OK

- object
  - `id` string, nullable: History id when persistence succeeded. The accepted CoW uid remains authoritative if this is null.
  - `uid` string: CoW order UID, 56 bytes hex. Cite this in support, there's no transaction hash.
  - `buildHash` string
  - `correlationId` string

## Other responses

- `400`: invalid_cow_order | quote_id_required
- `409`: build_expired | build_chain_mismatch | order does not match build

---

[API](https://skmtc.dev/vurto/apis/vurto-swap-public-api.md) · [All operations](https://skmtc.dev/vurto/apis/vurto-swap-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/vurto/apis/vurto-swap-public-api/revisions/423be3a193b5?raw)
