---
title: "Add a promo code guests can give as they book (bookings.create's promo_code): percent_off or amount_off a booking's total, for any offering or one, with an optional limit on uses and dates. Up to 100 per org; a code the org has already is refused with 409 code_taken"
method: POST
path: "/promo_codes"
tags: ["promo_codes"]
---

# Add a promo code guests can give as they book (bookings.create's promo_code): percent_off or amount_off a booking's total, for any offering or one, with an optional limit on uses and dates. Up to 100 per org; a code the org has already is refused with 409 code_taken

`POST /promo_codes`

## Request

- Base URL: `https://daybag.io/api/v1`
- URL: `https://daybag.io/api/v1/promo_codes`
- Auth: HTTP bearer

## Request body

- object
  - `code` string, required: 3 to 20 letters, digits and dashes, such as SPRING20; stored upper-cased, and guests may type it in any case
  - `percent_off` integer: Percent off the total, 1 to 100 (100 makes the booking free); or amount_off
  - `amount_off` integer: Off the total, in the currency's minor units (cents; whole yen for zero-decimal currencies), never below zero; or percent_off
  - `offering_id` string, uuid, nullable: Only this offering's bookings; null (or left out) for any offering
  - `max_uses` integer, nullable: How many bookings may use it; null (or left out) for no limit
  - `starts_at` string, nullable: ISO 8601 instant, e.g. 2026-10-03T15:00:00Z
  - `ends_at` string, nullable: ISO 8601 instant, e.g. 2026-10-03T15:00:00Z
  - `active` boolean: false adds it switched off (default true)

## Response `201`

Success

- object
  - `id` string, required
  - `org_id` string, required
  - `code` string, required: As guests give it, upper-cased: 3 to 20 letters, digits and dashes
  - `percent_off` integer, nullable, required: Percent off a booking's total, 1 to 100; null when it takes an amount off
  - `amount_off` integer, nullable, required: Off a booking's total, in the currency's minor units (cents; whole yen for zero-decimal currencies), never below zero; null when it takes a percent off
  - `offering_id` string, nullable, required: The one offering it's for; null for any offering
  - `max_uses` integer, nullable, required: How many bookings may use it; null for no limit
  - `uses` integer, required: Bookings made with it
  - `starts_at` string, nullable, required: ISO 8601 timestamp (UTC)
  - `ends_at` string, nullable, required: ISO 8601 timestamp (UTC)
  - `active` boolean, required: false: switched off, it can't be used
  - `created_at` string, required: ISO 8601 timestamp (UTC)

## Other responses

- `default`: Error

---

[API](https://skmtc.dev/daybag/apis/daybooked-io-api.md) · [All operations](https://skmtc.dev/daybag/apis/daybooked-io-api/llms.txt) · [OpenAPI document](https://skmtc.dev/daybag/apis/daybooked-io-api/revisions/1f576dead370?raw)
