---
title: "Create procurement"
method: POST
path: "/preview/v2/procurements"
tags: ["Procurements"]
---

# Create procurement

`POST /preview/v2/procurements`

> ⚠️ This endpoint is in [public preview](/preview/roadmap).

Create a market automation that maintains capacity by placing buy/sell orders.

## Request body

- CreateProcurementRequest
  - `name` string
  - `target` union, required
    - 'node_count'
    - integer
  - `pool` string, required
  - `instance_sku` union, required — Accepts the canonical prefix below; additional legacy prefixes are aliased for read compatibility. Writes always emit the canonical form.
    - string
    - string — Legacy alias prefix; accepted on read, never emitted on write.
  - `min_sell_price_dollars_per_node_hour` string, required — Price in dollars per node-hour, encoded as a decimal string. Prices are rounded to the nearest $0.000060/node-hour market tick. This is one microdollar per node-minute. Responses contain the rounded value with six decimal places. Inputs must contain a decimal point, be non-negative, and not exceed $500/node-hour.
  - `max_buy_price_dollars_per_node_hour` string, required — Price in dollars per node-hour, encoded as a decimal string. Prices are rounded to the nearest $0.000060/node-hour market tick. This is one microdollar per node-minute. Responses contain the rounded value with six decimal places. Inputs must contain a decimal point, be non-negative, and not exceed $500/node-hour.
  - `managed_window_minutes` integer, required — How far ahead (in minutes) the procurement buys and sells compute. Higher values secure compute further in advance but commit to longer windows that may need to be sold when scaling down, potentially at a loss. Lower values reduce waste but risk compute being unavailable. The window contains this many complete minutes, beginning with the next minute. Buying power must cover each order's full duration.
  - `enabled` boolean — Enable/disable the procurement.

## Response `201`

Procurement created.

- ProcurementResponse
  - `id` string, required
  - `resource_path` string, required — A resource path for a procurement resource. Format: sfc:procurement:<account>:<workspace>:<name>.
  - `owner` string, required
  - `workspace` string, required
  - `workspace_id` string, required
  - `name` string, required
  - `object` 'procurement', required
  - `target` union, required
    - 'node_count'
    - integer
  - `capacity` CapacitySummary, required
    - `id` union, required — Accepts the canonical prefix below; additional legacy prefixes are aliased for read compatibility. Writes always emit the canonical form.
      - string
      - string — Legacy alias prefix; accepted on read, never emitted on write.
    - `name` string, required
  - `pool` PoolSummary, required — A pool referenced by id and name.
    - `id` string, required
    - `name` string, required
  - `instance_sku` InstanceSkuSummary, required — A summary of an instance SKU - its `id` and human-recognizable `alias` - embedded on resources that reference a SKU.
    - `object` 'instance_sku', required
    - `id` union, required — Accepts the canonical prefix below; additional legacy prefixes are aliased for read compatibility. Writes always emit the canonical form.
      - string
      - string — Legacy alias prefix; accepted on read, never emitted on write.
    - `alias` string, required
  - `min_sell_price_dollars_per_node_hour` string, required — Price in dollars per node-hour, encoded as a decimal string. Prices are rounded to the nearest $0.000060/node-hour market tick. This is one microdollar per node-minute. Responses contain the rounded value with six decimal places. Inputs must contain a decimal point, be non-negative, and not exceed $500/node-hour.
  - `max_buy_price_dollars_per_node_hour` string, required — Price in dollars per node-hour, encoded as a decimal string. Prices are rounded to the nearest $0.000060/node-hour market tick. This is one microdollar per node-minute. Responses contain the rounded value with six decimal places. Inputs must contain a decimal point, be non-negative, and not exceed $500/node-hour.
  - `managed_window_minutes` integer, required — How far ahead (in minutes) the procurement buys and sells compute. Higher values secure compute further in advance but commit to longer windows that may need to be sold when scaling down, potentially at a loss. Lower values reduce waste but risk compute being unavailable. The window contains this many complete minutes, beginning with the next minute. Buying power must cover each order's full duration.
  - `enabled` boolean, required — Enable/disable the procurement. Disabling cancels all standing orders.
  - `status` ReconciliationStatus, required
    - `state` 'info' | 'warning' | 'error', required
    - `message` string, required
  - `created_at` integer, required — Unix timestamp.
  - `updated_at` integer, required — Unix timestamp.

## Other responses

- `400` — Validation error (e.g. duplicate name).
- `401` — Unauthorized.
- `403` — Forbidden.
- `409` — Pool and instance SKU already have a procurement or spot deployment.
- `422` — Validation failed.
- `500` — Internal server error.

---

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