API Overview
The InForm API provides comprehensive programmatic access to the platform's capabilities, enabling custom integrations, automated workflows, and extended functionality.
API Architecture​
RESTful Design​
The InForm API follows REST principles with:
- Resource-based URLs: Clear, predictable endpoint structure
- HTTP Methods: GET, POST, PUT, DELETE for different operations
- JSON Payloads: Standardized data exchange format
- HTTP Status Codes: Standard response codes for error handling
Base URL Structure​
https://api.inform.arup.com/v1/
Authentication​
All API requests require authentication via:
- Azure Active Directory: Enterprise authentication
- Bearer Tokens: JWT tokens for API access
- API Keys: Service-to-service authentication (limited scope)
Core API Endpoints​
Authentication & Authorization​
- Authentication API: Login, token management, permissions
- User Management: Profile information, team membership
- Access Control: Project permissions, role-based access
Project Management​
- Projects API: Create, configure, and manage projects
- Model Deployment: Upload and configure Grasshopper models
- Version Control: Manage model versions and deployments
Parametric Exploration​
- Parameter API: Define and manage design parameters
- Evaluation API: Execute parametric models with parameter sets
- Results API: Retrieve geometry, analysis results, and metrics
Analysis & Computation​
- Analysis API: Integration with computational analysis
- Performance Metrics: Calculate and retrieve performance data
- Optimization: Multi-objective optimization and constraint handling
Visualization & UI​
- Unity Integration API: 3D visualization and interaction
- Component API: UI components and configuration
- Visualization Config: Charts, graphs, and data display
Collaboration​
- Sharing API: Project and variant sharing
- Comments API: Annotations and feedback
- Notifications: Real-time updates and alerts
API Reference Structure​
Request Format​
GET /projects/{projectId}/parameters
Authorization: Bearer {token}
Content-Type: application/json
Response Format​
{
"success": true,
"data": {
// Response data
},
"metadata": {
"timestamp": "2023-10-15T10:30:00Z",
"version": "1.0",
"requestId": "req-123456"
}
}
Error Format​
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid parameter range",
"details": {
"parameter": "building_height",
"value": -10,
"constraint": "must be positive"
}
},
"metadata": {
"timestamp": "2023-10-15T10:30:00Z",
"requestId": "req-123456"
}
}
Getting Started​
1. Authentication Setup​
// Obtain access token
const response = await fetch('https://api.inform.arup.com/v1/auth/token', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
grant_type: 'client_credentials',
client_id: 'your-client-id',
client_secret: 'your-client-secret'
})
});
const { access_token } = await response.json();
2. List Projects​
// Get user projects
const projects = await fetch('https://api.inform.arup.com/v1/projects', {
headers: {
'Authorization': `Bearer ${access_token}`,
'Content-Type': 'application/json'
}
});
const projectList = await projects.json();
3. Execute Model​
// Run parametric model
const result = await fetch(`https://api.inform.arup.com/v1/projects/${projectId}/evaluate`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${access_token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
parameters: {
building_height: 50,
floor_count: 10,
structural_system: "Steel Frame"
}
})
});
const evaluation = await result.json();
SDK and Client Libraries​
JavaScript/TypeScript SDK​
npm install @inform/api-client
import { InformClient } from '@inform/api-client';
const client = new InformClient({
apiKey: 'your-api-key',
baseUrl: 'https://api.inform.arup.com/v1'
});
// Use the client
const projects = await client.projects.list();
const result = await client.models.evaluate(projectId, parameters);
Python SDK​
pip install inform-api-client
from inform_api import InformClient
client = InformClient(
api_key='your-api-key',
base_url='https://api.inform.arup.com/v1'
)
# Use the client
projects = client.projects.list()
result = client.models.evaluate(project_id, parameters)
.NET SDK​
dotnet add package Inform.ApiClient
using Inform.ApiClient;
var client = new InformClient(new InformClientOptions
{
ApiKey = "your-api-key",
BaseUrl = "https://api.inform.arup.com/v1"
});
// Use the client
var projects = await client.Projects.ListAsync();
var result = await client.Models.EvaluateAsync(projectId, parameters);
Rate Limiting and Quotas​
Rate Limits​
- Standard API: 1000 requests per hour per user
- Model Evaluation: 100 evaluations per hour per project
- Bulk Operations: 10 concurrent operations
Quota Management​
- Monthly Limits: Based on subscription tier
- Compute Usage: Charged by execution time
- Storage Limits: Project and model storage quotas
Headers​
Response headers include rate limit information:
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 950
X-RateLimit-Reset: 1634567890
X-RateLimit-Retry-After: 3600
Error Handling​
HTTP Status Codes​
- 200 OK: Successful request
- 201 Created: Resource created successfully
- 400 Bad Request: Invalid request format or parameters
- 401 Unauthorized: Authentication required or invalid
- 403 Forbidden: Insufficient permissions
- 404 Not Found: Resource does not exist
- 429 Too Many Requests: Rate limit exceeded
- 500 Internal Server Error: Server-side error
Error Categories​
- Validation Errors: Invalid input data or parameters
- Authentication Errors: Login or permission issues
- Resource Errors: Missing or inaccessible resources
- Rate Limit Errors: Too many requests
- Server Errors: Internal platform issues
Error Response Example​
{
"success": false,
"error": {
"code": "PARAMETER_OUT_OF_RANGE",
"message": "Parameter value exceeds allowed range",
"details": {
"parameter": "building_height",
"value": 500,
"min": 10,
"max": 200
},
"documentation_url": "https://docs.inform.arup.com/api/errors#PARAMETER_OUT_OF_RANGE"
}
}
Webhooks and Real-Time Updates​
Webhook Configuration​
Subscribe to events for real-time updates:
// Configure webhook endpoint
const webhook = await client.webhooks.create({
url: 'https://your-app.com/webhooks/inform',
events: ['model.evaluation.completed', 'project.shared'],
secret: 'your-webhook-secret'
});
Event Types​
- Model Events: Evaluation completed, deployment status
- Project Events: Created, shared, permission changes
- User Events: Login, project access
- System Events: Maintenance, service updates
WebSocket Connections​
For real-time collaboration:
const socket = new WebSocket('wss://api.inform.arup.com/v1/ws');
socket.onmessage = (event) => {
const message = JSON.parse(event.data);
// Handle real-time updates
};
API Versioning​
Version Strategy​
- URL Versioning:
/v1/,/v2/in the URL path - Backward Compatibility: Previous versions supported for 12 months
- Deprecation Notice: 6-month advance notice for breaking changes
Current Versions​
- v1: Current stable version
- v2: Beta version with new features
- v0: Legacy version (deprecated)
Migration Guide​
When new versions are released:
- Review changelog for breaking changes
- Test in development environment
- Update client code incrementally
- Monitor for issues after deployment
Performance and Optimization​
Caching​
- GET Requests: Cached for 5 minutes by default
- ETags: Use conditional requests for efficiency
- Cache-Control: Respect cache headers
Pagination​
Large datasets use cursor-based pagination:
// Get first page
const response = await client.projects.list({ limit: 50 });
// Get next page
const nextPage = await client.projects.list({
limit: 50,
cursor: response.metadata.next_cursor
});
Batch Operations​
Reduce API calls with batch requests:
// Batch parameter evaluation
const results = await client.models.batchEvaluate(projectId, [
{ building_height: 30, floor_count: 6 },
{ building_height: 40, floor_count: 8 },
{ building_height: 50, floor_count: 10 }
]);
Security Best Practices​
API Key Management​
- Secure Storage: Never commit API keys to version control
- Environment Variables: Use environment-specific configuration
- Key Rotation: Regularly rotate API keys
- Scope Limitation: Use minimal required permissions
Request Security​
- HTTPS Only: All API requests must use HTTPS
- Input Validation: Validate all input parameters
- Rate Limiting: Implement client-side rate limiting
- Error Handling: Don't expose sensitive information in errors
Data Protection​
- Data Encryption: All data encrypted in transit and at rest
- Access Logging: All API access is logged and monitored
- Compliance: GDPR, SOC2, and industry-specific compliance
- Data Retention: Automatic data lifecycle management
Next Steps​
Detailed API Documentation​
- Authentication: Complete authentication guide
- Projects API: Project management operations
- Analysis API: Computational analysis integration
- Unity Integration: 3D visualization API
Development Resources​
- Component Library: UI component reference
- Developer Guides: Implementation tutorials
- Architecture: Platform architecture details
Support and Community​
- API Forum: Developer community and discussions
- Support Portal: Technical support and bug reports
- Changelog: API updates and version history
- Status Page: Real-time API status and uptime