> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tryordinal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# post.published

> Fired when a post is successfully published to a social channel

All webhook payloads follow a consistent top-level structure with event-specific data nested within the `data` object.

<ResponseField name="type" type="string" required>
  The event type (e.g. `post.published`).
</ResponseField>

<ResponseField name="data" type="object" required>
  Event-specific payload for this webhook.

  <Expandable title="Data object parameters">
    <ResponseField name="post" type="object" required>
      The published post.

      <Expandable title="Post object parameters">
        <ResponseField name="id" type="string" required>
          Post ID.
        </ResponseField>

        <ResponseField name="title" type="string" required>
          Post title.
        </ResponseField>

        <ResponseField name="channel" type="string" required>
          Channel where the post was published (e.g. LinkedIn, Twitter).
        </ResponseField>

        <ResponseField name="campaign" type="object | null">
          Campaign if the post is assigned to one. Contains `id`, `name`, `startDate`, and `endDate`.
        </ResponseField>

        <ResponseField name="url" type="string" required>
          Ordinal post URL.
        </ResponseField>

        <ResponseField name="postUrl" type="string | null">
          Published URL on the social platform.
        </ResponseField>

        <ResponseField name="profile" type="object" required>
          Profile that published the post. Contains `id`, `name`, and `detail`.
        </ResponseField>

        <ResponseField name="workspace" type="object" required>
          Workspace the post belongs to. Contains `id`, `slug`, and `name`.
        </ResponseField>

        <ResponseField name="publishedBy" type="object" required>
          User who triggered the publish. Contains `id`, `firstName`, `lastName`, and `email`.
        </ResponseField>

        <ResponseField name="publishedAt" type="string" required>
          ISO 8601 timestamp when the post was published.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="createdAt" type="string" required>
  ISO 8601 timestamp when the webhook event was created.
</ResponseField>

<ResponseExample>
  ```json Example theme={null}
  {
    "type": "post.published",
    "data": {
      "post": {
        "id": "550e8400-e29b-41d4-a716-446655440001",
        "title": "Q4 Product Launch Announcement",
        "channel": "LinkedIn",
        "campaign": {
          "id": "550e8400-e29b-41d4-a716-446655440003",
          "name": "Launch 2025",
          "startDate": "2025-01-01",
          "endDate": "2025-12-31"
        },
        "url": "https://app.tryordinal.com/acme/posts/550e8400-e29b-41d4-a716-446655440001",
        "postUrl": "https://www.linkedin.com/feed/update/urn:li:share:7123456789012345678",
        "profile": {
          "id": "550e8400-e29b-41d4-a716-446655440002",
          "name": "Acme Inc",
          "detail": "acme-inc"
        },
        "workspace": {
          "id": "550e8400-e29b-41d4-a716-446655440000",
          "slug": "acme",
          "name": "Acme Inc"
        },
        "publishedBy": {
          "id": "550e8400-e29b-41d4-a716-446655440010",
          "firstName": "Jane",
          "lastName": "Doe",
          "email": "jane@example.com"
        },
        "publishedAt": "2025-02-26T14:30:00.000Z"
      }
    },
    "createdAt": "2025-02-26T14:30:00.000Z"
  }
  ```
</ResponseExample>
