API reference
Connect your business software to Automizely, push contacts and events in from any platform, and receive events from other systems and connected devices. Everything here runs over HTTPS and returns JSON.
Create and revoke keys on the Developers tab inside your workspace.
Authentication
Every /v1 request carries a workspace API key in the Authorization header. Keys are stored as a hash, so a key is shown once when it is created and cannot be recovered afterwards. A request with a missing or unknown key returns 401.
Authorization: Bearer aza_yourkeyhere
Content-Type: application/jsonReading this reference
Each endpoint below is labelled. Live means the endpoint is serving requests today. Documented shape means the request and response contract is published and stable to code against, and is what the endpoint will accept and return.
/v1/contacts
Documented shapeCreate or update a contact. Upserts on email within your workspace, so re-sending the same email updates the existing contact rather than duplicating it.
Request
POST https://www.automizely-analytics.org/v1/contacts
Authorization: Bearer aza_yourkeyhere
Content-Type: application/json
{
"email": "[email protected]",
"phone": "+15550001111",
"firstName": "Casey",
"lastName": "Jordan",
"emailConsent": true,
"smsConsent": false,
"attributes": { "plan": "pro", "storeId": "1042" }
}Response
201 Created
{
"contact": {
"id": "clz3k1v2p0000",
"email": "[email protected]",
"phone": "+15550001111",
"firstName": "Casey",
"lastName": "Jordan",
"emailConsent": true,
"smsConsent": false,
"unsubscribedAt": null,
"attributes": { "plan": "pro", "storeId": "1042" },
"createdAt": "2026-08-04T09:12:44.000Z"
}
}Notes
- email is required. phone must be unique within your workspace.
- attributes is a flat JSON object of your own fields; it is merged into whatever is already stored.
- Set emailConsent only when the contact has actually opted in. It defaults to false.
/v1/contacts
Documented shapeList contacts, newest first, with cursor pagination.
Request
GET https://www.automizely-analytics.org/v1/contacts?limit=50&cursor=clz3k1v2p0000
Authorization: Bearer aza_yourkeyhereResponse
200 OK
{
"contacts": [
{
"id": "clz3k1v2p0000",
"email": "[email protected]",
"phone": "+15550001111",
"firstName": "Casey",
"lastName": "Jordan",
"emailConsent": true,
"smsConsent": false,
"unsubscribedAt": null,
"attributes": { "plan": "pro" },
"createdAt": "2026-08-04T09:12:44.000Z"
}
],
"nextCursor": "clz3k1v2p0031"
}Notes
- limit defaults to 50 and is capped at 200.
- Pass the previous response's nextCursor to fetch the next page. nextCursor is null on the last page.
- Filter with ?email= for an exact match.
/v1/events
Documented shapeAppend an activity event. Events feed Analytics and can trigger automations.
Request
POST https://www.automizely-analytics.org/v1/events
Authorization: Bearer aza_yourkeyhere
Content-Type: application/json
{
"type": "contact.created",
"entity": "contact",
"entityId": "clz3k1v2p0000",
"props": { "source": "warehouse-sync" }
}Response
202 Accepted
{ "ok": true }Notes
- type must be one of: contact.created, campaign.sent, campaign.opened, campaign.clicked, campaign.failed, survey.answered, content.published, content.viewed, automation.run, automation.failed, connection.tested, connection.synced, connection.webhook_received.
- entity is one of campaign, content, automation, contact, connection.
- entityId and props are optional. props is a flat JSON object.
/api/hooks/{slug}
LiveReceive an event from another system or a connected device. Add an inbound webhook connection to be issued a slug and a signing secret, then have the other system post here.
Request
POST https://www.automizely-analytics.org/api/hooks/wh_9f13c0a4e2b71d55
x-automizely-signature: whsec_yoursigningsecret
Content-Type: application/json
{ "scannerId": "dock-3", "sku": "AZ-1120", "quantity": 4 }Response
202 Accepted
{ "ok": true, "automationRuns": 1 }Notes
- The signing secret is sent verbatim in the x-automizely-signature header and compared in constant time. A missing or wrong value returns 401.
- Bodies are capped at 65536 bytes; anything larger returns 413.
- Any content type is accepted. A body that is not JSON is stored verbatim under a raw key.
- automationRuns is how many of your enabled automations this delivery started.
- Unknown slug returns 404, a disabled connection returns 403, and too many deliveries returns 429.
Errors
Errors return a JSON body with a single error field describing what to fix.
401 Unauthorized
{ "error": "Missing or invalid API key." }