{"endpoint":"GraphQL","description":"Read-only access to a PrestaShop store: catalogue, prices, stock, categories and policies. Failures arrive as typed UserError values inside each payload, so a client can branch on a code rather than parse prose. Pagination follows the Relay connection pattern. Nothing here writes, so every operation is safe to retry.","usage":"POST a JSON body of {\"query\": \"...\", \"variables\": {}}.","introspection":"Open. Send the standard introspection query.","schema_sdl":"https://prestashop.justidea.dev/graphql/schema.graphql","example":"{ shop { name currency productCount } products(first: 2) { nodes { id name price { amount currency } } pageInfo { endCursor hasNextPage } userErrors { code message } } }","deprecation_policy":"Additive changes — new types, fields and enum members — may land at any time. A field being retired is marked with the @deprecated directive, carrying the reason and its replacement, and keeps working for at least 180 days after that. Breaking changes get a new endpoint version rather than being applied in place. Responses carry API-Version, and a retired version would additionally carry Deprecation and Sunset headers (RFC 8594, RFC 9745).","idempotency":"Every operation this schema exposes is a read, so every one of them is idempotent by construction: repeating a query returns the same answer and changes nothing. There are no mutations, so there is no client-supplied mutation id to carry and no request to deduplicate. Retry freely, including after a timeout. The one operation on this store that creates something is REST — POST /v1/register — and it takes an Idempotency-Key header, echoed back as Idempotency-Replayed.","async_jobs":"None, by design. Every field resolves against the shop database inside the request, and the schema exposes nothing slow enough to need a job queue — the largest response is a page of products. So there is no job type to poll, no subscription for progress, and no operation that returns before its work is done. If a query is too large to answer at once, page it with the Relay cursor rather than expecting it to complete in the background.","pagination":"Relay connections: pass first/after, read pageInfo.hasNextPage and pageInfo.endCursor, then pass that cursor as after. Cursors are opaque.","error_model":"Typed. Every payload carries userErrors[] with a stable code and a human message; the top-level errors array is reserved for malformed documents."}