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_reasonPOST /v1/email-triage
{ "email": "<raw inbound email>",
"categories": ["sales", "support", "billing"] }
// result: category, urgency, summary, route_to,
// draft_acknowledgment, needs_humanPOST /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_responsePOST /v1/business-translator
{ "text": "<email, quote, or document text>",
"direction": "auto" } // or "en-es" / "es-en"
// result: translated_text, detected_language,
// direction_used, notesConnecting 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
| 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.