Skip to main content

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:

  1. Review changelog for breaking changes
  2. Test in development environment
  3. Update client code incrementally
  4. 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

Development Resources

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