Developers

Run your AI sales team from code.

189 REST operations with an OpenAPI 3 spec, about 35 granular scopes, idempotency keys and over 30 signed webhook events. Or give a key to your AI assistant and let it configure the workspace.

create-lead.sh
# Push a lead, an agent picks it up
curl -X POST https://app.norixia.com/api/v1/projects/1/leads \
  -H "Authorization: Bearer nrx_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Ava Smith",
    "email": "[email protected]",
    "company": "Sirius Retail",
    "type": "prospect",
    "agent_id": 1
  }'
email.replied
{
  "id": "6c0f…",
  "type": "email.replied",
  "created_at": "2026-10-18T09:42:11Z",
  "workspace": { "id": 1, "slug": "acme" },
  "data": { …the email, its lead and its agent }
}
/projects/agents/leads/routines/runs/approvals/tasks/missions/knowledge/discussions/email-threads/mailboxes/suppressions/webhooks/api-keys/team

API keys

Scoped keys, for scripts and AI assistants.

Prefix nrx_live_, Full / Read & write / Read only presets or about 35 custom scopes, expiry after 30, 90 or 365 days or never. 120 requests per minute by default and idempotency keys on writes.

app.norixia.com
API keys settings

Webhooks

Know the moment something happens.

Subscribe to leads, emails, approvals, routine runs, tasks and threads. Every delivery is signed with HMAC-SHA256 in the Norixia-Signature header, retried 8 times with backoff over about a day, and can be redelivered from the UI.

app.norixia.com
Webhooks settings

Events

Over 30 events, signed and retried.

project.crawledproject.setup_completedagent.createdagent.status_changedagent_run.finishedlead.createdlead.status_changedlead.sequences_stoppedemail.sentemail.openedemail.clickedemail.repliedemail.bouncedapproval.requestedapproval.approvedapproval.rejectedemail_thread.taken_overemail_thread.handed_backroutine.publishedroutine_run.startedroutine_run.finishedmission.run_finishedtask.createdtask.completedknowledge.updatedmessage.created
verify.js
// Norixia-Signature: t=,v1=
import crypto from 'node:crypto';

export function verify(rawBody, header, secret) {
  const parts = Object.fromEntries(header.split(',').map((p) => p.split('=')));
  const expected = crypto
    .createHmac('sha256', secret)
    .update(`${parts.t}.${rawBody}`)
    .digest('hex');

  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
}

Build on top of your AI revenue team.

Create a workspace, generate a key, and call the API in minutes.