---
title: "Create an item for a signup"
method: POST
path: "/signups/{id}/items"
tags: ["Items"]
---

# Create an item for a signup

`POST /signups/{id}/items`

## Request

- Base URL: `https://thesignup.app/api/v1`
- URL: `https://thesignup.app/api/v1/signups/{id}/items`
- Auth: HTTP bearer

## Path parameters

- `id` string, uuid, required

## Request body

- CreateItemRequest
  - `name` string, required
  - `description` string
  - `quantityNeeded` integer, required
  - `maxPerPerson` integer
  - `customField` object
    - `name` string, required
    - `required` boolean, required
    - `type` 'short' | 'long', required
  - `askDetails` object: The organizer's question. When enabled, label must not be blank.
    - `enabled` boolean, required
    - `label` string, required
    - `placeholder` string, required
    - `required` boolean
  - `category` string
  - `sortOrder` integer
  - `scope` union: Where the item lives. Omitted or null on create is a whole-signup item. On PATCH, omitted leaves the scope unchanged, null detaches the item to whole-signup, and a day or slot replaces the old scope (a slot-scoped item can move to a day and back). A cancelled day or slot of this signup is accepted, and participants are not offered the item until it is uncancelled.
    - object
      - `kind` 'day', required
      - `dayId` string, uuid, required: An event day of THIS signup (ids come from GET /signups/{id}/days).
    - object
      - `kind` 'slot', required
      - `slotId` string, uuid, required: A time slot of THIS signup.

## Response `201`

Created item

- Item
  - `id` string, uuid, required
  - `eventId` string, uuid, required
  - `name` string, required
  - `description` string, nullable, required
  - `quantityNeeded` integer, required
  - `maxPerPerson` integer, required
  - `customField` object, nullable, required
    - `name` string, required
    - `required` boolean, required
    - `type` 'short' | 'long', required
  - `askDetails` object, nullable, required
    - `enabled` boolean, required
    - `label` string, required
    - `placeholder` string, required
    - `required` boolean
  - `category` string, nullable, required
  - `sortOrder` integer, nullable, required
  - `scope` union, required
    - object: Where participants see the item: under one day, under one time slot, or null for a whole-signup item. Read back from the item's row. A cancelled day or slot of this signup is accepted, and participants are not offered the item until it is uncancelled.
      - `kind` 'day', required
      - `dayId` string, uuid, required: An event day of THIS signup (ids come from GET /signups/{id}/days).
    - object: Where participants see the item: under one day, under one time slot, or null for a whole-signup item. Read back from the item's row. A cancelled day or slot of this signup is accepted, and participants are not offered the item until it is uncancelled.
      - `kind` 'slot', required
      - `slotId` string, uuid, required: A time slot of THIS signup.
  - `createdAt` string, date-time, required

## Other responses

- `401`: Unauthenticated — credentials missing, malformed, invalid, or revoked
- `404`: Not found
- `422`: Validation failed — request body / query / path is structurally wrong
- `429`: Rate limited or daily ceiling exceeded
- `500`: Internal server error

---

[API](https://skmtc.dev/thesignup/apis/thesignup-api.md) · [All operations](https://skmtc.dev/thesignup/apis/thesignup-api/llms.txt) · [OpenAPI document](https://skmtc.dev/thesignup/apis/thesignup-api/revisions/c6da7cf92172?raw)
