---
title: "Batch Create Store Item"
method: POST
path: "/v1/store_items/{store_id}/batch"
tags: ["Stores"]
---

# Batch Create Store Item

`POST /v1/store_items/{store_id}/batch`

## Path parameters

- `store_id` string, required

## Request body

- ItemsCreate
  - `items` StoreItemCreate[], required
    - `discount_percent` integer, nullable
    - `bonus_percent` integer, nullable
    - `bonus_fixed` integer, nullable — The user will receive a fixed quantity of the item.
    - `position` integer, required
    - `name` string, nullable
    - `description` string, nullable
    - `image_url` string, uri, nullable
    - `max_purchases` integer, nullable — The maximum number of purchases allowed for the item per user.
    - `global_max_purchases` integer, nullable — The maximum number of purchases allowed for the item across all users.
    - `requirements_expression` Expression
      - `tokens` Token[]
        - `type` 'attribute' | 'custom_attribute' | 'event_attribute' | 'custom_event_attribute' | 'operator' | 'number' | 'date' | 'string' | 'boolean' | 'list' | 'variable' | 'virtual_currency', required
        - `value` unknown
      - `variables` MathExpression[]
        - `tokens` Token[]
          - `type` 'attribute' | 'custom_attribute' | 'event_attribute' | 'custom_event_attribute' | 'operator' | 'number' | 'date' | 'string' | 'boolean' | 'list' | 'variable' | 'virtual_currency', required
          - `value` unknown
        - `name` string, required
    - `custom_badge` string, nullable — The custom badge of the item
    - `campaign_id` string, nullable
    - `user_campaign_id` string, nullable
    - `bond_user_id` string, nullable
    - `start_at` integer, nullable
    - `end_at` integer, nullable
    - `availability_calendar` AvailabilityCalendar
      - `type` 'periods' | 'recurrence'
      - `periods` AvailabilityPeriod[]
        - `start_at` integer
        - `end_at` integer
      - `recurrence` AvailabilityRecurrence — Recurring availability window, e.g. every Mon/Tue/Wed from 15:00 to 16:00.
        - `start_at` integer — Timestamp the recurrence starts repeating from
        - `end_at` integer — Timestamp the recurrence stops repeating at
        - `frequency` 'daily' | 'weekly'
        - `interval` integer — Repeat every N frequency units, counted from start_at
        - `weekdays` Weekday[] — Days of week the window occurs on; any day when omitted
        - `start_time` string, time — UTC time the window opens at
        - `end_time` string, time — UTC time the window closes at; when not after start_time the window crosses midnight
    - `min_amount` integer, nullable
    - `max_reward_points_percent` integer, nullable
    - `reward_points_percent` number, nullable — Percentage of reward points for the item.
    - `reward_points_fixed` integer, nullable — Fixed reward points for the item.
    - `loyalty_points_percent` integer, nullable — Percentage of loyalty points for the item.
    - `loyalty_points_fixed` integer, nullable — Fixed loyalty points for the item.
    - `reward_settings` ItemRewardSettings
      - `available` VCRewardConfig[], required
        - `type` 'virtual_currency'
        - `name` string
        - `virtual_currency_id` string, required
        - `virtual_currency_sku` string
        - `reward_percent` number
        - `reward_fixed` integer
    - `payment_bound` StoreItemPaymentSettings
      - `payment_method_ids` string[]
    - `is_free_item` boolean
    - `rotation_weight` integer, nullable
    - `max_purchases_period_type` 'year' | 'month' | 'week' | 'day' | 'hour' | 'minute' | 'second'
    - `max_purchases_period_value` integer, nullable
    - `max_purchases_limit_type` 'global' | 'personal'
    - `show_disabled_by_max_purchases` boolean, nullable — Whether to show the item as disabled when max purchases limit is reached.
    - `show_global_max_purchase_counter` boolean, nullable — Whether to show purchases left from the global limit when there is no per-user limit.
    - `requirements_mismatch_behavior` 'hide_from_store' | 'disable' | 'disable_and_show_description'
    - `card_type` 'default' | 'featured'
    - `show_first_on_category_list` boolean, nullable — Whether to show the item first on the category list
    - `bonus_item_id` string, nullable — The ID of the bonus item that will be given to the user when they purchase this item.
    - `bonus_item_quantity` integer, nullable — The fixed quantity of the bonus item
    - `bonus_item_percent` integer, nullable — The user will receive a quantity equivalent to the set percentage of the total USD (in cents) purchase.
    - `bonus_items_settings` ItemBonusSettings
      - `items` ItemBonus[], required
        - `id` string, required — The ID of the bonus item that will be given to the user when they purchase this item.
        - `sku` string
        - `quantity_fixed` integer, nullable — The fixed quantity of the bonus item
        - `quantity_percent` integer, nullable — The user will receive a quantity equivalent to the set percentage of the price_after_discount_usd (in cents) of the purchased item.
      - `start_at` integer
      - `end_at` integer
    - `subscription_settings` StoreItemSubscriptionSettings
      - `cta_button_type` 'text' | 'price' | 'trial', required
      - `cta_button_settings` union, required
        - TrialSettings
          - `model_type` 'TrialSettings'
          - `trial_text_mode` 'start_free_trial' | 'try_free_for_n_days'
        - PriceViewSettings
          - `model_type` 'PriceViewSettings'
          - `price_mode` 'from_lowest_price' | 'specific_plan'
          - `plan_key` string
          - `show_period` boolean, required
        - CTAButtonTextSettings
          - `model_type` 'CTAButtonTextSettings'
          - `text` 'activate' | 'subscribe' | 'start_now' | 'select_plan', required
      - `override_trial_days` integer, nullable
      - `card_view_type` 'one_card' | 'separate_cards'
      - `supported_text` 'default' | 'price_and_trial' | 'promotion'
      - `is_change_plan_allowed` boolean — Whether changing the subscription plan is allowed
    - `bonus_badge` string, nullable — Custom text for bonus badge
    - `price` integer, nullable — The price of the item in minor [currency units](https://docs.aghanim.com/currencies/). The system will automatically adjust this to the closest available price point. If you want to set a specific price point, use `price_template_id` instead.
    - `price_point` integer, nullable — The price point
    - `price_template_id` string, nullable — The ID of the price template
    - `quantity` integer, nullable — The quantity of the item
    - `item_id` string, required

## Response `204`

Successful Response

## Other responses

- `422` — Validation Error

## Changes

- **2026-09-04** `2fecf8a6aa0b` — 1 info
  - added the new optional request property `items/items/show_global_max_purchase_counter`

[Change history](https://skmtc.dev/aghanim/apis/aghanim-server-to-server-api/changes/v1/store_items/:store_id/batch/post.md)

---

[API](https://skmtc.dev/aghanim/apis/aghanim-server-to-server-api.md) · [All operations](https://skmtc.dev/aghanim/apis/aghanim-server-to-server-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/aghanim/aghanim-server-to-server-api/revisions/2fecf8a6aa0b/schema)
