Embed the builder. Ship the CRM. Bring your own framework.
One script tag drops the page builder into any React, Vue, Astro, or plain-HTML app. Every entity is a REST resource. Every event signs a webhook. JSON-first all the way down — your data outlives whatever framework Twitter loves this quarter.
// One script tag. The builder mounts on any div. import { Builder } from '@auriuscrm/builder'; export function EditorPage() { const [page, setPage] = useState(null); return ( <Builder apiKey={process.env.AURIUS_KEY} theme="aurius" onSave={(json) => setPage(json)} /> ); } // `json` is portable BuilderJS JSON. // Render it server-side, ship to a CDN, whatever. await fetch('/api/save-page', { method: 'POST', body: JSON.stringify(page), });
Drop the builder into your app. No iframe gymnastics.
The builder ships as a vanilla JS bundle plus thin framework adapters. Mount on any DOM node, get a save callback with portable JSON. Themes, locale, and feature flags are props.
Next.js · React
Mount as a client-only component. SSR-safe wrapper handles hydration. TypeScript types included.
Vue · Nuxt
Use <AuriusBuilder> in any template. v-on:save handler returns JSON. Reactive theme prop.
Astro · island
client:only directive — the builder hydrates on first interaction. Zero JS shipped for static visitors.
Laravel · Blade
@auriusBuilder directive wires the builder into any Blade view. CSRF + session integration native.
Plain HTML
Drop the script in any HTML file. Call AuriusBuilder.mount('#editor', options). No bundler required.
Headless · API only
No frontend? Send JSON in, get HTML or PDF out. Perfect for transactional rendering pipelines.
Every entity is a resource. Every resource has a JSON schema.
Twelve top-level resources cover the entire CRM surface: contacts · tags · segments · pages ·
funnels · flows · deals · forms · pipelines · webhooks · ai-requests · audit-log. CRUD verbs
where they make sense, action verbs (e.g. POST /flows/{id}:test-fire) where they don't.
Token auth (Bearer). Per-token scopes. Per-token rate limits. List responses use cursor pagination — your loop won't drift.
$ curl https://api.auriuscrm.com/v1/contacts \ -H "Authorization: Bearer aur_live_..." \ -d '{ "email": "sarah@acme.com", "fields": { "team_size": 250, "plan": "enterprise" }, "tags": ["webinar", "enterprise"] }' { "id": "con_4821", "email": "sarah@acme.com", "created_at": "2026-05-24T15:42:11Z", "score": 0, "tags": ["webinar", "enterprise"], "fields": { "team_size": 250, "plan": "enterprise" } }
Contacts
Full CRUD · upsert-on-email · bulk import (CSV) · cursor list. Tag and field mutations atomic per request.
Tags
Create, rename, delete, bulk-assign. Tag changes fire tag.added / tag.removed webhooks.
Pages
JSON in, JSON out. Versioned. POST :publish action makes a version live; the previous one stays for rollback.
Funnels
List, create, edit, archive. Each funnel exposes /analytics with cursor-paginated per-step counts.
Automation flows
Tree validation on every write. POST :test-fire dry-runs against a contact and returns the actions that would fire.
Deals
Pipelines + stages + values. Move via PATCH /deals/{id}. Auto-fires deal.stage_changed.
Segments
Filter combinations as first-class objects. Preview row counts before saving via :preview.
Webhooks
Subscribe to specific events. HMAC-signed payloads, automatic retries with exponential backoff.
Audit log
Every mutation, by every actor (human or AI). Cursor-paginated, filterable by actor, entity, action.
Eighteen events. Every one signed. Every one retried.
Subscribe to specific event types per endpoint. AuriusCRM POSTs a JSON payload signed with HMAC-SHA256; verify with your shared secret. 5xx responses retry with exponential backoff up to 24 hours.
The webhook event log is browsable in the admin UI — replay any past event against your endpoint with one click. Useful for backfilling after downtime.
Pages, funnels, flows — all JSON. Validate before write.
AuriusCRM ships JSON Schemas (draft 2020-12) for every entity. Validate locally before sending to the API. Generate TypeScript types from them. Drift between your code and the API is caught at compile time.
The schemas live at https://api.auriuscrm.com/v1/schemas — versioned, content-addressable,
long-cacheable. Pull them once, validate forever.
import Ajv from 'ajv'; import pageSchema from '@auriuscrm/schemas/page.json'; const ajv = new Ajv(); const validate = ajv.compile(pageSchema); if (!validate(myPage)) { console.error(validate.errors); // e.g. "must have required property 'sections'" return; } // Schema-valid · safe to POST await fetch('/v1/pages', { method: 'POST', headers: { 'Authorization': `Bearer ${key}` }, body: JSON.stringify(myPage), });
Self-host the source. Or embed the builder. Or both.
The fastest way to feel it: open the playground, drop a hero, click Export JSON. That's the same JSON the API returns.