---
description: "Interpret configured capacity, computed stock, pending holds, shared pools, packages and sales windows."
group: "Resources"
order: 14
---

# Product availability

Read remaining capacity while keeping checkout's full availability rules in view.

## Read current stock {#read-current-stock}

`GET /{event_id}/products/index.json` returns a product array with configured `stock` and computed `current_stock`. For a normal finite product, current stock subtracts sold tickets, reservations and pending order holds from configured capacity. Recurring-date and guaranteed-stock rules can change that calculation.

```
[{"id":"22222222-2222-4222-8222-222222222222","title":"General admission","stock":100,"current_stock":72,"pending":3,"visible":1,"waitinglist":1,"ProductsPool":[{"pool":"1","sales":28}]}]
```

Unlimited configured stock is `-1`. Its current computed sentinel is `8388607`; do not display that as literal finite ticket capacity. The list retains `pending`, but removes the separate `times_sold` and `reserved` fields. Don't reconstruct those counts from missing fields.

## Check shared pools {#check-shared-pools}

`ProductsPool[].sales` reports shared-pool usage. Event metadata keys `products_pool_{pool_id}` contain configured limits. Products can share a pool, so two individually available ticket types may compete for the same remaining capacity. The organizer catalog includes sold-out products and does not clamp every `current_stock` value to its pool limit.

Full organizer configuration is available through `/{event_id}/events/get_event_data.json`, but it includes sensitive internal settings. Read only the metadata you need on your server. Use the organizer's pool settings when configuring limits and verify metadata write rules for your event.

## Consider sales rules {#consider-sales-rules}

-   `available_from`/`available_till` define sales windows using legacy server-local timestamps.
-   `visible` controls visitor visibility.
-   Package component quantities and shared pools can constrain a bundle.
-   Recurring dates and guaranteed invitation stock have their own capacity rules.
-   `waitinglist` and `keep_soldout_in_shop` affect visitor shop behavior after sellout.

## Avoid stale promises {#avoid-stale-promises}

A read does not reserve stock. Capacity can change between reading and paying. Refresh before displaying availability, treat the result as advisory, and let Paydro validate the visitor's final checkout. There is no separate inventory-hold API in this reference.

See [waiting lists](/en-us/docs/waiting-lists.md) for issuing invitations and [embedding](/en-us/docs/embed-ticket-shop.md) for completing registration and payment.
