---
title: "Lock an immutable package and create sourcing candidates"
method: POST
path: "/v1/projects/{project_id}/source"
tags: ["Sourcing"]
---

# Lock an immutable package and create sourcing candidates

`POST /v1/projects/{project_id}/source`

## Request

- Base URL: `https://api.supplyslate.com`
- URL: `https://api.supplyslate.com/v1/projects/{project_id}/source`
- Auth: one of:
  - OAuth 2 (authorization code, authorization URL `https://mcp.supplyslate.com/authorize`, token URL `https://mcp.supplyslate.com/oauth/token`)
  - HTTP bearer

## Path parameters

- `project_id` string, required

## Headers

- `Idempotency-Key` string

## Request body

- SourcingRequestWrite
  - `external_id` string
  - `name` string
  - `origin_type` 'exact_part' | 'rfq'
  - `demand_lane` 'industrial' | 'builder' | 'research'
  - `category` string, required
  - `ship_to` object
    - `country_code` string, required
    - `postal_code` string
  - `need_by` string, date
  - `substitutions_allowed` boolean
  - `data_classification` 'public' | 'commercial'
  - `notes` string
  - `artifact_ids` string[]
  - `fixture_kind` 'real' | 'internal_test' | 'demo'
  - `items` SourceItemWrite[], required
    - `description` string, required
    - `item_kind` 'catalog_product' | 'custom_part' | 'service' | 'consumable' | 'requirement_only'
    - `manufacturer` string
    - `part_number` string
    - `equipment_make` string
    - `equipment_model` string
    - `quantity` number, required
    - `unit` string, required
    - `specifications` object
    - `certifications` string[]
    - `artifact_ids` string[]

## Response `201`

Created durably

- SourcingRequestResponse
  - `sourcing_request` SourcingRequest, required
    - `id` string, required
    - `project_id` string, nullable
    - `category` string, required
    - `demand_lane` string
    - `status` string, required
    - `items` object[]
    - `matches` object[]
  - `request_id` string
  - `matching` object

## Other responses

- `400`: Invalid request
- `401`: Authentication required
- `403`: Scope or tenant boundary denied
- `404`: Resource not found
- `409`: State conflict or idempotency mismatch
- `429`: Rate limited

---

[API](https://skmtc.dev/supplyslate/apis/supplyslate-agent-native-supply-api.md) · [All operations](https://skmtc.dev/supplyslate/apis/supplyslate-agent-native-supply-api/llms.txt) · [OpenAPI document](https://skmtc.dev/supplyslate/apis/supplyslate-agent-native-supply-api/revisions/f7989551f167?raw)
