Changelog
Each heading is a release tag. GET /health reports the same version without the v prefix
(v1.21.0 here is 1.21.0 there). Entries before v1.20.0 were renumbered from an earlier,
independent scheme.
v1.27.3 (Current)
Section titled “v1.27.3 (Current)”Released: October 2026
get_entityalso acceptstypeas another name forentity_type.
v1.27.2
Section titled “v1.27.2”Released: October 2026
- MCP tools accept a few more common ways of passing purchase-order status filters and entity ids.
v1.27.1
Section titled “v1.27.1”Released: October 2026
- MCP sign-in now works with more AI tools that discover sign-in settings automatically.
v1.27.0
Section titled “v1.27.0”Released: September 2026
MCP tools
Section titled “MCP tools”- Simplified naming:
create_purchase_order/update_purchase_ordernow document onlylines(notline_items), andlist_entitiesnow documents onlylocation(notwarehouse) for its entity type. Both old names still work if you’re already using them.
v1.26.0
Section titled “v1.26.0”Released: September 2026
MCP tools
Section titled “MCP tools”- Enum-valued parameters (
entity_type,status,metrics,order_types,expand,format, and others) now accept any letter-casing, not just the documented one. - MCP tool enum values (entity types, statuses, order types, and similar) are now uniformly lower-case instead of a mix of upper- and lower-case. Old upper-case values are still accepted as input.
receive_po_unitsandreceive_transfer_unitslines give a clearer error when sentreceived_units— usereceived_quantityinstead.list_entitiesaccepts"warehouse"as an alias for thelocationentity type.search_purchase_orders’sstatusfilter accepts a single status as well as a list.search_inventory’smetricsfilter gives a clearer error naming the current metric name when sent a retired one (e.g.days_of_stock,lead_time_to,re_order_status).create_purchase_orderandupdate_purchase_ordernow acceptline_itemsas an alias forlines.
v1.25.0
Section titled “v1.25.0”Released: September 2026
MCP tools
Section titled “MCP tools”- New
receive_transfer_unitswrite tool: record received quantities against stock-transfer lines, mirroringreceive_po_unitsfor PO lines. receive_unitsis renamed toreceive_po_units.receive_unitsis still accepted as a deprecated alias until a future release; calls made through the alias are now audit-logged underreceive_po_units, notreceive_units.receive_po_unitsandreceive_transfer_unitslines accept two new optional fields:mark_as_received(receive the full confirmed quantity in one shot) andis_closed(close a line without changing its received quantity, e.g. a short-close).
v1.24.0
Section titled “v1.24.0”Released: September 2026
MCP tools
Section titled “MCP tools”- New
update_forecast_planwrite tool: apply manual overrides to demand-plan cells.dry_run=truereturns the current value, the proposed value and the delta for every cell before anything is written.
v1.23.0
Section titled “v1.23.0”Released: September 2026
MCP tools
Section titled “MCP tools”- New stock-transfer tools:
search_transfers,create_transferandupdate_transfer. Transfer ids are prefixedtr_…and transfer linestprt_…;get_entityandget_change_historyaccept them.get_entityreturns a transfer with its lines, andupdate_transferalso moves a transfer’s status. - Purchase-order lines are keyed by
line_idinstead oforder_part_id, in both inputs and responses.order_part_idis still accepted when sent to the server until the next release. update_purchase_order,receive_unitsandexport_purchase_ordertakepurchase_order_idinstead ofpo_id.po_idis still accepted when sent to the server until the next release.- Purchase orders and stock transfers now use the same words throughout: lines,
ordered_units,received_units,delivery_windowandis_late. get_change_historydetail rows useline_id/line_idsinstead oforder_part_id/part_ids, for both purchase orders and stock transfers.
v1.22.0
Section titled “v1.22.0”Released: September 2026
MCP tools
Section titled “MCP tools”- MCP: the tool list now advertises a 5-minute cache lifetime, so clients that support it pick up tool schema changes sooner.
v1.21.2
Section titled “v1.21.2”Released: September 2026
- Fixed the total row count reported by MCP
search_inventorywhen filtering onstock_healthorstock_health_projected.
v1.21.1
Section titled “v1.21.1”Released: September 2026
- Error responses always include their JSON body.
- MCP
search_inventorydocs now explain howstock_healthfilters behave at SKU and product level.
v1.21.0
Section titled “v1.21.0”Released: September 2026
MCP tools
Section titled “MCP tools”- Breaking:
stock_healthandstock_health_projectedvalues are product labels.stock_healthis nowNO_STOCK,BELOW_SAFETY_STOCK,OVER_SAFETY_STOCKorOVER_DAYS_OF_COVER;stock_health_projectedisSTOCKOUT_LIKELY,AT_RISK,NO_RISKorOVERSTOCK_RISK. The new labels apply everywhere the fields appear, in rows, filters and change-history diffs. - Breaking:
days_of_stockis nowdays_left. The metric, the response key and the filter/sort fields all move:days_of_stock_min/days_of_stock_maxbecomedays_left_min/days_left_max. - Breaking:
re_order_statusis nowreorder_statuson the MCP surface. The REST API field is unchanged and still spelledre_order_status. - Breaking:
update_sku_settings’max_days_of_coveris nowdays_of_cover. Change-history diffs name it the same way. - Breaking:
expected_delivery_dateis nowconfirmed_delivery_date. It moves on PO rows and lines, on thecreate_purchase_orderparameter, on theupdate_purchase_orderline patch field, and in change-history diffs. - Breaking: purchase-order line writes take
ordered_units, notquantity. Bothcreate_purchase_order’slines[].quantityandupdate_purchase_order’spatch.lines[].quantityare nowordered_units, as are theupdate_purchase_orderdry-run diff and theapplied[].applied_updatesecho.
Rename these in existing calls — the old names and values are not accepted.
v1.20.1
Section titled “v1.20.1”Released: September 2026
GET /healthand the OpenAPI document now report the deployed release version. Changelog versions below are renumbered to match release tags.
v1.20.0
Section titled “v1.20.0”Released: September 2026
MCP tools
Section titled “MCP tools”- Breaking: warehouses are called locations across the whole MCP surface.
create_purchase_order’swarehouse_idparameter is nowlocation_id,search_forecasts’warehouse_idsislocation_ids,search_inventory’swarehouse_id/warehouse_namefilter fields arelocation_id/location_nameand itssku_warehousegranularity isSKU_LOCATION. TheWAREHOUSEvalue becomesLOCATIONinfind_entity(types=…),list_entities(entity_type=…),get_entity(entity_type=…),search_forecasts(group_by=…)andget_change_history(entity_type=…), whereWAREHOUSE_TRANSFERalso becomesLOCATION_TRANSFER. Responses follow: rows and PO lines carrylocation_id/location_name, PO rows carrylocation_names, a POsummaryreportsdistinct_locations,receive_units’stock_movementsname the location, andget_entity(LOCATION)returnsis_logical_location/child_locations. Rename these in existing calls — the old names are not accepted. - Breaking: the
wh_id prefix is nowloc_. Location ids are returned with theloc_prefix and must be passed back in that form; an id sent with the oldwh_prefix is rejected with a validation error namingloc_. The ids themselves are unchanged, sowh_…andloc_…refer to the same location. - Breaking: renamed fields and values.
search_purchase_orders’order_statusparameter is nowstatus, and PO rows carrystatusrather thanorder_status; PO rows and lines carryordered_units(wasquantity_confirmed),received_units(wasquantity_received),expected_delivery_date(wasconfirmed_delivery_date) andrecommended_units(wasrecommended_to_order).search_inventory’sname_likefilter is nowproduct_name(still matched withcontains) and itslead_time_tometric/filter is nowearliest_arrival_date.update_sku_settings’min_days_on_hand/max_days_on_handare nowsafety_stock_days/max_days_of_cover.get_entity(SUPPLIER)returnslead_time_daysas a number (it was a"30 days"string) andshopify_vendorsinstead ofvendors— those are Shopify’s per-product Vendor labels, not suppliers.get_entity(PRODUCT)returnsre_order_statusinstead of the invertednon_replenishable. Change-history diffs use the same new names. Rename these in existing calls — the old names are not accepted. - Breaking:
update_sku_settingsno longer acceptsstatus: active|discontinued. Passre_order_statusinstead (discontinuedisre_order_status: false); a patch still usingstatusis rejected with a validation error naming it. - Breaking:
search_inventory’s granularity values are uppercase.sku/sku_location/productare nowSKU/SKU_LOCATION/PRODUCT. The response’srequested.granularityechoes the uppercase form, as do thedrill_downspecs onget_insightscards. stock_healthis available as a metric and a filter onsearch_inventory. It reports the app’s Stock status (now) —STOCK_OUT(No stock),AT_RISK(Below Safety Stock),HEALTHY(Over Safety Stock),EXCESS(Over Days of Cover) — at every grain, and is returned inline onget_entity(SKU)andget_entity(PRODUCT). AtSKUandPRODUCTgrain the row spans several locations, so the worst label wins.search_inventory’sfilters[].valuenow declares its accepted types. A string, number or boolean — or a list of those forin/not_in. Existing calls are unaffected.
Changed
Section titled “Changed”- Tool and field descriptions were rewritten in the product’s language. The advertised schema text differs throughout; behaviour is unchanged.
search_forecastsno longer reports a phantom aggregation downgrade.group_by_overriddenistrueonly when a coarser grain than the one requested was returned.search_forecastsreally does cover the next 12 months. The window is the current calendar month plus the following 11, andrequestedreports it asmonths,start_dateandend_date— the oldhorizon_daysfield is gone. A month with no forecast is omitted rather than returned as a zero.- Purchase orders no longer expose
origin. It is gone from PO rows and fromget_entity(PURCHASE_ORDER). - PO attachments and tags are shaped for callers. Attachments carry
name,extensionanduploaded_at; tags are a plain list of tag names. search_inventoryreturnsdays_of_stockatPRODUCTgranularity. It was alwaysnullthere. Product rows now carry the{min, max}range across the product’s SKUs, the same shape as SKU grain, as doesget_entity(PRODUCT).receive_unitsrefuses to receive against an unplaced PO. A receipt on aDRAFT,SENT_FOR_APPROVALorAPPROVEDorder now fails with a validation error naming the status and pointing atupdate_purchase_order(patch={status: 'ORDERED'}). Receipts againstORDEREDandPARTIALLY_RECEIVEDorders are unaffected.get_change_historyrows no longer carryreversible. To undo a change, apply the inverse with the relevant write tool.export_purchase_orderis no longer annotated read-only. Each call writes an export file, soreadOnlyHintis nowfalse;destructiveHintstaysfalseandidempotentHinttrue. Clients that hide non-read-only tools behind a confirmation will now prompt for it.- A purchase order with no status reads as
DRAFT.search_purchase_orders,get_entity(PURCHASE_ORDER),receive_unitsandupdate_purchase_orderall treat it that way. search_forecastssupportsgroup_by=LOCATION. Location-grouped calls return location-grain rows and no longer raisegroup_by_overridden.- PO lines report
received_units.receive_units’ per-lineappliedrows reportnew_received_unitsto match. - Change-history diffs name SKU settings the way the tools do. A SKU settings change reads as
lead_time_days,safety_stock_days,max_days_of_cover,re_order_statusandmoq, and an id inside a diff’sold/newvalues carries its type prefix, so it can be passed straight toget_entity. get_entity(LOCATION)returns usable child location ids. Eachchild_locationsentry carrieslocation_id, with theloc_prefix, alongside the child’sname.search_inventoryrejects a filter value of the wrong type for its field. Numeric fields require a number,re_order_statusa boolean, and id / text / status fields a string, with a validation error naming the field. Date fields are unchanged — they take ISO strings.update_sku_settingsdry-run output is trimmed. Preview rows carrypatch,sku_count,sku_idsandunsupported_fieldsonly.
v1.19.0
Section titled “v1.19.0”Released: September 2026
MCP tools
Section titled “MCP tools”list_entities’sentity_typeandfind_entity’stypesno longer advertise values that always errored.list_entities(entity_type=…)no longer listsSKU,PRODUCTorPURCHASE_ORDER— usesearch_inventoryorsearch_purchase_ordersinstead;find_entity(types=…)no longer listsPURCHASE_ORDER— usesearch_purchase_ordersorget_entity. Callers already avoiding those values are unaffected.search_purchase_orders:internal_statusandoriginremoved. Which orders are returned is unchanged. Neither has a replacement.search_purchase_orders:date_from/date_torenamed tocreated_after/created_before. Both bound the PO’s creation date, not its delivery date. Behaviour is unchanged — rename the parameters in existing calls.- Purchase orders are named by
nameeverywhere.create_purchase_order’sreferenceparameter andupdate_purchase_order’spatch.referenceare nowname, matching thenamefield the read tools have always returned for a PO. update_purchase_order: delivery dates are now settable, per line. The header-levelpatch.expected_delivery_dateandpatch.confirmed_delivery_datefields have been removed; set a date withpatch.lines[].expected_delivery_dateon anupdateline. The PO-leveldelivery_windowin read responses is derived from them.update_purchase_order:patch.supplier_noterenamed topatch.notes. It writes the PO’s notes — the same fieldcreate_purchase_orderalready callednotes.get_change_historycovers more entity types.entity_typenow also acceptsSUPPLIER,WAREHOUSE,PRODUCT,WAREHOUSE_TRANSFER,STOCK_TAKE,SHIPMENT,FORECAST,FORECASTING_ENGINEandTAG.SUPPLIER,WAREHOUSEandPRODUCTtake prefixed ids (sup_…,wh_…,prod_…); the others take the raw id shown in the feed’sentity_id.
v1.18.1
Section titled “v1.18.1”Released: August 2026
MCP connectivity
Section titled “MCP connectivity”- Connecting
https://mcp.prediko.io/mcpfrom Gemini now works. Other clients are unaffected.
v1.18.0
Section titled “v1.18.0”Released: August 2026
Purchase order imports
Section titled “Purchase order imports”POST /api/v1/ordersacceptsCONFIRMEDandAPPROVED. Thestatusfield previously allowed onlyDRAFT,PARTIALLY_RECEIVEDandFULLY_RECEIVED, so an order that had been placed with a supplier but not yet received could only be sent asDRAFT. Re-sending such an order moved it back to draft in Prediko on every call, while the transfer already pushed to a connected store or WMS stayed in place. SendCONFIRMEDfor orders you have placed. Existing integrations are unaffected — the three previous values behave exactly as before.- An unrecognised
statusno longer resets a PO to draft. A status value Prediko cannot map now leaves an existing purchase order’s status untouched instead of downgrading it toDRAFT. New purchase orders still open asDRAFT.
v1.17.1
Section titled “v1.17.1”Released: August 2026
MCP tools
Section titled “MCP tools”- Bug fixes.
CANCELLEDis no longer accepted onupdate_purchase_orderor thesearch_purchase_ordersstatus filter — Prediko has no cancelled state for a purchase order, so writing it always failed and filtering on it never matched anything.
v1.17.0
Section titled “v1.17.0”Released: August 2026
MCP tools
Section titled “MCP tools”- Permission-aware tool calls: MCP tool calls now respect user permission profiles. A call that touches data the calling user’s permission profile does not allow now returns a
code="permission"error with the message “Permission denied: your permission profile does not allow this action. Ask a workspace admin to update it.” instead of the previous behaviour. Rolling out gradually per workspace.
v1.16.2
Section titled “v1.16.2”Released: August 2026
MCP tools
Section titled “MCP tools”The MCP surface versions independently of the REST endpoints below; this change is listed here because it is customer-visible.
- Stricter tool input validation. Every MCP tool’s input schema now declares
"additionalProperties": falseat the top level, so calls that include unknown top-level fields are rejected instead of having those fields silently ignored. No parameter was added, removed or renamed. Clients that send only the documented parameters are unaffected.
v1.16.1
Section titled “v1.16.1”Released: August 2026
New Features
Section titled “New Features”- Retail price on SKUs:
POST /api/v1/skusnow returnsretail_price, the current Shopify selling price in your store’s default currency. It is the same value already returned asretail_priceon purchase-order lines, so a SKU export and an order export now agree without a join. A number atSKUandSKU_LOCATION, and a{min, max}object atPRODUCTcovering the product’s SKUs — the same shapedays_on_handuses there.
- The field is omitted for a SKU Prediko holds no price for in your store’s default currency — raw materials, typically. Purchase-order lines differ here: they report
0in that case rather than dropping the field. retail_priceis the live catalogue price, not the price captured on any past date. That is true of the purchase-order line field too: a line’sretail_pricereflects today’s selling price for that SKU, not the price when the order was placed. Prediko does not currently expose historical price-at-date.- The field is additive — no existing field changed name, type or meaning. Clients that ignore unknown fields are unaffected.
v1.16.0
Section titled “v1.16.0”Released: August 2026
MCP tools
Section titled “MCP tools”The MCP surface versions independently of the REST endpoints above; these changes are listed here because they are customer-visible.
- Reorder status is now writable.
update_sku_settingstakesre_order_status(boolean) in a SKU patch — the app’s Reorder Yes/No column. It was already readable as a metric and filter onsearch_inventory.status(active/discontinued) is the deprecated spelling of the same field and still works; passing both in one patch is rejected. - Reorder status at product granularity.
search_inventorywithgranularity: "product"now returnsre_order_statusas a{yes, no}count of the product’s SKUs instead of rejecting the metric. It stays a boolean atskuandsku_warehousegranularity. - Setting
re_order_status: trueon a bundle SKU is now rejected. Prediko always excludes bundles from re-order planning, so the call previously succeeded and changed nothing. Set it on the bundle’s component SKUs instead.
update_sku_settingssilently skipped bundle and archived SKUs: they resolved as valid but then matched nothing on the write, so a batch containing them reported every SKU as updated while only the others changed.
v1.15.0
Section titled “v1.15.0”Released: August 2026
New Endpoints
Section titled “New Endpoints”GET /api/v1/bundles- List bundles and the SKUs each one is composed of
New Features
Section titled “New Features”- Bundles: Pull the bundles (kits) configured for your account, each with the list of child SKU names it’s made up of. Useful for reconciling sales/forecast data at the component level when a customer buys a bundle.
- ABC category on SKUs:
POST /api/v1/skusnow returnsabc_category, the ABC classification Prediko computes for each SKU from your ABC settings. Available at everyaggregation_level— a string atSKUandSKU_LOCATION(nullwhen the SKU is unclassified or ABC is not configured), and an array of the distinct categories across a product’s SKUs atPRODUCT. Category names come from your ABC settings, so treat the value as a string rather than a fixedA/B/Cenum. - Per-line cost on purchase orders:
POST /api/v1/orderslines now accept an optionalunit_cost, expressed in the supplier’s currency. Previously a cost sent in the payload was silently dropped, so there was no way to set a PO line’s cost through this endpoint.
- Cost fields sent on
POST /api/v1/orderslines (cost,unit_cost,unit_cost_supplier) were accepted with a200and then discarded, never reaching the purchase order. Sendunit_costto set a line’s cost; the other two names are still ignored.
abc_categoryandunit_costare both additive — no existing field changed name, type or meaning. Clients that ignore unknown fields are unaffected.- Cost resolution on PO lines is unchanged when
unit_costis omitted: Prediko still resolves the SKU’s supplier-specific cost for that line’s supplier, falling back to the SKU’s generic unit cost. Only sendunit_costto override what Prediko already holds. A negativeunit_costis rejected with422;0is kept as a real cost (free samples) rather than treated as unset.
v1.13.4
Section titled “v1.13.4”Released: July 2026
New Endpoints
Section titled “New Endpoints”PATCH /api/v1/skus- Update attributes on up to 200 SKUs per call
New Features
Section titled “New Features”- SKU updates: Set a SKU’s reorder status (
patch.re_order_status) —true(Yes) makes it replenishable and included in reorder recommendations,false(No) excludes it from replenishment. This is the writable counterpart of there_order_statusfield already returned byPOST /api/v1/skus. - Extensible patch body: the endpoint takes a
patchobject rather than a per-attribute URL, so further SKU attributes (lead time, MOQ, minimum/maximum days on hand) will be added as additionalpatchfields without a new endpoint or a breaking change.
Changed
Section titled “Changed”POST /api/v1/transactionsnow takesstore_nameinstead ofstore_id. Store names are what you see in Prediko, so no internal identifier is needed. Matching ignores case and surrounding whitespace — URL-encode names containing spaces.
Deprecated
Section titled “Deprecated”store_idonPOST /api/v1/transactions. It is still accepted so existing integrations keep working, but it will be removed in a future version. Supply eitherstore_nameorstore_id, not both — sending both returns422.
- An unrecognised store is now rejected with
422, listing the store names available on your account. Previously an incorrectstore_idreturned200and the transactions were recorded against a store that did not exist, so they never appeared in Prediko. - Transaction dates:
timestampvalues on the 1st-12th of a month were being recorded in the wrong month — the day and month were transposed, so2026-12-03(3 December) was stored as 12 March. Dates from the 13th onward were unaffected. ISO 8601 timestamps are now recorded exactly as sent. - A
timestampthat is not a valid ISO 8601 datetime is now rejected with422rather than being interpreted as a best guess.
- This is a behaviour change for anyone currently sending an invalid
store_id: those requests returned200before and now return422. The data was not being recorded in either case. - Bundle SKUs cannot be given a reorder status of
true— they are replenished through their components — and return422. - Setting
re_order_statustofalsealso dismisses stock-health alerts for those SKUs; re-enabling does not restore previously dismissed alerts. POST /api/v1/skusserves from a planning dashboard rebuilt by a queued refresh, so it can report the previous value for several minutes after a write. Treat the200fromPATCH /api/v1/skusas the confirmation.
v1.12.6
Section titled “v1.12.6”Released: June 2026
New Fields
Section titled “New Fields”- SKUs: Added period sales metrics as default response fields across all aggregation levels (
SKU,SKU_LOCATION,PRODUCT). For eachweekly/monthly/quarterly/yearlywindow:*_quantity(units sold, historical),*_plan_quantity(forecast unit sales plan),*_sales(sales revenue, historical), and*_plan_sales(forecast sales revenue plan) — 16 columns in total. This lets API consumers pull historical units sold and the sales plan (e.g. past/next 3 months) programmatically.
v1.6.0
Section titled “v1.6.0”Released: April 2026
New Features
Section titled “New Features”- Deliveries: Each line now exposes
order_id,created_at, and a stable 10-charactershipment_id(hash oforder_id+ thecreated_atcalendar day). Lines from the same order recorded on the samecreated_atday share the sameshipment_id. Thecreated_after/created_beforefilters now accept ISO 8601 datetimes and apply on the newcreated_atfield.
v1.5.0
Section titled “v1.5.0”Released: April 2026
New Endpoints
Section titled “New Endpoints”GET /api/v1/orders/delivery- List deliveries (stock arrivals) across all orders with optional date filtering
v1.4.0
Section titled “v1.4.0”Released: March 2026
New Endpoints
Section titled “New Endpoints”GET /api/v1/bill-of-materials- List BOM recipes for all finished goods (JSON or Excel format)GET /api/v1/orders/{id}/consumption- Get raw material consumption per production orderPUT /api/v1/orders/{id}/consumption- Update actual consumption quantities for yield/waste tracking
New Features
Section titled “New Features”- Bill of Materials: Pull BOM recipes showing which raw materials compose each finished good and in what quantities. Supports JSON (paginated) and Excel export formats
- Production Consumption: Query raw material quantities planned and consumed per production order, with automatic variance calculation for yield/waste tracking
- Variance Tracking: Computed
quantity_variancefield on consumption data (positive = loss, negative = better yield)
v1.3.4
Section titled “v1.3.4”Released: March 2026
New Fields
Section titled “New Fields”- SKUs: Added
RE_ORDER_STATUS(re-order status),supplier_name,RECOMMENDED_UNITS_TO_ORDER, andlead_time_toas default response fields across all aggregation levels
New Features
Section titled “New Features”- SKUs: Added
PRODUCTaggregation level to retrieve inventory data aggregated by product
v1.0.0
Section titled “v1.0.0”Released: January 2025
Initial release of the Prediko Public API.
Endpoints
Section titled “Endpoints”GET /api/v1/orders- List ordersGET /api/v1/orders/{id}- Get order detailsPOST /api/v1/orders- Create or update ordersPATCH /api/v1/orders/status- Update order statusDELETE /api/v1/orders/{id}- Delete orderPOST /api/v1/skus- List SKUs (paginated)GET /api/v1/suppliers- List suppliersGET /api/v1/warehouses- List warehouses
Features
Section titled “Features”- Orders:
order_typesfilter includesFINISHED_GOOD,RAW_MATERIAL, andPRODUCTION_ORDERoptions - Orders:
aggregation_levelparameter supportsSKU(aggregated) andSKU_LOCATION(by warehouse) - SKUs:
aggregation_levelparameter supportsSKU(aggregated, default) andSKU_LOCATION(by warehouse) - Pagination: Only the SKUs endpoint is paginated (max 5000 results per page)