Workday APIdeveloper.workday.com ↗
Access Workday's full developer docs navigation tree (1200+ pages), retrieve individual guides in Markdown, and search documentation topics via 4 endpoints.
What is the Workday API?
This API exposes four endpoints covering Workday's developer documentation portal, giving programmatic access to a navigation tree of 1200+ pages, full Markdown content for individual docs, title-based search, and the curated homepage sections. The get_documentation_tree endpoint returns every page entry with its title, URL, and slug, while get_doc_page retrieves the complete content and metadata — including categories and keywords — for any single page identified by its slug.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/b2cd46f9-4aac-4f96-9594-256329e52c1b/get_documentation_tree' \ -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 developer-workday-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.
"""
Workday Developer Documentation API Client
Get your API key from: https://parse.bot/settings
"""
import os
import requests
from typing import Any, Dict, List, Optional
class ParseClient:
"""Client for interacting with the Workday Developer Documentation API."""
def __init__(self, api_key: Optional[str] = None):
"""Initialize the Parse API client.
Args:
api_key: API key for authentication. If not provided, uses PARSE_API_KEY env var.
"""
self.base_url = "https://api.parse.bot"
self.scraper_id = "b2cd46f9-4aac-4f96-9594-256329e52c1b"
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 scraper.
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 get_documentation_tree(self) -> Dict[str, Any]:
"""Get the complete documentation navigation tree.
Returns the full flat list of all documentation pages with their titles, URLs, and slugs.
Returns:
Dictionary containing total count and list of page objects
"""
return self._call("get_documentation_tree", method="GET")
def get_doc_page(self, slug: str) -> Dict[str, Any]:
"""Get a specific documentation page by its slug.
Args:
slug: The page identifier slug
Returns:
Dictionary containing page title, metadata, and Markdown content
"""
return self._call("get_doc_page", method="GET", slug=slug)
def search_documentation(self, query: str, limit: int = 20) -> Dict[str, Any]:
"""Search the documentation for pages matching the query.
Args:
query: Search term to match against page titles (case-insensitive)
limit: Maximum number of results to return (default: 20)
Returns:
Dictionary containing search results with matching pages
"""
return self._call("search_documentation", method="GET", query=query, limit=limit)
def get_doc_home(self) -> Dict[str, Any]:
"""Get the documentation homepage configuration.
Returns curated sections, link groups, and recommended pages.
Returns:
Dictionary containing homepage sections with links and groups
"""
return self._call("get_doc_home", method="GET")
def main():
"""Practical workflow example using the Workday Developer Documentation API."""
client = ParseClient()
print("=" * 80)
print("WORKDAY DEVELOPER DOCUMENTATION API - PRACTICAL EXAMPLE")
print("=" * 80)
print("\n1. Getting homepage sections to understand the documentation structure...")
homepage = client.get_doc_home()
print(f" Found {len(homepage['sections'])} main sections:")
for section in homepage['sections']:
print(f" - {section['title']}: {section['description'][:60]}...")
print("\n2. Searching for 'REST API' documentation...")
search_results = client.search_documentation("REST API", limit=5)
print(f" Found {search_results['total_results']} pages matching 'REST API'")
if search_results['results']:
print(" Top results:")
for i, result in enumerate(search_results['results'][:3], 1):
print(f" {i}. {result['title']}")
print(f" Slug: {result['slug']}")
print("\n3. Getting detailed content from the first search result...")
if search_results['results']:
first_result = search_results['results'][0]
slug = first_result['slug']
print(f" Fetching full content for: {first_result['title']}")
page_content = client.get_doc_page(slug)
print(f" Title: {page_content['title']}")
print(f" Categories: {', '.join(page_content['category'][:2])}...")
print(f" Keywords: {', '.join(page_content['keywords'][:3])}...")
print(f" Content preview (first 300 chars):")
print(f" {page_content['content'][:300]}...")
print("\n4. Searching for 'Integration' to find integration-related docs...")
integration_results = client.search_documentation("Integration", limit=3)
print(f" Found {integration_results['total_results']} pages with 'Integration'")
print("\n5. Fetching details for all integration results...")
for result in integration_results['results'][:3]:
print(f"\n Getting: {result['title']}")
page_data = client.get_doc_page(result['slug'])
content_preview = page_data['content'][:200].replace('\n', ' ')
print(f" Preview: {content_preview}...")
print(f" Categories: {page_data['category'][0] if page_data['category'] else 'N/A'}")
print("\n6. Getting glossary page to understand Workday terminology...")
glossary_results = client.search_documentation("Glossary", limit=1)
if glossary_results['results']:
glossary_slug = glossary_results['results'][0]['slug']
glossary_page = client.get_doc_page(glossary_slug)
print(f" Found glossary: {glossary_page['title']}")
print(f" Content preview (first 500 chars):")
print(f" {glossary_page['content'][:500]}")
print("\n" + "=" * 80)
print("WORKFLOW COMPLETE - Successfully demonstrated API functionality")
print("=" * 80)
if __name__ == "__main__":
main()Get the complete documentation navigation tree as a flat list of all pages with their titles, URLs, and slugs. Returns approximately 1200+ documentation page entries covering Integration Apps, Extend Apps, Workday APIs, and Developer Copilot.
No input parameters required.
{
"type": "object",
"fields": {
"pages": "array of objects with title, url, and slug",
"total": "integer"
},
"sample": {
"pages": [
{
"url": "/wcp_docs/relnotes_dl.html",
"slug": "relnotes_dl",
"title": "Documentation Release Notes"
},
{
"url": "/wcp_docs/GUID-1293c9bb-ea02-48cd-a523-254b5060b3a6-enHYPHENus.html",
"slug": "GUID-1293c9bb-ea02-48cd-a523-254b5060b3a6-enHYPHENus",
"title": "Getting Started with Integration Apps"
}
],
"total": 1257
}
}About the Workday API
Documentation Tree and Page Content
get_documentation_tree returns a flat list of all documentation pages across Workday's developer portal, covering Integration Apps, Extend Apps, Workday APIs, and Developer Copilot. Each entry in the pages array includes a title, url, and slug, with the total field reporting the full count (typically 1200+). Once you have a slug, pass it to get_doc_page to retrieve the full page: the response includes title, layout, content (the page body in Markdown), and metadata arrays for category and keywords. Slugs follow formats like dlx1529688880052 or GUID-style strings such as GUID-1293c9bb-ea02-48cd-a523-254b5060b3a6-enHYPHENus.
Search and Homepage Sections
search_documentation accepts a required query string and performs a case-insensitive substring match against page titles across the full documentation tree. An optional limit parameter caps the number of results returned. Each result in the results array mirrors the tree format: title, url, and slug. The total_results field reflects how many titles matched.
get_doc_home requires no inputs and returns the homepage configuration as an array of sections, each with a title, description, and nested link_groups. The three sections — Get Started, Apps, and Extend Services — surface curated entry points into the documentation and are useful for building navigation UIs or orientation tools on top of the Workday developer portal.
The Workday API is a managed, monitored endpoint for developer.workday.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when developer.workday.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 developer.workday.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 an internal search tool that indexes all 1200+ Workday doc pages using titles and slugs from
get_documentation_tree - Sync Workday API reference content into a private knowledge base by fetching Markdown from
get_doc_pagefor each slug - Surface contextually relevant documentation links in a developer IDE extension using
search_documentationwith keyword queries - Generate an onboarding guide by pulling the 'Get Started' section links from
get_doc_home - Create a documentation diff tool that tracks changes to specific pages over time by storing
contentfields fromget_doc_page - Classify and tag Workday docs by topic using the
categoryandkeywordsmetadata returned fromget_doc_page
| 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 Workday have an official developer API?+
What does `search_documentation` match against, and can I search by content body?+
search_documentation matches the query string against page titles only, using a case-insensitive substring comparison. Full-text search across page body content is not currently covered. The API returns titles, URLs, and slugs for matching pages. You can fork it on Parse and revise to add content-body search using data from get_doc_page.Does `get_doc_page` return versioned or historical documentation?+
Can I retrieve documentation for a specific Workday product area only?+
get_documentation_tree endpoint returns all pages as a flat list without server-side filtering by product area such as Integration Apps or Workday APIs. You can filter client-side using the category metadata returned by get_doc_page, but endpoint-level filtering by product area is not currently supported. You can fork it on Parse and revise to add a category filter parameter.What slug formats does `get_doc_page` accept?+
dlx1529688880052 and GUID-style strings like GUID-1293c9bb-ea02-48cd-a523-254b5060b3a6-enHYPHENus. Both formats are returned in the slug field from get_documentation_tree and search_documentation results and can be passed directly to get_doc_page.