> ## 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.approval.approved

> Fired when an approver grants approval for a post

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.approval.approved`).
</ResponseField>

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

  <Expandable title="Data object parameters">
    <ResponseField name="approval" type="object" required>
      The approval that was granted.

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

        <ResponseField name="isBlocking" type="boolean" required>
          Whether this approval blocked publishing until granted.
        </ResponseField>

        <ResponseField name="message" type="string">
          Optional message attached to the approval request.
        </ResponseField>

        <ResponseField name="dueDate" type="string">
          ISO 8601 due date for the approval, if set.
        </ResponseField>

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

        <ResponseField name="status" type="string" required>
          Always `Approved` for this event.
        </ResponseField>

        <ResponseField name="approvedAt" type="string" required>
          ISO 8601 timestamp when the approver granted approval.
        </ResponseField>

        <ResponseField name="approvedBy" type="object" required>
          User who approved. Contains `id`, `firstName`, `lastName`, and `email`.
        </ResponseField>

        <ResponseField name="requestedBy" type="object" required>
          User who originally requested approval. Contains `id`, `firstName`, `lastName`, and `email`.
        </ResponseField>

        <ResponseField name="post" type="object" required>
          Post that was approved. Contains `id`, `title`, and `url`.
        </ResponseField>

        <ResponseField name="campaign" type="object">
          Campaign the post belongs to, if any. Contains `id`, `name`, `startDate`, and `endDate`.
        </ResponseField>

        <ResponseField name="workspace" type="object" required>
          Workspace the post belongs to. Contains `id`, `slug`, and `name`.
        </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.approval.approved",
    "data": {
      "approval": {
        "id": "550e8400-e29b-41d4-a716-446655440700",
        "isBlocking": true,
        "message": "Please review before we publish.",
        "dueDate": "2025-02-28T17:00:00.000Z",
        "createdAt": "2025-02-26T14:00:00.000Z",
        "status": "Approved",
        "approvedAt": "2025-02-26T15:30:00.000Z",
        "approvedBy": {
          "id": "550e8400-e29b-41d4-a716-446655440020",
          "firstName": "Alex",
          "lastName": "Rivera",
          "email": "alex@example.com"
        },
        "requestedBy": {
          "id": "550e8400-e29b-41d4-a716-446655440010",
          "firstName": "Jane",
          "lastName": "Doe",
          "email": "jane@example.com"
        },
        "post": {
          "id": "550e8400-e29b-41d4-a716-446655440001",
          "title": "Q4 Product Launch Announcement",
          "url": "https://app.tryordinal.com/acme/posts/550e8400-e29b-41d4-a716-446655440001"
        },
        "campaign": {
          "id": "550e8400-e29b-41d4-a716-446655440003",
          "name": "Launch 2025",
          "startDate": "2025-01-01",
          "endDate": "2025-12-31"
        },
        "workspace": {
          "id": "550e8400-e29b-41d4-a716-446655440000",
          "slug": "acme",
          "name": "Acme Inc"
        }
      }
    },
    "createdAt": "2025-02-26T15:30:00.000Z"
  }
  ```
</ResponseExample>
