Developers
API Documentation
North Systems APIs give your systems direct access to the AI services we build for you. Everything below applies to every endpoint.
Base URL
https://gonorthsystems.com/api/v1
All requests are HTTPS. Plain HTTP is not supported.
Authentication
Every request needs an API key in the Authorization header. Keys start with nsk_ and are issued by North Systems when your service goes live.
Authorization: Bearer nsk_your_api_key
Keys are shown once at creation and stored only as hashes on our side — keep yours in a secrets manager, never in client-side code or version control. Compromised keys are revoked and reissued in minutes; usage is metered per key. View your keys and usage anytime on your account page.
Quick start
GET /v1/hello
Verifies your key and returns a signed-in greeting. Use it to test connectivity.
curl https://gonorthsystems.com/api/v1/hello \ -H "Authorization: Bearer nsk_your_api_key"
Response:
{
"ok": true,
"message": "Hello from North Systems! Key \"Acme production\" is valid.",
"service": "Quote Assistant API",
"timestamp": "2026-07-11T20:15:00.000Z"
}JavaScript
const res = await fetch("https://gonorthsystems.com/api/v1/hello", {
headers: { Authorization: `Bearer ${process.env.NORTH_SYSTEMS_API_KEY}` },
});
const data = await res.json();Quote Assistant
POST /v1/quote-assistant
Turns a raw customer request into a structured quote draft with line items, totals, flagged assumptions, and a ready-to-send reply. Requires a key with Quote Assistant scope (or no scope).
curl https://gonorthsystems.com/api/v1/quote-assistant \
-X POST \
-H "Authorization: Bearer nsk_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"request": "Hi, we need our 3 office break rooms repainted (about 12x15 ft each) plus ceiling touch-ups. How much and how soon?",
"business_context": "Commercial painting. $65/hr labor, 2-person crews. Paint billed at cost +15%. Typical room: 6 crew-hours."
}'Response (abbreviated):
{
"ok": true,
"quote": {
"summary": "Repaint three 12x15 ft break rooms with ceiling touch-ups.",
"currency": "USD",
"line_items": [
{ "description": "Labor - repaint 3 break rooms", "quantity": 18,
"unit": "hours", "unit_price": 65, "subtotal": 1170 },
...
],
"total": 1690.5,
"assumptions": ["Standard 8-ft ceilings", ...],
"missing_info": ["Preferred colors and finish", ...],
"draft_reply": "Hi! Thanks for reaching out about your break rooms..."
}
}Other services get their endpoints under /api/v1/<service-slug> as they go live — the services page lists what's available.
Errors
| Status | Meaning |
|---|---|
| 401 | Missing, invalid, or revoked API key |
| 400 | Malformed request — check the JSON body |
| 429 | Rate limit reached — retry with backoff |
| 500 | Something failed on our side — safe to retry |
Error bodies are JSON: { "error": "description" }
Fair use
Rate limits are set per engagement and sized to your workload — if you expect a traffic spike, tell us and we'll raise them ahead of time. Questions or a key emergency: hello@gonorthsystems.com.