Northbridge Workflow Analysis API
Workflow Analysis API
Programmatic workflow and automation-readiness analysis for business applications and internal tools.
Overview
The Northbridge Workflow Analysis API accepts a description of an operational workflow and returns a structured analysis: an automation readiness score, workflow complexity, identified bottlenecks, prioritized recommendations, integration opportunities between the tools you use, and an estimate of manual steps that could potentially be reduced.
Version 1.0 uses a deterministic, rule-based analysis engine: the same input produces the same analysis. Results are an automated starting point for planning, not a guarantee of savings or a substitute for a reviewed project scope.
Provided by Northbridge Software LLC · https://nbsoftware.net
Getting Started
API Access
API access is currently available to approved customers and integration partners.
To request a key, email support@nbsoftware.net with your company name and intended use. Keys are issued by Northbridge and shown to you once.
- Store your key in a server-side secret or environment variable.
- Call
GET /api/v1/healthto confirm connectivity. - Send a workflow to
POST /api/v1/workflow-analysis.
Authentication
Authenticate every analysis request with a Bearer token:
Authorization: Bearer <API_KEY>
# Example
Authorization: Bearer nb_live_your_api_keyNever expose production API keys in client-side JavaScript or public repositories.
A missing key returns 401. An invalid, disabled or revoked key returns 403.
Base URL
https://nbsoftware.netEndpoints
Workflow Analysis
POST /api/v1/workflow-analysisRequires authentication. Body: JSON (Content-Type: application/json), maximum 32 KB.
Health Check
GET /api/v1/healthNo authentication required. Response:
{
"status": "ok",
"service": "Northbridge Workflow Analysis API",
"version": "1.0"
}Request Fields
| Field | Type | Required | Constraints |
|---|---|---|---|
workflow_name | string | Yes | 2–120 characters |
description | string | Yes | 20–5000 characters |
monthly_volume | integer | No | 0–10,000,000 |
current_tools | string[] | No | Up to 50 items, each ≤ 100 characters |
manual_steps | integer | No | 0–1000 |
business_goal | string | No | ≤ 1000 characters |
Unknown fields are rejected with 400. List current_tools in the order data flows between them.
Response Fields
| Field | Type | Description |
|---|---|---|
request_id | string | Unique id prefixed wa_ (also in the X-Request-Id header) |
workflow_name | string | Echo of the submitted name |
automation_score | integer | 0–100 automation readiness |
complexity | string | low, medium or high |
summary | string | Plain-language summary |
bottlenecks | string[] | Identified manual bottlenecks |
recommendations | object[] | title, category, priority (high | medium | low) |
estimated_manual_steps_removed | integer | Manual steps that could potentially be reduced |
integration_opportunities | string[] | Suggested connections between listed tools |
generated_at | string | ISO-8601 timestamp |
Example response:
{
"request_id": "wa_550e8400-e29b-41d4-a716-446655440000",
"workflow_name": "Customer onboarding",
"automation_score": 82,
"complexity": "low",
"summary": "\"Customer onboarding\" shows strong automation potential, with 5 automation signals identified at roughly 250 runs per month. Complexity is assessed as low.",
"bottlenecks": [
"Manual transfer of data between systems",
"Routine notifications sent by hand",
"CRM updated outside of the originating workflow",
"Form submissions processed by hand after arrival"
],
"recommendations": [
{ "title": "Synchronize records between systems automatically", "category": "integration", "priority": "high" },
{ "title": "Trigger routine emails and notifications automatically", "category": "workflow-automation", "priority": "high" }
],
"estimated_manual_steps_removed": 2,
"integration_opportunities": ["Google Forms → HubSpot", "HubSpot → Gmail"],
"generated_at": "2026-10-20T12:00:00.000Z"
}Automation Score
The score rises with signals such as copy/paste or re-keyed data, manual data entry, duplicate checks, routine emails and notifications, form processing, spreadsheet tracking, CRM updates, file handling, follow-up task creation, reporting and invoicing, higher monthly volume, more manual steps, and multiple connected tools.
It falls with exception-heavy or conditional logic, compliance-sensitive steps, escalations, and very short descriptions. Complexity increases with the number of tools, manual steps, approvals and conditional logic.
| Score | Interpretation |
|---|---|
| 70–100 | Strong automation potential |
| 45–69 | Moderate automation potential |
| 0–44 | Limited signals; more detail or process mapping recommended |
Error Responses
Errors share one format:
{
"error": {
"code": "INVALID_REQUEST",
"message": "The description field must contain at least 20 characters."
}
}| Status | Code | Meaning |
|---|---|---|
| 400 | INVALID_JSON | Body is not valid JSON |
| 400 | INVALID_REQUEST | Validation failure or wrong Content-Type |
| 401 | MISSING_API_KEY | No Bearer token supplied |
| 403 | INVALID_API_KEY | Key is invalid, disabled or revoked |
| 405 | METHOD_NOT_ALLOWED | Wrong HTTP method |
| 413 | PAYLOAD_TOO_LARGE | Body larger than 32 KB |
| 429 | RATE_LIMIT_EXCEEDED | Too many requests |
| 500 | INTERNAL_ERROR | Unexpected server error |
Rate Limits
Default: 60 requests per minute per API key, plus a per-IP abuse limit of 120 requests per minute. Exceeding a limit returns 429 with a Retry-After header in seconds. Limits may be adjusted per key.
Examples
curl
curl -X POST "https://nbsoftware.net/api/v1/workflow-analysis" \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"workflow_name": "Customer onboarding",
"description": "New customers submit a form. Staff manually copies information into the CRM and sends a confirmation email.",
"monthly_volume": 250,
"current_tools": ["Google Forms", "HubSpot", "Gmail"]
}'JavaScript
SERVER-SIDE EXAMPLE
// SERVER-SIDE EXAMPLE (Node.js 18+). Never put API keys in browser code.
const response = await fetch("https://nbsoftware.net/api/v1/workflow-analysis", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.NORTHBRIDGE_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
workflow_name: "Customer onboarding",
description:
"New customers submit a form. Staff manually copies information into the CRM and sends a confirmation email.",
monthly_volume: 250,
current_tools: ["Google Forms", "HubSpot", "Gmail"],
}),
});
const data = await response.json();
if (!response.ok) {
throw new Error(`${response.status} ${data.error?.code}: ${data.error?.message}`);
}
console.log(data.automation_score, data.complexity, data.recommendations);Python
import os
import requests
response = requests.post(
"https://nbsoftware.net/api/v1/workflow-analysis",
headers={
"Authorization": f"Bearer {os.environ['NORTHBRIDGE_API_KEY']}",
"Content-Type": "application/json",
},
json={
"workflow_name": "Customer onboarding",
"description": "New customers submit a form. Staff manually copies information into the CRM and sends a confirmation email.",
"monthly_volume": 250,
"current_tools": ["Google Forms", "HubSpot", "Gmail"],
},
timeout=30,
)
data = response.json()
if response.ok:
print(data["automation_score"], data["complexity"])
for rec in data["recommendations"]:
print(f"- [{rec['priority']}] {rec['title']}")
else:
print(f"Error {response.status_code}: {data['error']['code']} - {data['error']['message']}")Security
- HTTPS only. Keys are stored by Northbridge as one-way hashes and can be revoked at any time.
- Submitted workflow descriptions, tools and goals are analyzed in memory and are not stored. Only operational metadata (request id, key identifier, timestamp, status, latency) is recorded.
- Call the API from your server. The API does not enable browser cross-origin access.
- Do not include personal data, credentials or confidential customer records in workflow descriptions.
Support
Northbridge Software LLC · support@nbsoftware.net
Machine-readable spec: OpenAPI Specification · All developer resources