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

StatusMeaning
401Missing, invalid, or revoked API key
400Malformed request — check the JSON body
429Rate limit reached — retry with backoff
500Something 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.