Dynaparts API and AI agents

Dynaparts (dynaparts.fr) is a French online store for performance and motorsport car parts, operated by JDM Distribution in Pessac, France, since 2011: about 27,000 parts, including the Dynaparts range. This page is for developers and AI agents (research, shopping or comparison assistants): public read-only API, Markdown pages and machine-readable files.

Terms of use: automated collection prohibited

When to use Dynaparts

  • Find a performance part for a given vehicle or engine: downpipe, exhaust system, intake, intercooler, hoses, turbo, suspension, EGR delete kit, engine parts, oils and maintenance products.
  • Look up a part by manufacturer reference (Milltek, Scorpion, Forge Motorsport, APR, Racingline, ST Suspensions, Eibach, BMC…) or by Dynaparts reference (DP-…).
  • Give the price in euros (VAT included), availability and estimated delivery date in France before recommending a purchase.
  • Send the user to customer service for uncertain fitment or engine remapping (REPROG by Dynaparts).
  • Send professionals (garages, tuners, resellers, online shops) to JDM Distribution, the wholesaler that runs Dynaparts: trade prices, bulk orders and live stock with a trade account (trade sign-up).

Recommended flow: search with searchProducts, check the product with getProduct, then give the user the product url, where ordering and payment happen (the API does not place orders).

Quick start

curl -s "https://dynaparts.fr/api/v1/products/search?q=downpipe+golf+7&limit=3&lang=en"
curl -s "https://dynaparts.fr/api/v1/products/166784?lang=en"

No key, no account, no cookie. UTF-8 JSON responses; prices in euros, VAT included, for France; amounts as decimal strings ("1101.28").

Endpoints

Base URL: https://dynaparts.fr/api/v1. Full typed description, ready for function calling: openapi.json (OpenAPI 3.1); API catalog (RFC 9727): /.well-known/api-catalog.

Method and pathoperationIdPurpose
GET /api/v1/products/searchsearchProductsSearch parts by keyword, vehicle, engine code or reference
GET /api/v1/products/{id}getProductProduct: price, availability, delivery, description, images, schema.org data
GET /api/v1getApiIndexAPI index: endpoints, limits and links
ParameterTypeDescription
qstring, required2 to 100 characters: part name, vehicle, engine code or manufacturer reference
langfr, en, es, it, deLanguage of names and links (fr by default)
limitinteger 1 to 50Results per page (10 by default)
pageinteger 1 to 20Result page (1 by default); links.next gives the next one
{
  "query": "downpipe golf 7",
  "corrected_query": null,
  "lang": "en",
  "page": 1,
  "limit": 3,
  "total": 37,
  "results": [
    {
      "id": 166784,
      "reference": "SSXAU200",
      "name": "…",
      "brand": "Milltek",
      "url": "https://dynaparts.fr/en/…/166784-….html",
      "image": "https://dynaparts.fr/352129-large_default/….jpg",
      "price": { "amount": "1101.28", "regular_amount": "1295.63", "currency": "EUR", "tax_included": true },
      "availability": { "status": "InStock", "available_from": null, "estimated_delivery_date": "2026-10-27" }
    }
  ],
  "links": { "self": "…", "next": "…", "html": "https://dynaparts.fr/en/research?search_query=downpipe+golf+7" }
}

Illustrative example: actual values change with prices and stock.

Get a product

GET /api/v1/products/{id}?lang=en returns the search fields plus description (plain text), images, gtin, mpn, category, shipping (mainland France: rate, handling and transit time in business days), return_policy (14 days, return by mail at the customer's expense), rating and schema_org (schema.org Product object, identical to the product page JSON-LD).

Availability and delivery

  • InStock: in stock at Dynaparts, ships within 0 to 1 business day.
  • BackOrder: can be ordered, being restocked; available_from gives the expected shipping date.
  • OutOfStock: cannot be ordered.

estimated_delivery_date is the estimated delivery date in mainland France with standard delivery, as shown on the product page. Free standard delivery from 250 € in mainland France (excluding Corsica); see the terms of sale (French).

Authentication

None: the API is public, anonymous and read-only. It returns what a signed-out visitor sees on the website, never customer data.

Rate limits and automated collection

Per IP address (IPv6: per /64), API and Markdown pages together:

VisitorVerified AI agent or search engine
Requests per minute / hour / day30 / 300 / 1,000300 / 3,000 / 20,000
Products returned per day1,50030,000
Distinct product pages per day2005,000
Beyondminute: 429 and Retry-After; hour, day or products: address blocked for 6 hours, then 24 hours, then 7 days on repeat (temporarily_blocked)429 and Retry-After, never blocked

Verified agents: addresses from the official ranges published by OpenAI (GPTBot, ChatGPT-User, OAI-SearchBot), Google, Bing, Perplexity, Apple, DuckDuckGo and Meta, plus the Anthropic block (ClaudeBot, Claude-User) registered at ARIN, updated daily; a robot name (User-Agent) alone is not enough. Every response tells you where you stand (draft-ietf-httpapi-ratelimit-headers fields, plus their older form):

RateLimit-Policy: "minute";q=30;w=60, "hour";q=300;w=3600, "day";q=1000;w=86400
RateLimit: "minute";r=29;t=42
RateLimit-Limit: 30
RateLimit-Remaining: 29
RateLimit-Reset: 42

Reuse results you already have instead of repeating the same request. Professionals and price monitoring: bulk or continuous access to prices, stock and delivery data is the paid professional API of JDM Distribution, developer.jdm-distribution.fr; automated collection of the website is prohibited (terms).

Unverified clients also share daily quotas: per hosting network (all addresses of a server provider together) and overall (rate_limited). Verified agents are not subject to them.

Errors

Errors use application/problem+json (RFC 9457): type (link to this page), title, status, detail, instance, plus code (stable, test this one), hint (how to fix it) and documentation.

{
  "type": "https://dynaparts.fr/fr/agents-ia#error-invalid-parameter",
  "title": "Invalid parameter",
  "status": 400,
  "detail": "q must contain between 2 and 100 characters.",
  "instance": "/api/v1/products/search?q=a",
  "code": "invalid_parameter",
  "hint": "Pass a part name, vehicle, engine code or manufacturer reference in q (2 to 100 characters), e.g. ?q=downpipe+golf+7. …",
  "documentation": "https://dynaparts.fr/fr/agents-ia",
  "invalid_params": [{ "name": "q", "reason": "must contain between 2 and 100 characters" }]
}
StatuscodeMeaning and fix
400missing_parameterRequired parameter missing (q): add it.
400invalid_parameterValue out of range or malformed: see invalid_params.
404not_foundUnknown path: see the endpoint list above.
404product_not_foundProduct missing, removed or not public: search again.
405method_not_allowedRead-only API: GET or HEAD only (Allow header).
401authentication_required/api/… outside /api/v1 is the store's private webservice (key required): use /api/v1, public and keyless.
429rate_limitedQuota reached: wait Retry-After seconds.
429temporarily_blockedAutomated collection detected: address blocked (6 h, 24 h, then 7 days). Bulk access: professional API of JDM Distribution.
500internal_errorServer error: retry later, then contact support.
503search_unavailableSearch engine temporarily unavailable: retry after Retry-After.

Markdown pages

Every public page of the website (home, categories, products, information pages) is available in Markdown for agents: send Accept: text/markdown to the usual page URL (content negotiation, Content-Type: text/markdown and Vary: Accept in the response), or add ?format=md. A missing page answers 404 with a Markdown body and links to continue. Product pages start with their key facts: reference, brand, price, availability, delivery.

curl -sL -H "Accept: text/markdown" https://dynaparts.fr/en/
curl -s "https://dynaparts.fr/en/content/4-who-is-dynaparts?format=md"

Machine-readable files

Contact

Professionals (catalog feed, live stock, trade prices): JDM Distribution and its trade API developer.jdm-distribution.fr.

Questions about the API: [email protected], +33 5 35 00 43 59 (Monday to Friday, 9:00 - 12:30 and 13:30 - 17:00 Paris time) or the contact form.