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/json

Reading 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.

POST

/v1/contacts

Documented shape

Create 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.
GET

/v1/contacts

Documented shape

List contacts, newest first, with cursor pagination.

Request

GET https://www.automizely-analytics.org/v1/contacts?limit=50&cursor=clz3k1v2p0000
Authorization: Bearer aza_yourkeyhere

Response

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.
POST

/v1/events

Documented shape

Append 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.
POST

/api/hooks/{slug}

Live

Receive 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." }