{"openapi":"3.1.0","info":{"title":"pjespjes.com Kosovo PC product search","version":"v1","description":"Read-only product search and price comparison for PC hardware tracked across participating Kosovo stores. Prices are in EUR and every result includes a citation-ready pjespjes.com URL."},"x-service-info":{"categories":["search","data","developer-tools"],"docs":{"homepage":"https://pjespjes.com/agents","developerPortal":"https://pjespjes.com/docs","apiReference":"https://pjespjes.com/agent-api/v1/openapi.json","llms":"https://pjespjes.com/llms.txt"},"versioning":{"strategy":"URL path versioning","current":"v1","policy":"https://pjespjes.com/developers/versioning","deprecationSignals":["Deprecation","Sunset","Link: rel=deprecation"]}},"servers":[{"url":"https://pjespjes.com/agent-api/v1"}],"security":[{},{"bearerAuth":[]},{"oauth2":["catalog.read"]}],"tags":[{"name":"Catalog","description":"Search and inspect the latest published catalog."},{"name":"Planning","description":"Generate deterministic build plans from the latest published catalog."}],"paths":{"/":{"get":{"operationId":"getAgentApiInfo","tags":["Catalog"],"summary":"Get agent API links and usage rules","responses":{"200":{"description":"Agent API metadata","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/search":{"get":{"operationId":"searchProducts","tags":["Catalog"],"summary":"Search Kosovo PC products","description":"Use q for natural-language queries such as 'ryzen 5 7600 in Kosovo' or 'cheapest ryzen 5 7600 in Kosovo'. Search covers participating stores only.","x-payment-info":{"protocol":"x402","scheme":"exact","network":"eip155:84532","price":"$0.01","currency":"USD","description":"Agent-native HTTP payment. The runtime PAYMENT-REQUIRED challenge is authoritative."},"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":160}},{"name":"category","in":"query","schema":{"type":"string","example":"CPU"}},{"name":"sort","in":"query","schema":{"type":"string","enum":["relevance","price_asc","price_desc","newest"]}},{"name":"inStockOnly","in":"query","schema":{"type":"boolean","default":true}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":25,"default":10}},{"name":"cursor","in":"query","description":"Opaque cursor returned as nextCursor. It is bound to the query, category, sort, and stock filter.","schema":{"type":"string","maxLength":512}}],"responses":{"200":{"description":"Matching products","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"400":{"description":"Invalid search input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"A structured agent API error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment Required (x402)"},"429":{"description":"Rate limit exceeded. Retry after the Retry-After header.","headers":{"Retry-After":{"schema":{"type":"integer"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"}},"RateLimit-Limit":{"schema":{"type":"string","example":"60;w=60"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}},"RateLimit-Policy":{"schema":{"type":"string","example":"60;w=60"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"A structured agent API error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/builds":{"get":{"operationId":"listBuilds","tags":["Catalog"],"summary":"List curated budget PC builds with live prices","description":"Curated complete builds (Budget/Entry/Mid/High tiers) with live per-part prices, totals, and canonical part URLs. Use this when asked to build or plan a PC for a budget in Kosovo — never estimate prices from global pricing.","x-payment-info":{"protocol":"x402","scheme":"exact","network":"eip155:84532","price":"$0.01","currency":"USD","description":"Agent-native HTTP payment. The runtime PAYMENT-REQUIRED challenge is authoritative."},"responses":{"200":{"description":"Curated builds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildsResponse"}}}},"401":{"description":"A structured agent API error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment Required (x402)"},"429":{"description":"Rate limit exceeded. Retry after the Retry-After header.","headers":{"Retry-After":{"schema":{"type":"integer"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"}},"RateLimit-Limit":{"schema":{"type":"string","example":"60;w=60"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}},"RateLimit-Policy":{"schema":{"type":"string","example":"60;w=60"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"A structured agent API error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/build-plan":{"post":{"operationId":"createBuildPlan","tags":["Planning"],"summary":"Create a deterministic PC build plan","description":"Return one recommended build plus bounded alternatives per required category using the latest published Kosovo catalog. Prices are live catalog values in EUR; missing prices are reported rather than estimated. This operation never changes the browser shared build. Send Prefer: respond-async for a 202 acknowledgement with a pollable job status URL.","x-payment-info":{"protocol":"x402","scheme":"exact","network":"eip155:84532","price":"$0.01","currency":"USD","description":"Agent-native HTTP payment. The runtime PAYMENT-REQUIRED challenge is authoritative."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildPlanRequest"}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Optional client-generated key. Build planning is read-only and deterministic; the key is echoed on the response so safe retries can be correlated.","schema":{"type":"string","minLength":8,"maxLength":128}},{"name":"Prefer","in":"header","required":false,"description":"Set to respond-async to receive 202 Accepted with a pollable job status URL instead of waiting for the build plan.","schema":{"type":"string","example":"respond-async"}}],"responses":{"200":{"description":"Deterministic build plan","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildPlanResponse"}}}},"202":{"description":"Build-plan job accepted for asynchronous processing.","headers":{"Location":{"schema":{"type":"string","format":"uri"}},"Preference-Applied":{"schema":{"type":"string","example":"respond-async"}},"Retry-After":{"schema":{"type":"integer","example":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AsyncBuildPlanJob"}}}},"400":{"description":"Invalid build-plan input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"A structured agent API error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment Required (x402)"},"429":{"description":"Rate limit exceeded. Retry after the Retry-After header.","headers":{"Retry-After":{"schema":{"type":"integer"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"}},"RateLimit-Limit":{"schema":{"type":"string","example":"60;w=60"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}},"RateLimit-Policy":{"schema":{"type":"string","example":"60;w=60"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"A structured agent API error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/jobs/{id}":{"get":{"operationId":"getBuildPlanJob","tags":["Planning"],"summary":"Poll an asynchronous build-plan job","description":"Poll the statusUrl returned by POST /build-plan with Prefer: respond-async. A succeeded job includes the same BuildPlanResponse returned by the synchronous operation; jobs expire after a bounded retention period.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^pjp_job_"}}],"responses":{"200":{"description":"Current asynchronous job state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AsyncBuildPlanJob"}}}},"401":{"description":"A structured agent API error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Job not found or expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the Retry-After header.","headers":{"Retry-After":{"schema":{"type":"integer"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"}},"RateLimit-Limit":{"schema":{"type":"string","example":"60;w=60"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}},"RateLimit-Policy":{"schema":{"type":"string","example":"60;w=60"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/batch":{"post":{"operationId":"batchRead","tags":["Catalog"],"summary":"Execute bounded read-only catalog operations in one request","description":"Accepts an array of GET operations for search, product, offer, comparison, or curated-build reads. No operation mutates data. The optional Idempotency-Key is echoed for safe client retries.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Optional client-generated key. Build planning is read-only and deterministic; the key is echoed on the response so safe retries can be correlated.","schema":{"type":"string","minLength":8,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchRequest"}}}},"responses":{"200":{"description":"Per-operation read results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchResponse"}}}},"400":{"description":"Invalid batch request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"A structured agent API error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment Required (x402)"},"429":{"description":"Rate limit exceeded. Retry after the Retry-After header.","headers":{"Retry-After":{"schema":{"type":"integer"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"}},"RateLimit-Limit":{"schema":{"type":"string","example":"60;w=60"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}},"RateLimit-Policy":{"schema":{"type":"string","example":"60;w=60"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"A structured agent API error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/sandbox":{"get":{"operationId":"getSandboxInfo","tags":["Catalog"],"summary":"Describe the safe read-only sandbox contract","responses":{"200":{"description":"Sandbox metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Sandbox"}}}},"401":{"description":"A structured agent API error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the Retry-After header.","headers":{"Retry-After":{"schema":{"type":"integer"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"}},"RateLimit-Limit":{"schema":{"type":"string","example":"60;w=60"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}},"RateLimit-Policy":{"schema":{"type":"string","example":"60;w=60"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/products/{id}":{"get":{"operationId":"getProduct","tags":["Catalog"],"summary":"Get one product and its current offers","x-payment-info":{"protocol":"x402","scheme":"exact","network":"eip155:84532","price":"$0.01","currency":"USD","description":"Agent-native HTTP payment. The runtime PAYMENT-REQUIRED challenge is authoritative."},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Product detail","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductResponse"}}}},"401":{"description":"A structured agent API error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment Required (x402)"},"404":{"description":"Product not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the Retry-After header.","headers":{"Retry-After":{"schema":{"type":"integer"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"}},"RateLimit-Limit":{"schema":{"type":"string","example":"60;w=60"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}},"RateLimit-Policy":{"schema":{"type":"string","example":"60;w=60"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"A structured agent API error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/products/{id}/offers":{"get":{"operationId":"getOffers","tags":["Catalog"],"summary":"Compare current store offers for a product","x-payment-info":{"protocol":"x402","scheme":"exact","network":"eip155:84532","price":"$0.01","currency":"USD","description":"Agent-native HTTP payment. The runtime PAYMENT-REQUIRED challenge is authoritative."},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Current store offers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OffersResponse"}}}},"401":{"description":"A structured agent API error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment Required (x402)"},"404":{"description":"Product not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the Retry-After header.","headers":{"Retry-After":{"schema":{"type":"integer"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"}},"RateLimit-Limit":{"schema":{"type":"string","example":"60;w=60"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}},"RateLimit-Policy":{"schema":{"type":"string","example":"60;w=60"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"A structured agent API error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/compare":{"get":{"operationId":"compareProducts","tags":["Catalog"],"summary":"Compare up to eight products","x-payment-info":{"protocol":"x402","scheme":"exact","network":"eip155:84532","price":"$0.01","currency":"USD","description":"Agent-native HTTP payment. The runtime PAYMENT-REQUIRED challenge is authoritative."},"parameters":[{"name":"ids","in":"query","required":true,"description":"Comma-separated product IDs, maximum 8.","schema":{"type":"string","example":"123,456"}}],"responses":{"200":{"description":"Product comparison","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareResponse"}}}},"400":{"description":"Invalid product IDs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"A structured agent API error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment Required (x402)"},"404":{"description":"Product not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the Retry-After header.","headers":{"Retry-After":{"schema":{"type":"integer"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"}},"RateLimit-Limit":{"schema":{"type":"string","example":"60;w=60"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"}},"RateLimit-Policy":{"schema":{"type":"string","example":"60;w=60"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"A structured agent API error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"agent-api-key"},"oauth2":{"type":"oauth2","description":"OAuth 2.0 client credentials for read-only catalog access.","flows":{"clientCredentials":{"tokenUrl":"https://pjespjes.com/oauth/token","scopes":{"catalog.read":"Read-only access to the public PC catalog and offers."}}}}},"schemas":{"Offer":{"type":"object","required":["id","store","storeName","price","currency","availability","retailerUrl","pjespjesUrl","englishUrl","lastUpdated"],"properties":{"id":{"type":"integer","minimum":1},"store":{"type":"string"},"storeName":{"type":"string"},"price":{"type":["number","null"]},"currency":{"type":["string","null"],"example":"EUR"},"availability":{"type":"string","enum":["in_stock","out_of_stock"]},"retailerUrl":{"type":"string","format":"uri"},"pjespjesUrl":{"type":"string","format":"uri"},"englishUrl":{"type":"string","format":"uri"},"lastUpdated":{"type":["string","null"],"format":"date-time"}}},"Product":{"type":"object","required":["id","name","category","categorySlug","brand","model","price","currency","availability","inStock","dataConfidence","dataWarning","pjespjesUrl","englishUrl","retailerUrl","offers","lastUpdated"],"properties":{"id":{"type":"integer","minimum":1},"name":{"type":"string"},"category":{"type":"string"},"categorySlug":{"type":"string"},"brand":{"type":["string","null"]},"model":{"type":["string","null"]},"price":{"type":["number","null"]},"currency":{"type":["string","null"],"example":"EUR"},"availability":{"type":"string","enum":["in_stock","out_of_stock"]},"inStock":{"type":"boolean"},"dataConfidence":{"type":"string","enum":["confirmed","fallback"]},"dataWarning":{"type":["string","null"]},"pjespjesUrl":{"type":"string","format":"uri"},"englishUrl":{"type":"string","format":"uri"},"retailerUrl":{"type":["string","null"],"format":"uri"},"offers":{"type":"array","items":{"$ref":"#/components/schemas/Offer"}},"lastUpdated":{"type":["string","null"],"format":"date-time"},"specs":{"type":"object","additionalProperties":true}}},"Catalog":{"type":"object","required":["releaseId","generatedAt","country","market","currency","participatingStoreCount","participatingStores","coverageNote","freshnessNote"],"properties":{"releaseId":{"type":"string"},"degraded":{"type":"boolean","description":"True when serving from the container filesystem fallback; prices may be stale until the published release is reachable."},"generatedAt":{"type":"string","format":"date-time"},"country":{"type":"string","enum":["XK"]},"market":{"type":"string","example":"Kosovo"},"currency":{"type":"string","enum":["EUR"]},"participatingStoreCount":{"type":"integer"},"participatingStores":{"type":"array","items":{"type":"object","required":["id","name"],"properties":{"id":{"type":"string"},"name":{"type":"string"}}}},"coverageNote":{"type":"string"},"freshnessNote":{"type":"string"}}},"SearchResponse":{"type":"object","required":["schemaVersion","query","catalog","results","totalMatches","returned","truncated","nextCursor","hasMore"],"properties":{"schemaVersion":{"type":"integer","example":1},"query":{"type":"object","additionalProperties":true},"catalog":{"$ref":"#/components/schemas/Catalog"},"results":{"type":"array","items":{"$ref":"#/components/schemas/Product"}},"totalMatches":{"type":"integer"},"returned":{"type":"integer"},"truncated":{"type":"boolean"},"nextCursor":{"type":["string","null"],"description":"Opaque cursor for the next page, or null when there are no more results."},"hasMore":{"type":"boolean"},"suggestions":{"type":"array","description":"Present when totalMatches is 0: canonical category pages plus budget-build pointers.","items":{"$ref":"#/components/schemas/Suggestion"}}}},"Suggestion":{"type":"object","required":["type","name","url","description"],"properties":{"type":{"type":"string","enum":["category","model","builds","builder"]},"name":{"type":"string"},"url":{"type":"string","format":"uri"},"description":{"type":"string"}}},"BuildPart":{"type":"object","required":["category","categorySlug","productId","name","price","currency","inStock","available","dataConfidence","dataWarning","lastUpdated","pjespjesUrl","englishUrl"],"properties":{"category":{"type":"string"},"categorySlug":{"type":"string"},"productId":{"type":"integer"},"name":{"type":["string","null"],"description":"Null when this curated part is absent from the current catalog release."},"price":{"type":["number","null"]},"currency":{"type":["string","null"]},"inStock":{"type":"boolean"},"available":{"type":"boolean","description":"True only when the part has a meaningful name, live price, and in-stock offer."},"dataConfidence":{"type":["string","null"],"enum":["confirmed","fallback",null]},"dataWarning":{"type":["string","null"]},"lastUpdated":{"type":["string","null"],"format":"date-time"},"pjespjesUrl":{"type":"string","format":"uri"},"englishUrl":{"type":"string","format":"uri"}}},"Build":{"type":"object","required":["id","name","budgetTier","total","currency","partCount","missingPartCount","complete","outOfStockPartCount","readyToBuy","parts","pageUrl","builderUrl"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"budgetTier":{"type":"string","enum":["Budget","Entry","Mid","High"]},"total":{"type":["number","null"],"description":"Sum of priced parts; partial when complete is false."},"currency":{"type":["string","null"]},"partCount":{"type":"integer"},"missingPartCount":{"type":"integer","description":"Parts with no meaningful name or live price in the current release."},"complete":{"type":"boolean","description":"True when every required part has a meaningful name and live price."},"outOfStockPartCount":{"type":"integer","description":"Resolved parts that are currently out of stock."},"readyToBuy":{"type":"boolean","description":"True only when every required part is complete and currently in stock."},"parts":{"type":"array","items":{"$ref":"#/components/schemas/BuildPart"}},"pageUrl":{"type":"string","format":"uri"},"builderUrl":{"type":"string","format":"uri"}}},"BuildsResponse":{"type":"object","required":["schemaVersion","catalog","builds"],"properties":{"schemaVersion":{"type":"integer","example":1},"catalog":{"$ref":"#/components/schemas/Catalog"},"builds":{"type":"array","items":{"$ref":"#/components/schemas/Build"}}}},"BuildPlanRequest":{"type":"object","additionalProperties":false,"required":["useCase"],"properties":{"budget":{"type":["number","null"],"exclusiveMinimum":0,"maximum":100000,"description":"Optional maximum budget in EUR."},"useCase":{"type":"string","enum":["gaming","workstation","productivity","budget"]},"requirements":{"type":"string","maxLength":400},"preferences":{"type":"object","additionalProperties":false,"properties":{"cpuBrand":{"type":"string","minLength":1,"maxLength":80},"gpuBrand":{"type":"string","minLength":1,"maxLength":80},"memoryType":{"type":"string","minLength":1,"maxLength":80},"platform":{"type":"string","minLength":1,"maxLength":80},"storageType":{"type":"string","minLength":1,"maxLength":80},"notes":{"type":"string","minLength":1,"maxLength":240}}},"buildSnapshot":{"type":"object","additionalProperties":false,"properties":{"CPU":{"type":"integer","minimum":1},"GPU":{"type":"integer","minimum":1},"RAM":{"type":"integer","minimum":1},"MOTHERBOARD":{"type":"integer","minimum":1},"STORAGE":{"type":"integer","minimum":1},"PSU":{"type":"integer","minimum":1},"CASE":{"type":"integer","minimum":1},"COOLING":{"type":"integer","minimum":1}}},"inStockOnly":{"type":"boolean","default":true},"maxAlternatives":{"type":"integer","minimum":0,"maximum":3,"default":2}}},"BuildPlanPart":{"type":"object","required":["category","categorySlug","productId","name","price","currency","availability","inStock","dataConfidence","availableStoreCount","storeCoverage","lastUpdated","productUrl","pjespjesUrl","englishUrl","selectionReason"],"properties":{"category":{"type":"string"},"categorySlug":{"type":"string"},"productId":{"type":"integer","minimum":1},"name":{"type":"string"},"price":{"type":["number","null"]},"currency":{"type":["string","null"],"example":"EUR"},"availability":{"type":"string","enum":["in_stock","out_of_stock"]},"inStock":{"type":"boolean"},"dataConfidence":{"type":"string","enum":["confirmed","fallback"]},"dataWarning":{"type":["string","null"]},"availableStoreCount":{"type":"integer","minimum":0},"storeCoverage":{"type":"array","maxItems":16,"items":{"type":"string"}},"lastUpdated":{"type":["string","null"],"format":"date-time"},"productUrl":{"type":"string","format":"uri"},"pjespjesUrl":{"type":"string","format":"uri"},"englishUrl":{"type":"string","format":"uri"},"selectionReason":{"type":"string","maxLength":240}}},"BuildPlanAlternative":{"type":"object","required":["category","productId","name","price","currency","availability","dataConfidence","reason"],"properties":{"category":{"type":"string"},"productId":{"type":"integer","minimum":1},"name":{"type":"string"},"price":{"type":["number","null"]},"currency":{"type":["string","null"],"example":"EUR"},"availability":{"type":"string","enum":["in_stock","out_of_stock"]},"dataConfidence":{"type":"string","enum":["confirmed","fallback"]},"reason":{"type":"string","maxLength":240}}},"BuildPlanCompatibility":{"type":"object","required":["state","hardBlockCount","warningCount","issues"],"properties":{"state":{"type":"string","enum":["compatible","warning","incompatible"]},"hardBlockCount":{"type":"integer","minimum":0},"warningCount":{"type":"integer","minimum":0},"issues":{"type":"array","maxItems":16,"items":{"type":"object","required":["ruleId","title","state","message","parts"],"properties":{"ruleId":{"type":"string"},"title":{"type":"string"},"state":{"type":"string","enum":["warning","incompatible"]},"message":{"type":"string"},"parts":{"type":"array","maxItems":8,"items":{"type":"string"}}}}}}},"BuildPlan":{"type":"object","required":["status","parts","totalPrice","currency","budget","withinBudget","overBudgetBy","pricedPartsCount","slotCount","missingCategories","warnings","rationale","alternatives"],"properties":{"status":{"type":"string","enum":["complete","partial"]},"parts":{"type":"array","maxItems":8,"items":{"$ref":"#/components/schemas/BuildPlanPart"}},"totalPrice":{"type":["number","null"]},"currency":{"type":["string","null"],"example":"EUR"},"budget":{"type":["number","null"]},"withinBudget":{"type":["boolean","null"]},"overBudgetBy":{"type":["number","null"]},"pricedPartsCount":{"type":"integer","minimum":0,"maximum":8},"slotCount":{"type":"integer","minimum":0,"maximum":8},"missingCategories":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","maxItems":12,"items":{"type":"string","maxLength":240}},"rationale":{"type":"array","maxItems":8,"items":{"type":"string","maxLength":240}},"alternatives":{"type":"array","maxItems":24,"items":{"$ref":"#/components/schemas/BuildPlanAlternative"}}}},"BuildPlanResponse":{"type":"object","required":["schemaVersion","request","catalog","release","plan","compatibility","citations"],"properties":{"schemaVersion":{"type":"integer","example":1},"request":{"$ref":"#/components/schemas/BuildPlanRequest"},"catalog":{"$ref":"#/components/schemas/Catalog"},"release":{"type":"object","required":["id","generatedAt","freshness","degraded"],"properties":{"id":{"type":"string"},"generatedAt":{"type":"string","format":"date-time"},"freshness":{"type":"string"},"degraded":{"type":"boolean"}}},"plan":{"$ref":"#/components/schemas/BuildPlan"},"compatibility":{"$ref":"#/components/schemas/BuildPlanCompatibility"},"citations":{"type":"array","maxItems":16,"items":{"type":"object","required":["productId","category","source","title","url"],"properties":{"productId":{"type":"integer","minimum":1},"category":{"type":"string"},"source":{"type":"string","enum":["pjespjes","retailer"]},"title":{"type":"string"},"url":{"type":"string","format":"uri"}}}}}},"AsyncBuildPlanJob":{"type":"object","required":["schemaVersion","job"],"properties":{"schemaVersion":{"type":"integer","example":1},"job":{"type":"object","required":["id","status","statusUrl","resultUrl","createdAt","updatedAt","expiresAt"],"properties":{"id":{"type":"string","pattern":"^pjp_job_"},"status":{"type":"string","enum":["queued","running","succeeded","failed"]},"statusUrl":{"type":"string","format":"uri"},"resultUrl":{"type":"string","format":"uri"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"result":{"$ref":"#/components/schemas/BuildPlanResponse"},"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"resolution":{"type":"string"}}}}}}},"ProductResponse":{"type":"object","required":["schemaVersion","catalog","product"],"properties":{"schemaVersion":{"type":"integer","example":1},"catalog":{"$ref":"#/components/schemas/Catalog"},"product":{"$ref":"#/components/schemas/Product"}}},"OffersResponse":{"type":"object","required":["schemaVersion","catalog","productId","productUrl","offers"],"properties":{"schemaVersion":{"type":"integer","example":1},"catalog":{"$ref":"#/components/schemas/Catalog"},"productId":{"type":"integer"},"productUrl":{"type":"string","format":"uri"},"offers":{"type":"array","items":{"$ref":"#/components/schemas/Offer"}}}},"CompareResponse":{"type":"object","required":["schemaVersion","catalog","products","cheapestProductId","cheapestOffer"],"properties":{"schemaVersion":{"type":"integer","example":1},"catalog":{"$ref":"#/components/schemas/Catalog"},"products":{"type":"array","items":{"$ref":"#/components/schemas/Product"}},"cheapestProductId":{"type":["integer","null"]},"cheapestOffer":{"anyOf":[{"$ref":"#/components/schemas/Offer"},{"type":"null"}]}}},"BatchRequest":{"type":"object","additionalProperties":false,"required":["operations"],"properties":{"operations":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"object","additionalProperties":false,"required":["path"],"properties":{"method":{"type":"string","enum":["GET"],"default":"GET"},"path":{"type":"string","description":"Relative Agent API path such as /search?q=rtx+4070 or /products/123."}}}}}},"BatchResponse":{"type":"object","required":["schemaVersion","readOnly","results"],"properties":{"schemaVersion":{"type":"integer","example":1},"readOnly":{"type":"boolean","const":true},"results":{"type":"array","items":{"type":"object","required":["index","ok"],"properties":{"index":{"type":"integer","minimum":0},"ok":{"type":"boolean"},"data":{},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"Sandbox":{"type":"object","required":["schemaVersion","mode","baseUrl","productionDataAccess","writesEnabled","supportedOperations"],"properties":{"schemaVersion":{"type":"integer"},"name":{"type":"string"},"mode":{"type":"string","const":"sandbox"},"baseUrl":{"type":"string","format":"uri"},"productionDataAccess":{"type":"boolean","const":false},"writesEnabled":{"type":"boolean","const":false},"paymentRequired":{"type":"boolean"},"description":{"type":"string"},"recommendedProbe":{"type":"string","format":"uri"},"supportedOperations":{"type":"array","items":{"type":"string"}},"documentation":{"type":"string","format":"uri"}}},"Error":{"type":"object","required":["schemaVersion","error"],"properties":{"schemaVersion":{"type":"integer","example":1},"error":{"type":"object","required":["code","message","resolution","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"resolution":{"type":"string"},"requestId":{"type":"string"}}}}}}}}