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

# Create procurement

`POST /v0/procurements`

Create a procurement. A procurement tries to continuously buy small blocks of compute over and over again. Advantage being that you might be able to get a cheaper price than a longer term reservation. Disadvantage being that you can never be sure if you're nodes will spin up and down as market prices fluctuate.

## Request body

- MarketApiCreateProcurementRequest
  - `status` 'active' | 'disabled'
  - `instance_type` string, required
  - `desired_quantity` integer, required — Desired quantity of nodes
  - `buy_limit_price_per_gpu_hour` integer — Maximum price per GPU hour in cents
  - `sell_limit_price_per_gpu_hour` integer — Minimum price per GPU hour in cents when selling back
  - `horizon` integer — Planning horizon in minutes
  - `colocation_strategy` union
    - object — Any time the procurement buys it can buy from a different cluster. This means the running node might at times be shut down on one cluster and be started on another. The advantage of this strategy is better price optimization.
      - `type` 'anywhere', required
    - object — Whenever this procurement starts up again after having been disabled/at 0, it will try to remain on the same cluster. If it gets disabled and re-enabled again, it might end up on a different cluster.
      - `type` 'colocate', required
    - object — After this procurement performs its initial buy, any future buys will be performed on the same cluster, even if disabled in between. This gives greater hardware consistency, but you are locked to the price of the cluster that was initially selected.
      - `type` 'colocate-pinned', required
    - object — Pin this procurement to always buy from this specific cluster.
      - `cluster_name` string, required
      - `type` 'pinned', required

## Response `201`

Successfully created procurement

- MarketApiProcurementResponse
  - `object` 'procurement', required
  - `id` string, required
  - `instance_type` string, required
  - `status` 'active' | 'disabled', required
  - `desired_quantity` integer, required
  - `buy_limit_price_per_gpu_hour` integer, required
  - `sell_limit_price_per_gpu_hour` integer, required
  - `horizon` integer, required
  - `colocation_strategy` union, required
    - object — Any time the procurement buys it can buy from a different cluster. This means the running node might at times be shut down on one cluster and be started on another. The advantage of this strategy is better price optimization.
      - `type` 'anywhere', required
    - object — Whenever this procurement starts up again after having been disabled/at 0, it will try to remain on the same cluster. If it gets disabled and re-enabled again, it might end up on a different cluster.
      - `type` 'colocate', required
    - object — After this procurement performs its initial buy, any future buys will be performed on the same cluster, even if disabled in between. This gives greater hardware consistency, but you are locked to the price of the cluster that was initially selected.
      - `type` 'colocate-pinned', required
    - object — Pin this procurement to always buy from this specific cluster.
      - `cluster_name` string, required
      - `type` 'pinned', required
  - `last_message` 'insufficient_balance' | 'running', required

## Other responses

- `400` — Bad request - invalid field values
- `401` — Unauthorized - missing or invalid authentication token
- `402` — Payment required - insufficient funds
- `403` — Forbidden - account frozen
- `404` — Not found - cluster not found
- `500` — Internal server error

---

[API](https://skmtc.net/sfcompute/apis/san-francisco-compute-documentation.md) · [All operations](https://skmtc.net/sfcompute/apis/san-francisco-compute-documentation/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sfcompute/san-francisco-compute-documentation/revisions/93dd7661e9bb/schema)
