Skip to content
Peptilyze
Docs menu

Docs

API overview

Read-only JSON over HTTPS. No key. Credit Peptilyze when you show the data and respect the rate limits.

Base URL

Base URL
https://peptilyze.com/api/v1
  • Methods: GET, HEAD, OPTIONS. Anything else is 405.
  • CORS is open: any origin may call the API from a browser.
  • No authentication. Send a User-Agent that names your application.
  • Machine description: /api/v1/openapi.json (OpenAPI 3.1).
EndpointReturns
GET /compoundsEvery compound with at least one offer
GET /compounds/{slug}One compound with all its offers
GET /shopsListed shops with statistics
GET /shops/{id}One shop with all its offers
GET /marketMarket summary numbers

Response envelope

Every successful answer has the same three keys:

  • attribution: the credit to show. See attribution.
  • generatedAt: when the underlying hourly snapshot was made (ISO 8601, UTC).
  • pricing: the currency and VAT basis of every price in data, plus the exchange rate and its date when converted.
  • data: the payload documented per endpoint.
Envelope
{
  "attribution": {
    "required": true,
    "text": "Data: Peptilyze (peptilyze.com)",
    "url": "https://peptilyze.com/",
    "license": "CC BY 4.0",
    "licenseUrl": "https://creativecommons.org/licenses/by/4.0/",
    "terms": "https://peptilyze.com/docs/attribution/"
  },
  "generatedAt": "2026-11-09T13:00:54.150Z",
  "pricing": { "currency": "USD", "vat": "excluded", "eurRate": 1.0873, "rateDate": "2026-11-09", "rateSource": "European Central Bank euro foreign exchange reference rates" },
  "data": { }
}

Conventions

  • Prices are EUR including VAT by default. ?currency= and ?vat=excluded change that; pricing in every answer says what was used. Rounded for output: 2 decimals per pack or unit, 4 per mg.
  • Field names are camelCase. A null means unknown, never zero. See data and caveats.
  • Compound slugs and shop ids are the ones in the page URLs. They are stable; a shop that closes disappears from the API but keeps its page.
  • Lists are complete, not paged: the catalog is a few hundred rows.

Currency and VAT

Every endpoint that returns prices takes the same two optional query parameters.

ParameterValuesDefault
currencyan ISO 4217 code: EUR, one the ECB publishes (USD, GBP, CHF, CAD, AUD, JPY, SEK and more), or one of a short list of others served from community rates (AED, SAR and more). A wrong code returns the full list.EUR
vatincluded, excludedincluded
shipan ISO 3166-1 country code, for example DEnone
US dollars, without VAT
curl 'https://peptilyze.com/api/v1/compounds/bpc-157?currency=USD&vat=excluded'

ship works like the site's “Ship to” choice: compound and market numbers leave out shops that state they do not ship to that country, and shops that do not say stay in. The answer lists them in shipTo.excludedShops and counts the unconfirmed ones in shipTo.unconfirmedShops. Shop objects always stay complete and carry shipsTo and, with ship, ships.

See Data and caveats for how conversion and the VAT basis work and what they do not tell you.

Errors

StatusMeaning
400A bad currency (not a supported code), vat (not included or excluded) or ship (not a two-letter country code) value.
404Unknown path, slug or id.
405A method other than GET, HEAD or OPTIONS.
429Rate limit. Wait Retry-After seconds. See rate limits.
503Data, or exchange rates for a non-EUR request, temporarily unavailable. Retry after Retry-After seconds, or use currency=EUR.

Errors are JSON and never cached:

Error body
{ "error": "Not found.", "docs": "https://peptilyze.com/docs/api/" }

Versioning

Within version 1, changes only add fields, so ignore fields you do not know. (Before 2026-11-09 price fields carried an Eur suffix; they are now currency-neutral, and pricing says which currency applies.) A breaking change would ship as /api/v2, with v1 kept for a notice period.