| billing-plan | products | 100 | compare |
| billing-plan | seats | 1 | compare |
| billing-plan | monthlyComparisons | 10000 | compare |
| billing-plan | monthlyAlerts | 0 | compare |
| billing-plan | products | 1000 | insight |
| billing-plan | seats | 10 | insight |
| billing-plan | monthlyComparisons | 100000 | insight |
| billing-plan | monthlyAlerts | 10000 | insight |
| billing-plan | products | 2000 | growth |
| billing-plan | seats | 20 | growth |
| billing-plan | monthlyComparisons | 200000 | growth |
| billing-plan | monthlyAlerts | 20000 | growth |
| billing-plan | products | custom | scale |
| billing-plan | seats | custom | scale |
| billing-plan | monthlyComparisons | custom | scale |
| billing-plan | monthlyAlerts | custom | scale |
| openapi | q | maxLength 200 | listConnectedProducts |
| openapi | limit | min 1 · max 100 | listConnectedProducts |
| openapi | cursor | minLength 20 · maxLength 200 | listConnectedProducts |
| openapi | productId | pattern: ^[A-Za-z0-9_-]{1,200}$ | getConnectedProduct |
| openapi | productId | pattern: ^[A-Za-z0-9_-]{1,200}$ | getConnectedProductHistory |
| openapi | limit | min 1 · max 100 | getConnectedProductHistory |
| openapi | cursor | minLength 20 · maxLength 200 | getConnectedProductHistory |
| openapi | Idempotency-Key | minLength 8 · maxLength 200 | createWebhook |
| openapi | createWebhook.request.url | maxLength 2048 | contract |
| openapi | createWebhook.request.events | minItems 1 · maxItems 1 | contract |
| openapi | createWebhook.request.events[] | enum: watchlist.triggered | contract |
| openapi | Idempotency-Key | minLength 8 · maxLength 200 | updateWebhook |
| openapi | updateWebhook.request.url | maxLength 2048 | contract |
| openapi | updateWebhook.request.events | minItems 1 · maxItems 1 | contract |
| openapi | updateWebhook.request.events[] | enum: watchlist.triggered | contract |
| openapi | Idempotency-Key | minLength 8 · maxLength 200 | deleteWebhook |
| openapi | Idempotency-Key | minLength 8 · maxLength 200 | prepareWebhookSecretRotation |
| openapi | Idempotency-Key | minLength 8 · maxLength 200 | activateWebhookSecretRotation |
| openapi | Idempotency-Key | minLength 8 · maxLength 200 | cancelWebhookSecretRotation |
| openapi | Idempotency-Key | minLength 8 · maxLength 200 | acknowledgeWebhookIncident |
| openapi | limit | min 1 · max 100 | listWebhookDeliveries |
| openapi | offset | min 0 · max 10000 | listWebhookDeliveries |
| openapi | q | minLength 1 · maxLength 120 | searchProducts |
| openapi | limit | min 1 · max 100 | searchProducts |
| openapi | offset | min 0 · max 1000000 | searchProducts |
| openapi | ids | minLength 3 | compareProducts |
| openapi | id | maxItems 4 | compareProducts |
| openapi | canonical_product_id | pattern: ^[a-z0-9_]+$ | getProductComparison |
| openapi | canonical_product_id | pattern: ^[a-z0-9_]+$ | getProductPriceHistory |
| openapi | range | enum: 7d, 30d, 90d, 1y | getProductPriceHistory |
| openapi | store | minLength 2 · maxLength 120 | getProductPriceHistory |
| openapi | limit | min 1 · max 100 | listPriceWatches |
| openapi | offset | min 0 · max 1000000 | listPriceWatches |
| openapi | status | enum: active, paused | listPriceWatches |
| openapi | canonical_product_id | minLength 1 · maxLength 200 | listPriceWatches |
| openapi | Idempotency-Key | minLength 8 · maxLength 200 | createPriceWatch |
| openapi | createPriceWatch.request.canonical_product_id | pattern: ^[a-z0-9_]+$ | contract |
| openapi | createPriceWatch.request.target_price | min 1 · max 1000000 | contract |
| openapi | createPriceWatch.request.channel | enum: email, webhook | contract |
| openapi | createPriceWatch.request.destination | maxLength 254 | contract |
| openapi | createPriceWatch.request.condition | enum: target_price, price_change_percent, below_own_price, availability_change | contract |
| openapi | createPriceWatch.request.change_percent | max 100 | contract |
| openapi | createPriceWatch.request.merchant_sku | minLength 1 · maxLength 200 | contract |
| openapi | updatePriceWatch.request.target_price | min 1 · max 1000000 | contract |
| openapi | updatePriceWatch.request.destination | maxLength 254 | contract |
| openapi | updatePriceWatch.request.status | enum: active, paused | contract |
| openapi | updatePriceWatch.request.expected_revision | min 1 | contract |
| openapi | limit | min 1 · max 100 | listPricingRecommendations |
| openapi | offset | min 0 · max 1000000 | listPricingRecommendations |
| openapi | canonical_product_id | minLength 1 · maxLength 200 | listPricingRecommendations |
| openapi | limit | min 1 · max 100 | listAssortmentOpportunities |
| openapi | offset | min 0 · max 1000000 | listAssortmentOpportunities |
| openapi | canonical_product_id | minLength 1 · maxLength 200 | listAssortmentOpportunities |
| openapi | limit | min 1 · max 100 | listSourcingOptions |
| openapi | offset | min 0 · max 1000000 | listSourcingOptions |
| openapi | canonical_product_id | minLength 1 · maxLength 200 | listSourcingOptions |
| openapi | limit | min 1 · max 100 | listCampaignSignals |
| openapi | offset | min 0 · max 1000000 | listCampaignSignals |
| openapi | canonical_product_id | minLength 1 · maxLength 200 | listCampaignSignals |
| openapi | source_id | minLength 1 · maxLength 200 | putSourceSnapshot |
| openapi | Idempotency-Key | minLength 8 · maxLength 200 | putSourceSnapshot |
| openapi | putSourceSnapshot.request.evidence.source_id | minLength 1 · maxLength 200 | contract |
| openapi | putSourceSnapshot.request.evidence.source_ref | minLength 1 · maxLength 2000 | contract |
| openapi | putSourceSnapshot.request.evidence.market | pattern: ^[A-Z]{2}$ | contract |
| openapi | putSourceSnapshot.request.evidence.currency | pattern: ^[A-Z]{3}$ | contract |
| openapi | putSourceSnapshot.request.evidence.tax_basis | enum: inclusive, exclusive, unknown | contract |
| openapi | putSourceSnapshot.request.products | maxItems 1000 | contract |
| openapi | putSourceSnapshot.request.products[].comparison.product.match_confidence | min 0 · max 1 | contract |
| openapi | putSourceSnapshot.request.products[].comparison.evidence.source_id | minLength 1 · maxLength 200 | contract |
| openapi | putSourceSnapshot.request.products[].comparison.evidence.source_ref | minLength 1 · maxLength 2000 | contract |
| openapi | putSourceSnapshot.request.products[].comparison.evidence.market | pattern: ^[A-Z]{2}$ | contract |
| openapi | putSourceSnapshot.request.products[].comparison.evidence.currency | pattern: ^[A-Z]{3}$ | contract |
| openapi | putSourceSnapshot.request.products[].comparison.evidence.tax_basis | enum: inclusive, exclusive, unknown | contract |
| openapi | putSourceSnapshot.request.products[].history | maxItems 1000 | contract |
| openapi | putSourceSnapshot.request.products[].history[].store | minLength 1 · maxLength 200 | contract |
| openapi | putSourceSnapshot.request.products[].history[].points | maxItems 1000 | contract |
| openapi | putSourceSnapshot.request.products[].history[].points[].item_price | min 0 | contract |
| openapi | putSourceSnapshot.request.products[].history[].points[].delivery_cost | min 0 | contract |
| openapi | putSourceSnapshot.request.products[].history[].points[].delivered_price | min 0 | contract |
| openapi | putSourceSnapshot.request.supplier_offers | maxItems 1000 | contract |
| openapi | putSourceSnapshot.request.supplier_offers[].canonical_product_id | minLength 1 · maxLength 200 | contract |
| openapi | putSourceSnapshot.request.supplier_offers[].supplier_id | minLength 1 · maxLength 200 | contract |
| openapi | putSourceSnapshot.request.supplier_offers[].landed_cost | min 0 | contract |
| openapi | putSourceSnapshot.request.supplier_offers[].minimum_order_quantity | min 1 | contract |
| openapi | putSourceSnapshot.request.supplier_offers[].lead_time_days | min 0 | contract |
| openapi | putSourceSnapshot.request.supplier_offers[].evidence.source_id | minLength 1 · maxLength 200 | contract |
| openapi | putSourceSnapshot.request.supplier_offers[].evidence.source_ref | minLength 1 · maxLength 2000 | contract |
| openapi | putSourceSnapshot.request.supplier_offers[].evidence.market | pattern: ^[A-Z]{2}$ | contract |
| openapi | putSourceSnapshot.request.supplier_offers[].evidence.currency | pattern: ^[A-Z]{3}$ | contract |
| openapi | putSourceSnapshot.request.supplier_offers[].evidence.tax_basis | enum: inclusive, exclusive, unknown | contract |
| openapi | putSourceSnapshot.request.campaign_signals | maxItems 1000 | contract |
| openapi | putSourceSnapshot.request.campaign_signals[].id | minLength 1 · maxLength 200 | contract |
| openapi | putSourceSnapshot.request.campaign_signals[].canonical_product_ids | maxItems 1000 | contract |
| openapi | putSourceSnapshot.request.campaign_signals[].canonical_product_ids[] | minLength 1 · maxLength 200 | contract |
| openapi | putSourceSnapshot.request.campaign_signals[].store | minLength 1 · maxLength 200 | contract |
| openapi | putSourceSnapshot.request.campaign_signals[].description | maxLength 2000 | contract |
| openapi | putSourceSnapshot.request.campaign_signals[].evidence.source_id | minLength 1 · maxLength 200 | contract |
| openapi | putSourceSnapshot.request.campaign_signals[].evidence.source_ref | minLength 1 · maxLength 2000 | contract |
| openapi | putSourceSnapshot.request.campaign_signals[].evidence.market | pattern: ^[A-Z]{2}$ | contract |
| openapi | putSourceSnapshot.request.campaign_signals[].evidence.currency | pattern: ^[A-Z]{3}$ | contract |
| openapi | putSourceSnapshot.request.campaign_signals[].evidence.tax_basis | enum: inclusive, exclusive, unknown | contract |
| openapi | Idempotency-Key | minLength 8 · maxLength 200 | testWebhook |
| openapi | Idempotency-Key | minLength 8 · maxLength 200 | retryWebhookDelivery |
| openapi | Idempotency-Key | minLength 8 · maxLength 200 | importMerchantCatalog |
| openapi | importMerchantCatalog.request.evidence.source_id | minLength 1 · maxLength 200 | contract |
| openapi | importMerchantCatalog.request.evidence.source_ref | minLength 1 · maxLength 2000 | contract |
| openapi | importMerchantCatalog.request.evidence.market | pattern: ^[A-Z]{2}$ | contract |
| openapi | importMerchantCatalog.request.evidence.currency | pattern: ^[A-Z]{3}$ | contract |
| openapi | importMerchantCatalog.request.evidence.tax_basis | enum: inclusive, exclusive, unknown | contract |
| openapi | importMerchantCatalog.request.items | maxItems 1000 | contract |
| openapi | importMerchantCatalog.request.items[].merchant_sku | minLength 1 · maxLength 200 | contract |
| openapi | importMerchantCatalog.request.items[].canonical_product_id | minLength 1 · maxLength 200 | contract |
| openapi | importMerchantCatalog.request.items[].gtin | pattern: ^(\d{8}|\d{12}|\d{13}|\d{14})$ | contract |
| openapi | importMerchantCatalog.request.items[].unit_cost | min 0 | contract |
| openapi | importMerchantCatalog.request.items[].fulfillment_cost | min 0 | contract |
| openapi | importMerchantCatalog.request.items[].delivery_charge | min 0 | contract |
| openapi | importMerchantCatalog.request.items[].current_price | min 0 | contract |
| openapi | importMerchantCatalog.request.items[].minimum_margin_percent | min 0 · max 99 | contract |
| openapi | limit | min 1 · max 100 | getMerchantCoverage |
| openapi | offset | min 0 · max 1000000 | getMerchantCoverage |
| openapi | resolution | enum: matched, ambiguous, unmatched | getMerchantCoverage |
| openapi | resolveProducts.request.items | minItems 1 · maxItems 100 | contract |
| openapi | resolveProducts.request.items[].canonical_product_id | minLength 1 · maxLength 200 | contract |
| openapi | resolveProducts.request.items[].gtin | pattern: ^(\d{8}|\d{12}|\d{13}|\d{14})$ | contract |
| openapi | resolveProducts.request.items[].merchant_sku | minLength 1 · maxLength 200 | contract |
| openapi | getOffersBatch.request.items | minItems 1 · maxItems 100 | contract |
| openapi | getOffersBatch.request.items[].canonical_product_id | minLength 1 · maxLength 200 | contract |
| openapi | getOffersBatch.request.items[].gtin | pattern: ^(\d{8}|\d{12}|\d{13}|\d{14})$ | contract |
| openapi | getOffersBatch.request.items[].merchant_sku | minLength 1 · maxLength 200 | contract |
| openapi | Idempotency-Key | minLength 8 · maxLength 200 | managePriceWatchesBatch |
| openapi | managePriceWatchesBatch.request.items | minItems 1 · maxItems 100 | contract |
| openapi | managePriceWatchesBatch.request.items[].expected_revision | min 1 | contract |
| openapi | managePriceWatchesBatch.request.items[].action | enum: pause, resume, delete | contract |
| sdk-runtime-contract | requestTimeoutMs | 30000 | generated SDKs |
| sdk-runtime-contract | maxRetries | 3 | generated SDKs |
| sdk-runtime-contract | maxWaitMs | 600000 | generated SDKs |
| sdk-runtime-contract | maxPageSize | 100 | generated SDKs |
| sdk-runtime-contract | defaultPageSize | 25 | generated SDKs |
| sdk-runtime-contract | maxResponseBytes | 10485760 | generated SDKs |
| sdk-runtime-contract | webhookMaxAttempts | 8 | generated SDKs |
| sdk-runtime-contract | webhookToleranceSeconds | 300 | generated SDKs |