This skill provides a step-by-step method to answer APS-related questions by navigating the documentation portal. ## Behavior 1. When a user's first question is ambiguous or broad, ask one short clarifying question to identify their intent before diving into a long answer. 2. Always provide reference links with your answers. 3. Always attempt to answer APS-related questions directly. 4. Tailor depth to the visitor: **Business** gets summaries & ROI, **Builder** gets step-by-step, **Developer** gets REST schemas & auth flows. Ask if unsure. --- # Method: How to Answer an APS Question Follow these steps in order. Each step feeds into the next. ## Step 1 — Read the Glossary to Decode Jargon The glossary below covers the acronyms and terms used across APS docs. Read it first so you can understand the API names, endpoints, and concepts you'll encounter. If the question mentions an acronym you don't see here, note it and look for its definition in the docs you fetch later. ### APS Glossary - **APS**: Autodesk Platform Services (formerly Forge) - **ACC**: Autodesk Construction Cloud - **BIM 360**: Legacy construction management platform (predecessor to ACC) - **MD**: Model Derivative API — translates design files into viewable formats (SVF/SVF2) - **DM**: Data Management API — manages files, folders, and storage (OSS, BIM 360, ACC hubs) - **URN**: Base64-encoded resource identifier used across APS APIs - **SVF/SVF2**: Scalable Viewing Format — optimized 3D web viewing format produced by Model Derivative and consumed exclusively by the APS Viewer SDK, similar concept to glTF format with openCTM compression - **OSS**: Object Storage Service — APS cloud storage for uploading design files - **Webhook**: Server-to-server callback triggered by APS events (e.g., model translation complete, file version added) - **2LO/3LO**: Two-legged / three-legged OAuth authentication flows - **Hub**: Top-level container in Data Management (maps to an ACC or BIM 360 account) - **Manifest**: Translation status and output metadata from Model Derivative - **ACAD**: AutoCAD — Autodesk's flagship 2D/3D CAD drafting software (produces .dwg files) - **Civil**: Autodesk Civil 3D — civil engineering design software for infrastructure projects - **Revit**: Autodesk Revit — BIM software for architecture, structure, and MEP design (produces .rvt files) - **Build**: Autodesk Build — construction management module within ACC (field management, cost, etc.) - **IFC**: Industry Foundation Classes — open standard file format for BIM data exchange between tools - **RFI**: Request for Information — formal question submitted during construction, tracked in ACC/BIM 360 - **SSA**: Secure Service Accounts — service-level authentication for server-to-server APS access - **AEC**: Architecture, Engineering, and Construction — the industry vertical APS primarily serves - **AECDM**: AEC Data Model API — unified API for accessing design and construction data across ACC - **DX**: Data Exchange — API for exchanging design data between applications in a neutral format - **Auth**: Authentication — APS OAuth flows including 2LO, 3LO, PKCE, PAT (Personal Access Tokens), and SSA **Translation Cost (Model Derivative API):** Complex jobs are Revit (.rvt), IFC, and Navisworks (.nwd/.nwc). Everything else is a simple job. --- ## Step 2 — Identify the Relevant APIs Use the source table below to determine which APS API documentation covers the question. For example: - *"file changes"* → Data Management API (`data_v2`) for OSS/BIM 360 file events, ACC API (`acc_v1`) for ACC document events - *"model translate"* → Model Derivative API (`model-derivative_v2`) - *"digital twin"* → Tandem (`tandem_v1`) - *"events/callbacks"* → Webhooks API (`webhooks_v1`) is the umbrella system, but specific events are documented under each API's webhook reference | Source ID | API Title | |---|---| | `acc_v1.json` | Autodesk Construction Cloud APIs | | `aecdatamodel_v1.json` | AEC Data Model API | | `applications_v1.json` | Application Management API | | `bim360_v1.json` | BIM 360 API | | `buildingconnected_v2.json` | BuildingConnected & TradeTapp APIs | | `data_v2.json` | Data Management API | | `dataviz_v1.json` | Data Visualization | | `design-automation_v3.json` | Automation API | | `dx-sdk-beta_v7.2.0.json` | Data Exchange .NET SDK v7.2.0 | | `fdxgraph_v1.json` | Data Exchange GraphQL | | `flow_graph_engine_v1.json` | Flow Graph Engine | | `forma_v1.json` | Forma API (Beta) | | `informed-design_v1.json` | Informed Design API (Beta) | | `insights_v1.json` | Business Success Plan Reporting API | | `mfgdataapi_v3.json` | Manufacturing Data Model API | | `model-derivative_v2.json` | Model Derivative API | | `oauth_v2.json` | Authentication API | | `parameters_v1.json` | Parameters API | | `profile_v2.json` | User Profile API | | `ssa_v1.json` | Secure Service Account API | | `sustainability_v3.json` | Sustainability Data API | | `tandem_v1.json` | Tandem Data | | `tokenflex_v1.json` | Token Flex Usage Data API | | `vaultdataapi_v2.json` | Vault Data API | | `viewer_v7.json` | Viewer | | `webhooks_v1.json` | Webhooks API | --- ## Step 3 — Build a Breadcrumb from the TOC Each API source has a JSON Table-of-Contents at: ``` https://developer.doc.config.autodesk.com/bPlouYTd/{source_id} ``` Use `jq` to navigate the TOC and find the pages you need. The TOC is structured as a tree of `children` nodes, each with `display_name`, `url_path`, and optionally a `source` field (the CDN path to the HTML page). ### Navigate the TOC tree ```bash # List top-level sections of an API curl -sL "https://developer.doc.config.autodesk.com/bPlouYTd/webhooks_v1.json" | jq '.children[] | {display_name, url_path}' # Drill into a section curl -sL "https://developer.doc.config.autodesk.com/bPlouYTd/webhooks_v1.json" | jq '.children[] | select(.url_path == "developers_guide").children[] | {display_name, url_path, source}' # Find all pages with their CDN source paths (recursive) curl -sL "https://developer.doc.config.autodesk.com/bPlouYTd/webhooks_v1.json" | jq '[.. | objects | select(.source? and .url_path?)] | .[] | {display_name, url_path, source}' # Find pages whose name suggests "file change" or "document" events curl -sL "https://developer.doc.config.autodesk.com/bPlouYTd/webhooks_v1.json" | jq '[.. | objects | select(.source? and .display_name?)] | .[] | select(.display_name | test("file|document|version|item|folder"; "i")) | {display_name, source}' ``` ### URL structure - **TOC JSON**: `https://developer.doc.config.autodesk.com/bPlouYTd/{source}.json` where `{source}` is a source ID from the Step 2 table - **Static HTML pages**: `https://developer.doc.autodesk.com/bPlouYTd/{path_from_toc}` (the `source` field from each TOC node) - **APS Portal page**: the human-readable documentation on `aps.autodesk.com` (JavaScript SPA — do not scrape) ### Converting a Static CDN URL to an APS Portal URL When you need to generate a clickable link for the user: 1. **Strip the repo-slug** — the first path segment after `bPlouYTd/` (always has a numeric suffix, e.g. `A360-platform-viewing-docs-master-633741`). 2. **The api-name is the next segment** — e.g. `model-derivative`, `design-automation`. 3. **Remove any duplicate api-name** — the api-name sometimes appears again deeper in the path. If it does, remove that duplicate folder. 4. **Strip `.html`** from the page filename and add a trailing `/`. 5. **Prepend** `https://aps.autodesk.com/en/docs/`. Examples: | Static CDN path (after `bPlouYTd/`) | Portal URL | |---|---| | `…-633741/model-derivative/v2/reference/http/model-derivative/formats-GET.html` | `https://aps.autodesk.com/en/docs/model-derivative/v2/reference/http/formats-GET/` | | `…-636116/design-automation/v3/reference/http/design-automation/activities-GET.html` | `https://aps.autodesk.com/en/docs/design-automation/v3/reference/http/activities-GET/` | | `…-633590/aecdatamodel/v1/developers_guide/overview.html` | `https://aps.autodesk.com/en/docs/aecdatamodel/v1/developers_guide/overview/` | Note: the duplicate api-name folder does not always exist — simpler paths like `aecdatamodel/v1/developers_guide/overview.html` have no duplicate. Only remove it if the api-name appears as a path segment again after `{version}/`. --- ## Step 4 — Get headings to understand page structure (MANDATORY — run this first) **Do not skip this step.** Before extracting any content, determine what kind of page you are looking at. Run this command first on every page you fetched from the TOC: ```bash curl -sL "https://developer.doc.autodesk.com/bPlouYTd/{source_path}" | htmlq -r 'script, style' --text 'h1, h2, h3, h4' ``` This reveals the page structure (a reference table, a tutorial, an overview, a list of events, etc.) and tells you which extraction approach to use in the following steps. --- ## Step 5 — Retrieve visible text from a page Run this after Step 4. Use this to get the full visible text content of a page: ```bash curl -sL "https://developer.doc.autodesk.com/bPlouYTd/{source_path}" | htmlq -r 'script, style, noscript' --text '*' ``` --- ## Step 6 — Extract specific sections (optional) Only run this if Step 5 did not capture enough detail. Choose the selector(s) that match the content type you identified in Step 4: ```bash # Get paragraphs and list items (main content) curl -sL "https://developer.doc.autodesk.com/bPlouYTd/{source_path}" | htmlq -r 'script, style' --text 'p, li' # Get code samples (endpoint URLs, request/response bodies) curl -sL "https://developer.doc.autodesk.com/bPlouYTd/{source_path}" | htmlq -r 'script, style' --text 'pre, code' # Get tables (parameter tables, status codes, response fields) curl -sL "https://developer.doc.autodesk.com/bPlouYTd/{source_path}" | htmlq -r 'script, style' --text 'table, th, td, tr' ``` **Deduplication requirement:** HTML tables often produce duplicated text because `