Orchestral Tools APIorchestraltools.com ↗
Access the Orchestral Tools catalog via API. Browse instruments, collections, and bundles by genre, series, and price. Get specs, highlights, and pricing data.
What is the Orchestral Tools API?
The Orchestral Tools API provides 7 endpoints for querying the orchestraltools.com product catalog of virtual instruments, sample libraries, collections, and bundles. Using get_all_products, you can filter by genre, series, product type, and maximum EUR price across paginated results. Each product object exposes fields including title, price_eur, type, series, genres, slug, and url, with deeper metadata available via get_product_details.
curl -X GET 'https://api.parse.bot/scraper/6769fe36-75e0-47c7-b812-38aaabf0646e/get_all_products?page=1&type=instrument&genre=Strings&query=*&series=Berlin+Strings&price_max=500' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace orchestraltools-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Orchestral Tools SDK — browse catalog, check pricing, manage cart."""
from parse_apis.orchestral_tools_api import OrchestralTools, ProductType, ProductNotFound
client = OrchestralTools()
# Browse available filter options to see what genres and series exist.
filters = client.filters.get()
print("Available genres:", ", ".join(opt.label for opt in filters.genres[:5]))
# Search for string instruments under €200.
for product in client.products.search(type=ProductType.INSTRUMENT, genre="Strings", price_max=200, limit=3):
print(f"{product.title} — €{product.price_eur} ({product.series})")
# Fetch full details for a specific product by slug, then check its price.
detail = client.products.get(slug="berlin-strings")
pricing = detail.price()
print(f"{detail.title}: {pricing.price} cents (base {pricing.base}), Kontakt: {pricing.has_kontakt}")
# Add the product to a guest cart.
cart = detail.add_to_cart()
print(f"Cart errors: {cart.errors}, messages: {cart.messages}")
# List all bundles available in the catalog.
for bundle in client.products.bundles(limit=3):
print(f"Bundle: {bundle.title} — €{bundle.price_eur}")
# Explore free instruments from SINEfactory.
for inst in client.freeinstruments.list(limit=3):
print(f"Free: {inst.title} — {inst.sub_title}")
# Handle a product that doesn't exist.
try:
client.products.get(slug="nonexistent-product-xyz")
except ProductNotFound as exc:
print(f"Product not found: {exc.slug}")
print("Exercised: products.search, products.get, product.price, product.add_to_cart, products.bundles, freeinstruments.list, filters.get")
Full-text search across the Orchestral Tools product catalog with optional filters for type, genre, series, and price. Returns paginated results ordered by relevance. Each product summary exposes a slug for detail lookup. Server-side filtering is limited to the declared params; finer filtering is client-side over the returned list.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (1-based). |
| type | string | Filter by product type. |
| genre | string | Filter by genre. Values from get_filter_options genres (e.g. Strings, Brass, Woodwinds, Percussion, Piano, Choir, Epic, Full Orchestra). |
| query | string | Search query for product titles and descriptions. Use * for all products. |
| series | string | Filter by product series. Values from get_filter_options series (e.g. Berlin Strings, Metropolis Ark, Artist Series). |
| price_max | number | Maximum price in EUR to filter by. |
{
"type": "object",
"fields": {
"page": "integer, current page number",
"total": "integer, total number of matching products",
"products": "array of product summary objects with id, store_id, slug, title, sub_title, price_eur, type, series, genres, studio, url, and other metadata"
},
"sample": {
"data": {
"page": 1,
"total": 796,
"products": [
{
"id": "3045",
"url": "https://www.orchestraltools.com/metropolis-ark-3?t=instruments",
"slug": "metropolis-ark-3",
"type": "instrument",
"title": "Low Brass",
"genres": [
"Brass"
],
"series": "Metropolis Ark",
"studio": "Teldex Scoring Stage",
"store_id": "3472",
"price_eur": 41,
"sub_title": null,
"product_id": "OT-0003045"
}
]
},
"status": "success"
}
}About the Orchestral Tools API
Catalog Search and Filtering
get_all_products is the primary catalog endpoint. It accepts filters for type (instrument, collection, or bundle), genre, series, query, and price_max in EUR, and returns paginated results with a total count alongside an array of product objects. Valid genre and series values — such as Strings, Brass, Berlin Strings, or Metropolis Ark — are discoverable via get_filter_options, which returns label/value pairs for genres, series, and studios. Use the value field from those results directly as filter parameters.
Product Details and Pricing
get_product_details accepts a slug (e.g. berlin-strings, metropolis-ark-3) and returns the full product record: specs (file size, system requirements, supported formats), highlights (an array of feature strings from the product page), description, series, and price_eur. Critically, it also returns hub_product_id, which is required by both get_price and add_to_cart. The get_price endpoint takes that ID and returns base and price in cents, has_kontakt (boolean), product_type, and is_user_price — useful for detecting sale pricing or user-account-specific tiers.
Bundles, Free Instruments, and Cart
get_bundles retrieves all current bundles with their metadata including price_eur, series, and description. get_free_instruments returns free offerings from SINEfactory and other free-tier products — each object includes title, sub_title, slug, url, image, and a price_eur of 0. The add_to_cart POST endpoint accepts a product name and store_id (the hub_product_id) and returns the resulting cart state, including any errors and messages arrays.
The Orchestral Tools API is a managed, monitored endpoint for orchestraltools.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when orchestraltools.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official orchestraltools.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a price-tracking tool that monitors EUR prices for specific instruments using
get_priceand alerting on changes betweenbaseandprice. - Generate a filterable catalog UI for orchestral libraries by series and genre using
get_all_productsandget_filter_options. - Aggregate all free virtual instruments available on orchestraltools.com via
get_free_instrumentsfor a curated free-tools directory. - Extract system requirements and supported formats for every product in a series using
get_product_detailsspecs field. - Compare bundle contents and pricing against individual instrument prices by combining
get_bundleswithget_product_detailsfor each child instrument. - Automate cart population for a custom storefront or purchasing workflow using
add_to_cartwith hub_product_ids fromget_product_details. - Surface Kontakt compatibility data across the catalog by checking
has_kontaktfromget_priceresponses.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Orchestral Tools have an official developer API?+
What does get_product_details return beyond what get_all_products provides?+
get_product_details returns the full specs object (file size, system requirements, supported formats), a highlights array, description, and the hub_product_id needed for get_price and add_to_cart. For collection-type products, it also returns an all_instruments array listing child instruments. The catalog endpoint get_all_products returns lighter metadata without specs or highlights.How do I get valid values for the genre and series filters in get_all_products?+
get_filter_options first. It returns arrays of objects with label and value fields for genres, series, and studios. Use the value string from those results as the genre or series parameter in get_all_products. The values are backtick-wrapped strings that must match exactly.