Public Open API
The Patcher Public Open API is live at https://api.patcher.xyz/v1 for reading catalogue data from Patcher.
Every catalogue request requires an API key. There is no anonymous catalogue API access.
The source-of-truth OpenAPI document tracks the live implementation:
What the API is for
Use the Public Open API to read Patcher catalogue data:
modules
manufacturers
standards
tags
Available endpoints
GET /v1/modules
List modules with pagination, sorting, sparse fields, and module filters.
GET /v1/modules/{id}
Read one module by ID.
GET /v1/manufacturers
List manufacturers.
GET /v1/manufacturers/{id}
Read one manufacturer by ID.
GET /v1/standards
List standards.
GET /v1/tags
List tags.
Module, manufacturer, and tag IDs are positive integers. Standard IDs are nonnegative integers because 0 is valid and means 3U. The standard filter accepts 0; manufacturer_id and tag filter values must be positive integers.
The catalogue data is published under CC BY 4.0. If you use it in an app, website, dataset, or generated output, include attribution to Patcher.
What is not included
The API does not expose:
public patches or public racks
panel image filenames or panel image URLs
price data or store listings
anonymous catalogue access
bulk export downloads
Bulk JSONL export is planned as a key-required feature, but it is deferred. Public patch and rack endpoints are also deferred.
Authentication
Every catalogue request requires an API key:
Keys use the wire format Bearer pk_live_<22_base64url_chars>. The examples below use environment variable placeholders only; never paste a real key into public docs, client-side source, screenshots, issue reports, or shared logs.
API keys will be created from the existing Patcher User Area, but that app release is still pending. Until self-service key creation is deployed, only already issued keys can call the API.
Quickstart
Start with the module list:
Request only the fields you need:
Sparse fields apply to top-level fields. The id field is always retained in sparse field responses.
Quotas and rate limits
The free tier allows:
5,000 requests per month
60 requests per minute
Partner tier access may be granted manually. There is no anonymous tier and no paid tier.
Quota and rate limit headers are calculated per API key. Shared cache hits still authenticate the request and count against that key's quota.
X-RateLimit-Limit-Month
Monthly request limit for the key.
X-RateLimit-Remaining-Month
Requests remaining in the current monthly window.
X-RateLimit-Limit-Minute
Per-minute request limit for the key.
X-RateLimit-Remaining-Minute
Requests remaining in the current minute window.
X-RateLimit-Reset
Start timestamp of the current minute window.
Retry-After
Seconds to wait before retrying after a 429 response.
Pagination
List endpoints use cursor pagination.
limitdefaults to50.limitcan be at most100.cursors are opaque; do not parse or construct them
pass the returned cursor back exactly as received
Example:
Sample list response:
Sorting
List endpoints support ascending sort by:
nameid
Example:
Filtering modules
GET /v1/modules supports these filters:
manufacturer_idhpstandardtag
Examples:
Tag records can include a type. Its value is one of nature, character, voice, source, filter, modulation, effect, sequencing, utility, blank, or null.
q is reserved for future search support. In the current implementation it returns a 400 error with the code unsupported_parameter.
Includes
Detail and list responses can include related top-level data where supported.
Modules support:
insoutstagspanels
Example:
Manufacturer detail supports:
modules
Example:
Caching with ETags
Responses support ETag and If-None-Match.
HEAD requests are supported for checking response headers without downloading a response body.
If the data has not changed, the API can return 304 Not Modified. The request still authenticates and counts against the API key's quota.
Errors
Errors use this shape:
Keep the request_id when reporting a problem.
Status
error.code
Meaning
400
unknown_parameter, invalid_parameter, unsupported_parameter
The request contains an unknown, invalid, reserved, or unsupported parameter.
401
missing_authorization, malformed_authorization, invalid_key
The API key is missing, malformed, or not accepted. Revoked and unknown credentials both return invalid_key.
404
not_found
The requested resource does not exist.
429
rate_limit_exceeded
The key exceeded a monthly or per-minute quota. Check Retry-After.
503
configuration_error, authentication_unavailable, quota_unavailable, origin_unavailable
The API is temporarily unavailable or not fully configured.
Endpoint examples
List modules
Get one module
List manufacturers
Get one manufacturer
List standards
List tags
Roadmap notes
The current API intentionally excludes write operations, public patches, public racks, bulk JSONL export, panel image file URLs, and commercial listing data. The API is designed around catalogue reads first; new endpoint families will be documented here and in the OpenAPI spec when they are ready.
Related pages
Last updated