Every delivery is a POST with JSON body:
{
  "eventId": "2915e81c-5068-4796-ace2-21d2c94ad298",
  "type": "message.received",
  "platform": "imessage",
  "projectId": "proj_…",
  "receivedAt": "2026-07-02T18:04:11.512Z",
  "data": { }
}

Event types

TypeWhen
message.receivedInbound message from a user
message.sentOutbound message confirmed
message.updatedMessage edited
message.failedSend failed
reaction.addedTapback or emoji reaction
reaction.removedReaction removed
typing.startedTyping indicator on
typing.stoppedTyping indicator off
readRead receipt
group.updatedGroup name, participants, or icon changed

Message payload

interface SkylineMessageEvent {
  id: string;
  channelId: string;
  from: string | null;
  text: string;
  fromMe: boolean;
  isGroup: boolean;
  replyTo: string | null;
  service: "imessage" | "sms" | "whatsapp";
  timestamp: string;
  attachments: Array<{
    id: string;
    name: string | null;
    mimeType: string | null;
    size: number | null;
  }>;
}
Attachments carry metadata only — never raw bytes. Fetch content on demand through the attachment API when needed.

Headers

HeaderDescription
x-interactions-signatureHMAC signature of the raw body
x-interactions-timestampUnix timestamp used in the signature