
Modern REST API integration for Dynamo 3.0
🌐 View DynaFetch Landing Page - Interactive overview with examples and documentation links
DynaFetch is a clean, modern .NET 8 package that brings REST API capabilities to Dynamo 3.0. Built for performance and ease of use, it provides a comprehensive HTTP client with robust JSON processing and enterprise-ready authentication support.
DynaFetch was developed through a collaborative "Vibe Coding" project between TheBIMsider and Claude (Anthropic AI). This partnership combined domain expertise in BIM and construction technology with AI-assisted development to create a modern, efficient REST API package for the Dynamo community.
Development Approach: Iterative development with comprehensive testing, focusing on real-world usage patterns and professional-grade reliability.
Inspiration: DynaFetch is inspired by and builds upon the pioneering work of Radu Gidei and the DynaWeb package:
- DynaWeb Repository: https://github.com/radumg/DynaWeb
- DynaWeb Website: https://radumg.github.io/DynaWeb/
- Radu Gidei's Profile: https://github.com/radumg
DynaWeb established the foundation for REST API integration in Dynamo. DynaFetch continues this legacy with modern .NET 8 architecture, enhanced JSON processing, and streamlined authentication patterns. We're grateful for Radu's contribution to the Dynamo community.
- Open Dynamo 3.0 or later
- Go to Packages → Search for a Package
- Search for "DynaFetch"
- Click Download and restart Dynamo
1. ClientNodes.Create → Creates HTTP client
2. ExecuteNodes.GET(client, "https://api.github.com/users/octocat") → Makes API call
3. JsonNodes.ToDictionary(response) → Converts JSON to Dynamo Dictionary
That's it! You now have GitHub user data as a Dynamo Dictionary.
Create Client → GET Request → Process JSON
Nodes:
ClientNodes.Create()
→ clientExecuteNodes.GET(client, "https://jsonplaceholder.typicode.com/posts/1")
→ responseJsonNodes.ToDictionary(response)
→ dictionary
Result: Post data as Dynamo Dictionary with keys like "userId", "title", "body"
Create Client → Add Authentication → GET Request → Process Response
Nodes:
ClientNodes.Create()
→ clientClientNodes.AddDefaultHeader(client, "Authorization", "Bearer YOUR_TOKEN")
→ clientExecuteNodes.GET(client, "https://httpbin.org/bearer")
→ responseJsonNodes.ToDictionary(response)
→ dictionary
Authentication persists: All subsequent requests from this client automatically include the Bearer token.
Create Client → Build JSON → POST Request → Process Response
Nodes:
ClientNodes.Create()
→ clientJsonNodes.DictionaryToJson(your_dictionary)
→ json_stringExecuteNodes.POST(client, "https://api.example.com/data", json_string)
→ responseJsonNodes.ToDictionary(response)
→ result_dictionary
- Create once, use everywhere: Create a client and reuse it for multiple requests
- Persistent authentication: Add default headers (like API keys) that apply to all requests
- Configuration: Set timeouts, base URLs, and custom headers at the client level
DynaFetch supports modern API authentication:
Bearer Tokens (OAuth/JWT):
ClientNodes.AddDefaultHeader(client, "Authorization", "Bearer " + token)
API Keys:
ClientNodes.AddDefaultHeader(client, "X-API-Key", api_key)
Custom Headers:
ClientNodes.AddDefaultHeader(client, "Custom-Auth", auth_value)
- ToDictionary: Convert API responses to Dynamo Dictionaries
- ToList: Convert JSON arrays to Dynamo Lists
- DictionaryToJson: Convert Dynamo data to JSON for API submission
- Format: Pretty-print JSON for debugging
- Serialize/Deserialize: Advanced JSON operations
DynaFetch includes 22 comprehensive sample graphs organized into three categories for complete learning and reference.
- Start with DynaFetch_Samples - Learn core concepts and basic patterns
- Explore DynaFetched_DynaWeb_Samples - See practical migration examples from DynaWeb
- Reference DynaFetch_Nodes_Groups - Detailed visual documentation of all available nodes
Core functionality demonstrations perfect for learning DynaFetch basics:
- 01_Basic-GET-Request.dyn - Simplest HTTP request pattern using DynaFetch for beginners
- 02_Authenticated-API.dyn - Bearer token authentication with client-level auth setup
- 03_POST-Data-Submission.dyn - Complete structured data submission workflow
- 04_Multi-Step-Workflow.dyn - Complex CRUD operations with authentication
- 05_Error-Handling-Pattern.dyn - Graceful API error handling instead of workflow crashes
- 06_JSON-Processing-Demo.dyn - Multiple JSON processing methods for different response types
- 07_Fun-GET-Random-Ron_Swanson_Quote.dyn - Simple public API demonstration using Ron Swanson Quotes API
Practical migration examples showing DynaWeb to DynaFetch transitions:
- 1 - First-Request-DynaFetch.dyn - DynaWeb to DynaFetch migration of basic HTTP request pattern
- 2 - Simple-Request-DynaFetch.dyn - Recreates DynaWeb's multi-endpoint JSON processing workflow
- 3 - Simple-Request-Benchmarking-DynaFetch.dyn - Comprehensive response analysis with detailed metadata extraction
- 4 - REST-API-Example-DynaFetch.dyn - Complex JSON deserialization with multiple data structure handling
- 5 - REST-API-Advanced-DynaFetch.dyn - Multi-step authenticated API workflow with POST data submission
- 6 - Complex-POST-Request-DynaFetch.dyn - Advanced POST operations with JSON body creation and response processing
- 7 - GET-ACC-Projects-and-Users-DynaFetch.dyn - Modern Autodesk Platform Services integration (updated from legacy Forge)
Complete node documentation organized by functional groups:
- DynaFetch.dyn - Overview of DynaFetch nodes
- DynaFetch_Core.dyn - HTTP client creation and configuration nodes
- DynaFetch_Nodes.dyn - Request execution nodes for GET, POST, PUT, DELETE operations
- DynaFetch_Package_Nodes.dyn - Complete DynaFetch node collection including DynaFetch and System nodes
- DynaFetch_Utilities.dyn - Advanced JSON manipulation and serialization tools
- System.dyn - Overview of System Nodes
- System_Exception.dyn - Exception handling
- System_Net.dyn .NET HttpStatusCode integration nodes
All samples are located in the samples/
folder and can be opened directly in Dynamo. Each sample includes:
- Detailed annotations explaining the workflow
- Color-coded sections for easy navigation
- Real working endpoints for immediate testing
- Progressive complexity from basic to advanced patterns
Recommended Learning Path: Start with Basic-GET-Request, progress through the original samples, then explore migration examples to see practical real-world patterns.
Create()
- Create new HTTP clientCreateWithBaseUrl(baseUrl)
- Create client with base URLSetTimeout(client, seconds)
- Set request timeoutAddDefaultHeader(client, name, value)
- Add persistent headerSetUserAgent(client, userAgent)
- Set client user agent
GET(client, url)
- HTTP GET requestPOST(client, url, jsonData)
- HTTP POST with JSONPUT(client, url, jsonData)
- HTTP PUT with JSONDELETE(client, url)
- HTTP DELETE requestPATCH(client, url, jsonData)
- HTTP PATCH with JSON
ToDictionary(response)
- Response to DictionaryToList(response)
- Response to ListDictionaryToJson(dictionary)
- Dictionary to JSON stringFormat(json)
- Pretty-print JSONIsValid(json)
- Validate JSON syntaxGetContent(response)
- Get raw response text
Use Case: Get weather data, stock prices, public datasets
ClientNodes.Create()
↓
ExecuteNodes.GET(client, "https://api.openweathermap.org/data/2.5/weather?q=London&appid=YOUR_KEY")
↓
JsonNodes.ToDictionary(response)
↓
Extract data: dictionary["main"]["temp"]
Use Case: Submit form data, create records, upload information
ClientNodes.Create()
↓
ClientNodes.AddDefaultHeader(client, "Authorization", "Bearer " + token)
↓
JsonNodes.DictionaryToJson(your_data)
↓
ExecuteNodes.POST(client, "https://api.example.com/records", json_data)
↓
JsonNodes.ToDictionary(response)
Use Case: Login, then perform operations with session
1. POST login credentials → Get auth token
2. Add auth token to client headers
3. GET/POST/PUT operations with authenticated client
4. Process responses with JSON nodes
- Do: Create one client, use for multiple requests
- Don't: Create new client for every request
- Do: Use
AddDefaultHeader
for persistent authentication - Don't: Add auth headers to individual requests
- Check
response.IsSuccessful
before processing JSON - Use
JsonNodes.IsValid()
to validate JSON before parsing - Handle network timeouts with appropriate client timeout settings
- Use
ToDictionary
for JSON objects - Use
ToList
for JSON arrays - Use
Format
for debugging JSON structure
- Node Library Reference - Primary workflow nodes as they appear in Dynamo
- Advanced Node Library - Complete reference including Core, System, and all HTTP status codes
- API Documentation - Complete method reference with parameters and examples
- Best Practices - Security, authentication, performance, and workflow organization
- Migration Guide - Step-by-step transition from DynaWeb to DynaFetch
- Troubleshooting - Problem resolution and common issues
- Installation & Quick Start - Get up and running in 15 minutes
- Basic Examples - Common workflow patterns
- Sample Graphs - Working Dynamo examples for download
"Cannot connect to API"
- Check internet connectivity
- Verify API URL is correct
- Check if API requires authentication
"JSON parsing failed"
- Use
JsonNodes.IsValid()
to check JSON syntax - Use
JsonNodes.GetContent()
to see raw response - Check if API returned error message instead of JSON
"Authentication failed"
- Verify API key/token is correct
- Check authentication header format
- Ensure token hasn't expired
For comprehensive troubleshooting help, see the Troubleshooting Guide.
DynaFetch is open source under the BSD-3-Clause license. Contributions are welcome!
- Clone repository
- Open in VS Code with C# Dev Kit extension
- Ensure .NET 8 SDK installed
- Run tests:
dotnet test
- Use GitHub Issues for bug reports
- Include Dynamo version and sample graph when possible
- Provide API endpoint and expected vs actual behavior
DynaFetch is licensed under the BSD-3-Clause License.
DynaWeb Attribution: This project builds upon patterns and concepts pioneered by Radu Gidei's DynaWeb package. We acknowledge and appreciate the foundational work that made REST API integration possible in Dynamo.
- Documentation: See
docs/
folder for comprehensive guides - Examples: Check
samples/
folder for Dynamo graph examples - Issues: Report bugs and feature requests on GitHub
- Community: Join Dynamo community forums for usage questions
DynaFetch - Modern REST APIs for Modern Dynamo