🏗️ Primary Entities
Messages: Individual communications sent or received via email, text, or direct mail
Delivery: Scheduling, send times, and delivery status tracking
Engagement: Opens, clicks, and read status (channel-dependent)
🏗️ Primary Entities
Messages: Individual communications sent or received via email, text, or direct mail
Delivery: Scheduling, send times, and delivery status tracking
Engagement: Opens, clicks, and read status (channel-dependent)
🔗 Key Relationships
Many-to-One: Message → Customer (each message belongs to one customer)
Many-to-One: Message → Campaign (messages may be linked to a campaign)
Many-to-One: Message → Tenant (each message belongs to one tenant)
Core identification fields linking messages to tenants, shops, and customers.
| Field Name | Data Type | Description | Required |
|---|---|---|---|
STEER_TENANT_ID | String (UUID) | Unique tenant identifier (parent organization) | Yes |
STEER_SHOP_ID | String (UUID) | Shop location identifier | Yes |
STEER_CUSTOMER_ID | String (UUID) | Customer identifier (message recipient) | Yes |
STEER_MESSAGE_ID | String (UUID) | Unique message identifier | Yes |
Campaign association and notification classification.
| Field Name | Data Type | Description | Required |
|---|---|---|---|
CAMPAIGN_ID | String (UUID) | Associated campaign identifier (null for direct messages) | No |
MARKETING_TYPE | String | Communication channel type | No |
CAMPAIGN_NAME | String | Campaign display name | No |
CAMPAIGN_TYPE | String | Campaign frequency type | No |
NOTIFICATION_ID | Number | Associated notification identifier (null for direct messages and direct mail) | No |
NOTIFICATION_TYPE | String | Notification classification (null for direct messages and direct mail) | No |
Message lifecycle timing.
| Field Name | Data Type | Description | Required |
|---|---|---|---|
CREATED_AT | Timestamp | Message creation timestamp | Yes |
SCHEDULED_AT | Timestamp | Scheduled send time (null if sent immediately or for direct mail) | No |
SENT_AT | Timestamp | Actual send timestamp | No |
DELIVERED_AT | Timestamp | Delivery confirmation timestamp | No |
Delivery status and engagement metrics.
| Field Name | Data Type | Description | Required |
|---|---|---|---|
MESSAGE_STATUS | String | Current delivery/engagement status | Yes |
OPENS_COUNT | Number | Total open count (email only) | No |
CLICKS_COUNT | Number | Total click count (email only) | No |
COUNT_OF_ATTACHMENTS | Number | Number of attachments (text only) | No |
IS_STEER_FAVORITE | Boolean | Conversation-level flag indicating the entire customer conversation is “starred” or bookmarked for easy retrieval (email and text only) | No |
Message content fields.
| Field Name | Data Type | Description | Required |
|---|---|---|---|
SUBJECT | String | Email subject line (email only, null for text and direct mail) | No |
TEXT | String | Message body text. For email: plain text without HTML formatting. For text: SMS body. Null for direct mail | No |
INCOMING_TEXT_SOURCE | String | Source of incoming text message. Only populated when MESSAGE_STATUS is Incoming (text channel only, null for email and direct mail) | No |
Scheduled: Message is scheduled for future deliveryQueued: Message is queued for processingSent: Message has been sent to the carrierDelivered: Message was successfully deliveredUnsent: Message was not sentFailed: Message delivery failedIncoming: Inbound message received from customerUnsubscribed: The system marks the message when the customer sends a stop-word (e.g., “Unsubscribe”, “Stop”, “Cancel”)Deactivated: Phone number was deactivated by the carrier. The system records the message as failed, deactivates the phone number on the customer record, and blocks future messages to that numberFailedByRestriction: Blocked by Steer messaging restriction settings (e.g., maximum messages allowed per customer per day)Scheduled: Message is scheduled for future deliveryQueued: Message is queued for processingSent: Message has been sentDelivered: Message was successfully deliveredUnsent: Message was not sentFailed: Message delivery failedIncoming: Inbound email received from customerUnsubscribed: Customer clicked the unsubscribe link in the emailOpened: Email was opened by the recipientBounced: Email bounced back (invalid address or mailbox full)FailedByRestriction: Blocked by Steer messaging restriction settings (e.g., maximum messages allowed per customer per day)Scheduled: Mail piece is scheduled for productionProcessing: Mail piece is being produced and prepared for deliveryDelivered: Mail piece was deliveredFailed: Mail piece delivery failedOneTime: Campaign runs onceRepeat: Campaign runs on a recurring scheduleText: SMS/text messageEmail: Email messagePostcard: Physical postcardLetter: Physical letterAppointmentReminder: Reminder for an upcoming appointmentAppointmentRequestMade: Notification that an appointment request was submittedAppointmentConfirmed: Confirmation that an appointment was acceptedAppointmentDeclined: Notification that an appointment was declinedOutBoundAppointmentNotification: Outbound appointment notificationAppointmentMissed: Notification for a missed appointmentAbandonedBooking: Follow-up for an abandoned bookingWebFormProspect: Notification from a web form submissionApplies only to text messages where MESSAGE_STATUS is Incoming:
None: Source not specifiedCrm: Message received through CRM integrationWidget: Message received through website widgetNot all fields are populated for every channel. The following table shows which fields contain data per channel:
| Field | Text | Direct Mail | |
|---|---|---|---|
NOTIFICATION_ID | Yes | Yes | — |
NOTIFICATION_TYPE | Yes | Yes | — |
SCHEDULED_AT | Yes | Yes | — |
OPENS_COUNT | Yes | — | — |
CLICKS_COUNT | Yes | — | — |
COUNT_OF_ATTACHMENTS | — | Yes | — |
IS_STEER_FAVORITE | Yes | Yes | — |
SUBJECT | Yes | — | — |
TEXT | Yes | Yes | — |
INCOMING_TEXT_SOURCE | — | Yes | — |
Complete API response example with an email message record:
{ "data": [ [ "f2e3d4c5-b6a7-8901-2345-6789abcdef01", "c3d4e5f6-a7b8-9012-3456-789abcdef012", "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "b2c3d4e5-f6a7-8901-bcde-f12345678901", "d4e5f6a7-b8c9-0123-4567-89abcdef0123", "Email", "Welcome Back Follow-Up", "Repeat", null, null, "2025-06-15T10:30:00Z", "2025-06-15T09:00:00Z", "2025-06-15T10:30:00Z", "2025-06-15T10:30:05Z", "Delivered", 3, 1, null, false, "We miss you! Come back for a check-up", "Hi Sarah, it's been a while since your last visit. We'd love to see you again for a routine check-up.", null ] ], "metadata": { "rowType": [ {"name": "STEER_TENANT_ID", "type": "text"}, {"name": "STEER_SHOP_ID", "type": "text"}, {"name": "STEER_CUSTOMER_ID", "type": "text"}, {"name": "STEER_MESSAGE_ID", "type": "text"}, {"name": "CAMPAIGN_ID", "type": "text"}, {"name": "MARKETING_TYPE", "type": "text"}, {"name": "CAMPAIGN_NAME", "type": "text"}, {"name": "CAMPAIGN_TYPE", "type": "text"}, {"name": "NOTIFICATION_ID", "type": "fixed"}, {"name": "NOTIFICATION_TYPE", "type": "text"}, {"name": "CREATED_AT", "type": "timestamp_ntz"}, {"name": "SCHEDULED_AT", "type": "timestamp_ntz"}, {"name": "SENT_AT", "type": "timestamp_ntz"}, {"name": "DELIVERED_AT", "type": "timestamp_ntz"}, {"name": "MESSAGE_STATUS", "type": "text"}, {"name": "OPENS_COUNT", "type": "fixed"}, {"name": "CLICKS_COUNT", "type": "fixed"}, {"name": "COUNT_OF_ATTACHMENTS", "type": "fixed"}, {"name": "IS_STEER_FAVORITE", "type": "boolean"}, {"name": "SUBJECT", "type": "text"}, {"name": "TEXT", "type": "text"}, {"name": "INCOMING_TEXT_SOURCE", "type": "text"} ] }}