Total Apex APItotalapex.com ↗
Retrieve PDF documents, model numbers, manufacturers, and equipment types from the Total Apex beverage equipment document library via a single filterable endpoint.
What is the Total Apex API?
The Total Apex Document Library API exposes a single list_documents endpoint that covers 7,847 PDF documents across 393 pages of beverage and refrigeration equipment records. Each result includes a direct PDF URL, document name, model number, manufacturer name, and equipment type. You can filter by keyword, manufacturer, document type, and equipment category to narrow results to exactly what you need.
curl -X GET 'https://api.parse.bot/scraper/fe8b4be0-09b9-4a8f-b116-b1120c5ce6d5/list_documents?fetch_all=true&manufacturer=Ice-O-Matic&document_type=Manuals' \ -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 totalapex-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.
"""
Total Apex Document Library API Client
Get your API key from: https://parse.bot/settings
"""
import os
import requests
from typing import Optional, Dict, Any
class ParseClient:
"""Client for the Total Apex Document Library API."""
def __init__(self, api_key: Optional[str] = None):
"""Initialize the Parse API client.
Args:
api_key: API key for authentication. If not provided, reads from PARSE_API_KEY env var.
"""
self.base_url = "https://api.parse.bot"
self.scraper_id = "fe8b4be0-09b9-4a8f-b116-b1120c5ce6d5"
self.api_key = api_key or os.getenv("PARSE_API_KEY")
if not self.api_key:
raise ValueError("API key must be provided or set in PARSE_API_KEY environment variable")
def _call(self, endpoint: str, method: str = "POST", **params) -> Dict[str, Any]:
"""Make an API call to the Parse Bot API.
Args:
endpoint: The API endpoint name
method: HTTP method (GET or POST)
**params: Query/body parameters
Returns:
Response JSON as dictionary
"""
url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
headers = {
"X-API-Key": self.api_key,
"Content-Type": "application/json"
}
if method == "GET":
response = requests.get(url, headers=headers, params=params)
elif method == "POST":
response = requests.post(url, headers=headers, json=params)
else:
raise ValueError(f"Unsupported HTTP method: {method}")
response.raise_for_status()
return response.json()
def list_documents(
self,
page: int = 1,
keyword: Optional[str] = None,
manufacturer: Optional[str] = None,
equipment_type: Optional[str] = None,
document_type: Optional[str] = None,
limit: int = 20
) -> Dict[str, Any]:
"""List documents from the Total Apex Document Library.
Args:
page: Page number for pagination (1-indexed)
keyword: Search keyword to filter documents
manufacturer: Filter by manufacturer name
equipment_type: Filter by equipment type
document_type: Filter by document type
limit: Number of results per page
Returns:
Dictionary containing documents list and pagination info
"""
params = {
"page": page,
"limit": limit
}
if keyword:
params["keyword"] = keyword
if manufacturer:
params["manufacturer"] = manufacturer
if equipment_type:
params["equipment_type"] = equipment_type
if document_type:
params["document_type"] = document_type
return self._call("list_documents", method="GET", **params)
def main():
"""Practical workflow example for the Total Apex Document Library API."""
# Initialize the client
client = ParseClient()
print("=" * 80)
print("Total Apex Document Library - Practical Usage Example")
print("=" * 80)
# Workflow 1: Search for Ice-O-Matic ice machine manuals
print("\n[WORKFLOW 1] Searching for Ice-O-Matic ice machine manuals...")
print("-" * 80)
results = client.list_documents(
manufacturer="Ice-O-Matic",
equipment_type="Ice Products",
document_type="Manuals",
limit=5
)
print(f"Found {results['total_items']} total documents matching criteria")
print(f"Showing {results['items_on_page']} documents from page {results['page']} of {results['total_pages']}")
print()
# Process and display the documents
for idx, doc in enumerate(results['documents'], 1):
print(f"Document {idx}:")
print(f" Name: {doc['document_name']}")
print(f" Model: {doc.get('model', 'N/A')}")
print(f" Manufacturer: {doc.get('manufacturer', 'N/A')}")
print(f" Equipment Type: {doc.get('equipment_type', 'N/A')}")
print(f" PDF URL: {doc['pdf_url'][:60]}...")
print()
# Workflow 2: Search by keyword for beverage equipment
print("\n[WORKFLOW 2] Searching for beverage dispensers specifications...")
print("-" * 80)
results = client.list_documents(
keyword="dispenser",
equipment_type="Beverage Equipment",
document_type="Specifications",
limit=3
)
print(f"Found {results['total_items']} documents with keyword 'dispenser'")
print(f"Showing {results['items_on_page']} documents\n")
for idx, doc in enumerate(results['documents'], 1):
print(f"Specification Document {idx}:")
print(f" Name: {doc['document_name']}")
print(f" Model: {doc.get('model', 'N/A')}")
print(f" Manufacturer: {doc.get('manufacturer', 'N/A')}")
print()
# Workflow 3: Collect documents from multiple pages for a specific manufacturer
print("\n[WORKFLOW 3] Collecting Lancer beverage equipment across pages...")
print("-" * 80)
all_documents = []
pages_to_check = 2
for page_num in range(1, pages_to_check + 1):
print(f"Fetching page {page_num}...")
results = client.list_documents(
manufacturer="Lancer",
equipment_type="Beverage Equipment",
page=page_num,
limit=10
)
all_documents.extend(results['documents'])
print(f" Retrieved {results['items_on_page']} documents")
if page_num >= results['total_pages']:
print(f"Reached end of results (page {results['total_pages']})")
break
print(f"\nTotal documents collected: {len(all_documents)}")
print("Documents by type:")
equipment_types = {}
for doc in all_documents:
eq_type = doc.get('equipment_type', 'Unknown')
equipment_types[eq_type] = equipment_types.get(eq_type, 0) + 1
for eq_type, count in equipment_types.items():
print(f" {eq_type}: {count}")
# Workflow 4: Search for refrigeration equipment parts lists
print("\n[WORKFLOW 4] Searching for refrigeration equipment parts lists...")
print("-" * 80)
results = client.list_documents(
equipment_type="Refrigeration Equipment",
document_type="Parts List",
limit=5
)
print(f"Found {results['total_items']} parts list documents")
print(f"Total pages available: {results['total_pages']}")
if results['documents']:
print("\nSample documents:")
manufacturers = set()
for doc in results['documents'][:3]:
manufacturer = doc.get('manufacturer', 'Unknown')
manufacturers.add(manufacturer)
print(f" - {doc['document_name']} ({doc.get('model', 'N/A')})")
print(f"\nManufacturers represented: {', '.join(sorted(manufacturers))}")
print("\n" + "=" * 80)
print("Workflow demonstration complete!")
print("=" * 80)
if __name__ == "__main__":
main()List documents from the Total Apex Document Library with pagination. Returns document PDF URLs, model numbers, manufacturer names, and equipment types. Supports filtering by keyword, manufacturer, equipment type, and document type. Set fetch_all to true to automatically paginate through all pages and return every matching document in a single response.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (1-indexed). Ignored when fetch_all is true. |
| limit | integer | Number of results per page. Ignored when fetch_all is true (uses 100 internally for efficiency). |
| keyword | string | Search keyword to filter documents by name or content. |
| fetch_all | boolean | When true, automatically paginates through all pages and returns every matching document in a single response. When false, returns a single page of results. |
| manufacturer | string | Filter by manufacturer. Accepts exactly one of: Ice-O-Matic, Lancer, Crysalli, FBD, Cornelius, Solventum | 3M, Aquamor, BUNN, DISPENSE-RITE, Flojet, Multiplex, Glastender, Accuflex, LogiCO2, Procon, Taprite, Pentair Shurflo, Watts, Wunder-Bar, Cambro, Grindmaster/Crathco, Thonhauser USA Inc., Elmeco, Gardner Denver Thomas, ICI, Kinetico, McDantim, Nordic, John Guest, UBC Group, Westover Scientific, Wilbur Curtis, Draftec, Ecolab, Kay Chemical, Nu-Calgon, Sunburst, Nexel Racks, CM Becker, Manitowoc, Ugolini, Armaflex, Aether, Everpure, Embraco, Fluid-O-Tech, Haynes Mfg, Imbera, Marathon Electric, Oetiker, Progeral, Rapak, Regal Beloit, Starline, Sterling Pressure Systems, Tecumseh, Tomlinson, Tru-Gap, Wago, Ashcroft/Dresser, Bevex, Newton CFV, Loctite, Pentair Everpure, Schaerer, Crathco, SENCO, California Air Tools, True Manufacturing. |
| document_type | string | Filter by document type. Accepts exactly one of: Other, Specifications, Manuals, Parts List, Manuales, MSDS and Testing Results, MSDS, Service Bulletins, Documentos Adicionales. |
| equipment_type | string | Filter by equipment type. Accepts exactly one of: Ice Products, Beverage Equipment, Videos, Refrigeration Equipment, Food Display & Merchandising Equipment, Food Preparation Equipment. |
{
"type": "object",
"fields": {
"page": "integer, current page number (1 when fetch_all is true)",
"documents": "array of document objects with pdf_url, document_name, model, manufacturer, equipment_type",
"total_items": "integer, total number of matching documents",
"total_pages": "integer, total number of pages available",
"items_on_page": "integer, number of documents returned in this response"
},
"sample": {
"data": {
"page": 1,
"documents": [
{
"model": "85-2308C-110",
"pdf_url": "https://www.totalapex.com/media/amasty/amfile/attach/zKD5Ty9BNlGfDuj2cBUK5ktkLl4f9RQ2.pdf",
"manufacturer": "Lancer",
"document_name": "BEV_DropIn_SS_071816",
"equipment_type": "Beverage Equipment,Videos"
}
],
"total_items": 294,
"total_pages": 3,
"items_on_page": 294
},
"status": "success"
}
}About the Total Apex API
What the API Returns
The list_documents endpoint returns paginated records from the Total Apex beverage equipment document library. Each document object in the documents array includes pdf_url (a direct link to the PDF), document_name, model, manufacturer, and equipment_type. The response also surfaces pagination metadata: page, total_items, total_pages, and items_on_page.
Filtering and Pagination
The endpoint accepts four optional filter parameters. manufacturer accepts specific values including Ice-O-Matic, Lancer, Crysalli, FBD, Cornelius, and Solventum | 3M. document_type accepts values such as Specifications, Manuals, Parts List, Manuales, MSDS, and Other. equipment_type covers categories like Ice Products, Beverage Equipment, Refrigeration Equipment, and Videos. A free-text keyword parameter filters by document name or content. Pagination is controlled by page (1-indexed) and limit parameters.
Coverage Scope
The library covers technical documentation for commercial beverage and refrigeration equipment — primarily spec sheets, service manuals, parts lists, and safety data sheets. The fixed set of supported manufacturers reflects Total Apex's distribution portfolio, so the filter accepts only those exact strings. With nearly 8,000 documents available, systematic traversal using page and limit gives full library coverage.
The Total Apex API is a managed, monitored endpoint for totalapex.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when totalapex.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 totalapex.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 parts lookup tool that maps model numbers to their corresponding Parts List PDFs for a specific manufacturer
- Aggregate all MSDS documents across manufacturers for a safety compliance database
- Index specification sheets by equipment type to power a product comparison tool for commercial refrigeration
- Automate service manual retrieval keyed on model number for a field technician mobile app
- Mirror the full document library locally by paginating through all 393 pages and storing pdf_url references
- Filter Ice-O-Matic manuals by keyword to surface relevant service documentation for a specific unit model
- Populate a vendor portal with up-to-date equipment documentation organized by manufacturer and equipment category
| 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 Total Apex have an official developer API?+
What does the `list_documents` endpoint actually return for each document?+
pdf_url (the direct link to the PDF file), document_name, model (the equipment model number), manufacturer, and equipment_type. Pagination metadata — page, total_items, total_pages, and items_on_page — is returned at the top level of each response.Can I filter documents for more than one manufacturer in a single request?+
manufacturer parameter currently accepts exactly one manufacturer value per request. To retrieve documents across multiple manufacturers, you would make one request per manufacturer. You can fork this API on Parse and revise it to accept multi-value manufacturer filtering.Does the API return document content or full-text extracted from the PDFs?+
pdf_url and document metadata (name, model, manufacturer, equipment type) but does not return extracted text content from inside the PDFs. The keyword filter applies to document names and surface-level content. Full PDF text extraction is not currently covered. You can fork this API on Parse and revise it to add a text-extraction endpoint.Are all manufacturers in the Total Apex catalog available as filter options?+
manufacturer filter supports the set of manufacturers reflected in the Total Apex document library at the time the API was built: Ice-O-Matic, Lancer, Crysalli, FBD, Cornelius, and Solventum | 3M. Manufacturers whose documents sit outside that set are not currently filterable by name. You can fork this API on Parse and revise it to expand manufacturer coverage.