Authorization
Bearer <token> identifies the GitHub user. Member operations require organization membership.
NoxConnect is the shared control plane for the Nox product family. Discover what each service can do, check readiness, and make bounded changes without handling provider credentials.
Architecture
Start by asking the platform what is available. The catalog reports enabled services, current blockers, required connections, access levels, and exact operations. Clients follow advertised operations instead of guessing routes.
GitHub, Slack, and customer credentials are never returned by discovery, setup, configuration, or health APIs. Product services receive only the bounded capability they need.
Quickstart
This request shape is for first-party Nox clients and user-approved automation whose secure runtime has received a Nox GitHub App OAuth access token. The hosted API does not currently issue third-party client credentials.
Obtain access through a supported Nox sign-in or agent handoff. Never copy a token from browser storage, paste one into chat, place it in a URL, or log it. External applications should wait for a dedicated client-authorization flow.
curl https://app.noxhere.com/api/v1/services \
--header "Authorization: Bearer $GITHUB_TOKEN" \
--header "X-Org: your-organization"
{
"apiVersion": 1,
"organization": { "login": "your-organization" },
"canConfigure": true,
"services": [
{
"id": "noxfeed",
"enabled": true,
"setup": { "state": "ready" },
"capabilities": [/* operations live here */]
}
]
}
Authentication
Bearer <token> identifies the GitHub user. Member operations require organization membership.
X-Org: <login> selects the tenant. Server-side queries remain bound to this verified organization.
Operations advertise member, admin, public, or ingest_key authentication. Setup mutations and organization configuration require admin access. OAuth start operations may return a temporary userAction.url; do not log it or fetch it with an automated client. Give it to a human, then poll setup no more than once every five seconds.
First-party web clients refresh an expired access token through POST /api/auth/refresh. A rejected refresh requires a new sign-in. Third-party refresh credentials are not issued.
Management and NoxCue ingest use https://app.noxhere.com. Origin-bound NoxSpot widget capture uses https://api.noxspot.dev; its operations declare that server in OpenAPI.
Service catalog
NoxConnect owns shared infrastructure. Each product owns the resources and behavior unique to its job.
Connections and shared workspace control: provider connections, identities, repositories, projects, and Slack routing.
Planning and delivery workflow backed by GitHub issues, feature stages, specifications, and attachments.
Current work and communication across issues, pull requests, engineering activity, posts, and release notes.
Website feedback capture with sites, origin-bound widget configuration, reports, screenshots, and delivery.
Customer health monitoring from bounded lifecycle and error events through metrics and scheduled summaries.
Control plane
Replace {service} with noxconnect, noxticket, noxfeed, noxspot, or noxcue.
| Method and path | Purpose | Access |
|---|---|---|
| GET/api/v1/services | Discover all services, readiness, capabilities, and operations. | Member |
| GET/api/v1/services/{service} | Inspect one service and its links. | Member |
| GET/api/v1/services/{service}/setup | Read blockers, connections, and resumable setup sections. | Member |
| GET/api/v1/services/{service}/health | Read required and optional health checks. | Member |
| GET/api/v1/services/{service}/config | Read owned configuration and its current revision. | Member |
| PATCH/api/v1/services/{service}/config | Partially update writable service configuration. | Admin |
Safe configuration
Configuration updates use optimistic concurrency. Read the document, retain its ETag, then include that value in If-Match. A stale client receives 412 instead of overwriting newer work.
# 1. Read the current config and response ETag
curl -i https://app.noxhere.com/api/v1/services/noxfeed/config \
-H "Authorization: Bearer $GITHUB_TOKEN" \
-H "X-Org: your-organization"
# 2. Patch only owned fields using that revision
curl -X PATCH https://app.noxhere.com/api/v1/services/noxfeed/config \
-H "Authorization: Bearer $GITHUB_TOKEN" \
-H "X-Org: your-organization" \
-H 'If-Match: "current-revision"' \
-H "Content-Type: application/json" \
--data '{"projectScope":null}'
projectScope: null means all projects. Otherwise supply an active project ID returned by GET /api/projects; arbitrary strings are rejected.
NoxConnect, NoxTicket, and NoxFeed expose strict writable fields in their service config response.
NoxSpot sites and NoxCue sources remain authoritative. Their service config is read-only and links to the correct child resources.
Operations
Every capability contains an operations array. Each operation declares a stable ID, HTTP method, path, authentication mode, and description. The catalog and OpenAPI document are tested for alignment.
{
"id": "patch_feed_config",
"method": "PATCH",
"path": "/api/v1/services/noxfeed/config",
"authentication": "admin",
"description": "Update project scope or release-notes prompt with If-Match."
}
The reference below is rendered directly from OpenAPI 3.1, so routes, methods, access levels, server overrides, and change-safety labels do not have to be copied into this page by hand. Older compatibility endpoints may still expose loosely typed response bodies; those are labelled as legacy JSON in the schema.
Loading the operation reference…
Errors
{
"apiVersion": 1,
"error": {
"code": "revision_conflict",
"message": "Settings changed concurrently; fetch config and retry",
"details": { "currentRevision": "…" }
}
}
All /api/v1/* errors, including authentication and organization failures raised before a handler runs, use this envelope. Compatibility routes under /api/* may still return { "error": "message" }.
401Missing or invalid authentication.403The caller lacks required organization or admin access.409The requested write conflicts with resource ownership or current state.412The supplied configuration revision is stale. Read and retry.422The request body fails the service's strict schema.428A required If-Match header was not supplied.Safety model
Clients receive readiness and bounded actions, never GitHub or Slack credentials.
Every advertised operation declares the authentication level it needs.
The verified organization identity scopes backing queries and mutations.
Revision checks protect configuration from accidental lost updates and races.
Agents may initiate a connection, but a human approves provider authorization.
The versioned contract is served from app.noxhere.com/api/v1; service-specific sites use the same API without owning provider credentials.
Retry reads freely. Retry configuration only after reading the latest revision. Do not retry other writes unless the operation documents idempotency or you can confirm the first attempt failed before processing.
Disconnect, delete, archive, close, and revoke operations are marked destructive. Confirm the target and organization immediately before calling them.
On 429, wait for Retry-After when present and add jitter. Never poll setup more often than once every five seconds.
A new NoxCue ingest key is returned once. Move it directly into an approved secret manager, never log it, and revoke it if delivery to storage is uncertain.