Developers

API Documentation

Go 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 Go 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 Go 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..."
  }
}

Customer Answers

POST /v1/customer-answers

Answers a customer question using only the business knowledge you send, with flags for ungrounded answers and cases a human should handle.

{ "question": "Do you offer weekend service?",
  "knowledge": "<your FAQ, policies, hours, pricing...>",
  "tone": "friendly" }

// → { "ok": true, "result": { "answer": "...", "grounded": true,
//      "escalate": false, "escalation_reason": "" } }

Document Intake

POST /v1/document-intake

Extracts structured fields and line items from document text (invoices, POs, forms), with per-field confidence.

{ "document": "<raw text of the invoice/PO/form>",
  "fields": ["vendor_name", "invoice_number", "total_due"] }

// → { "ok": true, "result": { "document_type": "invoice",
//      "fields": [{ "name": "vendor_name", "value": "...",
//                   "confidence": "high" }, ...],
//      "line_items": [...], "missing_fields": [] } }

Knowledge Search

POST /v1/knowledge-search

Answers a question across the internal documents you send, citing verbatim passages from the sources.

{ "question": "What's the lockout/tagout procedure?",
  "documents": [
    { "title": "Safety SOP", "content": "..." },
    { "title": "Maintenance Manual", "content": "..." }
  ] }

// → { "ok": true, "result": { "answer": "...", "found": true,
//      "citations": [{ "title": "Safety SOP", "quote": "..." }] } }

Managed services (AI Voice Agent, Workflow Automation) are delivered and operated by us rather than exposed as self-serve endpoints, the services page shows which is which.

More endpoints

Same authentication, same JSON-in/JSON-out pattern. Abbreviated request shapes below; responses follow { "ok": true, "result": {...} }.

POST /v1/review-replies

{ "review": "<the customer review text>", "rating": 2,
  "business_context": "<name, voice, policies>" }
// result: sentiment, reply, flag_for_owner, flag_reason

POST /v1/email-triage

{ "email": "<raw inbound email>",
  "categories": ["sales", "support", "billing"] }
// result: category, urgency, summary, route_to,
//         draft_acknowledgment, needs_human

POST /v1/lead-qualifier

{ "inquiry": "<the lead's message>",
  "ideal_customer": "<who you sell to, deal size, red flags>" }
// result: score (1-10), fit, reasons, missing_info,
//         suggested_next_action, draft_response

POST /v1/business-translator

{ "text": "<email, quote, or document text>",
  "direction": "auto" }  // or "en-es" / "es-en"
// result: translated_text, detected_language,
//         direction_used, notes

Connecting from your platform

These are ordinary HTTPS + JSON APIs, so anything that can make a web request can use them, no SDK required.

WordPress / PHP

$response = wp_remote_post('https://gonorthsystems.com/api/v1/customer-answers', [
  'headers' => [
    'Authorization' => 'Bearer ' . NORTH_SYSTEMS_API_KEY, // define in wp-config.php
    'Content-Type'  => 'application/json',
  ],
  'body' => wp_json_encode([
    'question'  => $customer_question,
    'knowledge' => $your_faq_text,
  ]),
  'timeout' => 60,
]);
$data = json_decode(wp_remote_retrieve_body($response), true);

Shopify

Call the API from your Shopify app backend, a serverless function, or a Shopify Flow HTTP action, never from theme JavaScript, which would expose your key to visitors. We set this up as part of onboarding.

Zapier / Make / n8n

Use a Webhooks/HTTP module: method POST, the endpoint URL, an Authorization: Bearer nsk_… header, and a JSON body as documented above.

Keep keys server-side. Never place an API key in website JavaScript, mobile app code, or anywhere end users can view source.

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.