Skip to content
FolioSign inStart your trial

Webhook event catalogue

Outputs events

4 events. All groups

output.created#

Carries contentA devotional, blog post, newsletter or study guide was generated for the first time.

Carries what the REST read of the same resource returns for a key with the matching read scope: titles, summaries, sections and references. Never secrets.

data.object.object is output.

Fields of data.object for output.created
FieldTypeDescription
body_md requiredstringThe full text in markdown.
changes_requested requiredbooleanTrue when a reviewer sent it back.
id requiredstringThe output id.
kind requiredenum: devotional | blog | newsletter | study_guideThe kind of output.
language requiredstringThe output language.
meta requiredobjectKind-specific details such as a subject line.
model_id requiredstringThe model that wrote it.
note requiredobject | nullThe note it was written from.
id requiredstringThe note id.
object requiredenum: noteAlways note.
status requiredenum: draft | in_review | approved | published | superseded | failedThe note status.
note_id requiredstring | nullThe note id, null when none.
object requiredenum: outputAlways output.
prompt_version requiredstringThe prompt version that wrote it.
review_comment requiredstringWhat a reviewer asked to change.
row_version requiredintegerBumps on every change.
sections requiredobject[]The text split into its sections.
body requiredstringThe section text.
heading requiredstringThe section heading.
key requiredstringThe section key.
source_note_id requiredstring | nullThe note version it was written from.
source_version requiredinteger | nullThe note version number it was written from.
stale requiredbooleanTrue when the source note changed since this was written.
stale_acknowledged requiredbooleanTrue when a reviewer accepted the stale state.
stale_reason requiredstringsource_changed, source_unapproved, source_returned or source_superseded; empty when not stale.
status requiredenum: queued | failed | draft | in_review | approved | publishedThe output status.
status_detail requiredstringA short plain note about the status.
teaching requiredobjectThe teaching it was written from.
id requiredstringThe teaching id.
name requiredstringThe teaching title, as every reference object names itself.
object requiredenum: teachingAlways teaching.
recorded_at requiredstring (date-time) | nullWhen the teaching was recorded.
speaker requiredstringThe speaker, empty when unknown.
title requiredstringThe teaching title.
teaching_id requiredstringThe teaching id.
title requiredstringThe output title.
updated_at requiredstring (date-time)When it last changed.
verses requiredobject[]The verses it quotes, with whether each was verified against the text.
ref requiredstringThe reference.
status requiredstringverified or unverified.
warnings requiredstring[]Things to check before publishing.
word_count requiredintegerWords in the body.
Example output.created body
{
  "actor": null,
  "api_version": "2026-12-01",
  "created": "2026-10-13T09:12:10Z",
  "data": {
    "object": {
      "body_md": "The Spirit leads gently, and we follow.",
      "changes_requested": false,
      "id": "out_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "kind": "devotional",
      "language": "en",
      "meta": {
        "subject": "Walk in step with the Spirit"
      },
      "model_id": "gemini-2.5-pro",
      "note": {
        "id": "note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "object": "note",
        "status": "approved"
      },
      "note_id": "note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "object": "output",
      "prompt_version": "outputs.v9",
      "review_comment": "",
      "row_version": 4,
      "sections": [
        {
          "body": "The Spirit leads gently, and we follow.",
          "heading": "Reflection",
          "key": "reflection"
        }
      ],
      "source_note_id": "note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "source_version": 3,
      "stale": false,
      "stale_acknowledged": false,
      "stale_reason": "",
      "status": "published",
      "status_detail": "",
      "teaching": {
        "id": "tch_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "name": "Romans 8: Nothing can separate us",
        "object": "teaching",
        "recorded_at": "2026-10-11T10:00:00Z",
        "speaker": "Pastor Ada Okafor",
        "title": "Romans 8: Nothing can separate us"
      },
      "teaching_id": "tch_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "title": "Walk in step with the Spirit",
      "updated_at": "2026-10-13T09:12:10Z",
      "verses": [
        {
          "ref": "Romans 8:14",
          "status": "verified"
        }
      ],
      "warnings": [],
      "word_count": 412
    }
  },
  "id": "evt_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
  "livemode": false,
  "object": "event",
  "request": {
    "id": "req_5f3c9a1e7b2d4c68a0e1f2d3c4b5a697",
    "idempotency_key": null
  },
  "type": "output.created"
}

output.published#

Carries contentAn output moved to published.

Carries what the REST read of the same resource returns for a key with the matching read scope: titles, summaries, sections and references. Never secrets.

data.object.object is output.

Fields of data.object for output.published
FieldTypeDescription
body_md requiredstringThe full text in markdown.
changes_requested requiredbooleanTrue when a reviewer sent it back.
id requiredstringThe output id.
kind requiredenum: devotional | blog | newsletter | study_guideThe kind of output.
language requiredstringThe output language.
meta requiredobjectKind-specific details such as a subject line.
model_id requiredstringThe model that wrote it.
note requiredobject | nullThe note it was written from.
id requiredstringThe note id.
object requiredenum: noteAlways note.
status requiredenum: draft | in_review | approved | published | superseded | failedThe note status.
note_id requiredstring | nullThe note id, null when none.
object requiredenum: outputAlways output.
prompt_version requiredstringThe prompt version that wrote it.
review_comment requiredstringWhat a reviewer asked to change.
row_version requiredintegerBumps on every change.
sections requiredobject[]The text split into its sections.
body requiredstringThe section text.
heading requiredstringThe section heading.
key requiredstringThe section key.
source_note_id requiredstring | nullThe note version it was written from.
source_version requiredinteger | nullThe note version number it was written from.
stale requiredbooleanTrue when the source note changed since this was written.
stale_acknowledged requiredbooleanTrue when a reviewer accepted the stale state.
stale_reason requiredstringsource_changed, source_unapproved, source_returned or source_superseded; empty when not stale.
status requiredenum: queued | failed | draft | in_review | approved | publishedThe output status.
status_detail requiredstringA short plain note about the status.
teaching requiredobjectThe teaching it was written from.
id requiredstringThe teaching id.
name requiredstringThe teaching title, as every reference object names itself.
object requiredenum: teachingAlways teaching.
recorded_at requiredstring (date-time) | nullWhen the teaching was recorded.
speaker requiredstringThe speaker, empty when unknown.
title requiredstringThe teaching title.
teaching_id requiredstringThe teaching id.
title requiredstringThe output title.
updated_at requiredstring (date-time)When it last changed.
verses requiredobject[]The verses it quotes, with whether each was verified against the text.
ref requiredstringThe reference.
status requiredstringverified or unverified.
warnings requiredstring[]Things to check before publishing.
word_count requiredintegerWords in the body.

On updates, data.previous_attributes holds the earlier value of any of these that changed: status.

Example output.published body
{
  "actor": null,
  "api_version": "2026-12-01",
  "created": "2026-10-13T09:12:10Z",
  "data": {
    "object": {
      "body_md": "The Spirit leads gently, and we follow.",
      "changes_requested": false,
      "id": "out_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "kind": "devotional",
      "language": "en",
      "meta": {
        "subject": "Walk in step with the Spirit"
      },
      "model_id": "gemini-2.5-pro",
      "note": {
        "id": "note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "object": "note",
        "status": "approved"
      },
      "note_id": "note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "object": "output",
      "prompt_version": "outputs.v9",
      "review_comment": "",
      "row_version": 4,
      "sections": [
        {
          "body": "The Spirit leads gently, and we follow.",
          "heading": "Reflection",
          "key": "reflection"
        }
      ],
      "source_note_id": "note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "source_version": 3,
      "stale": false,
      "stale_acknowledged": false,
      "stale_reason": "",
      "status": "published",
      "status_detail": "",
      "teaching": {
        "id": "tch_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "name": "Romans 8: Nothing can separate us",
        "object": "teaching",
        "recorded_at": "2026-10-11T10:00:00Z",
        "speaker": "Pastor Ada Okafor",
        "title": "Romans 8: Nothing can separate us"
      },
      "teaching_id": "tch_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "title": "Walk in step with the Spirit",
      "updated_at": "2026-10-13T09:12:10Z",
      "verses": [
        {
          "ref": "Romans 8:14",
          "status": "verified"
        }
      ],
      "warnings": [],
      "word_count": 412
    },
    "previous_attributes": {
      "status": "queued"
    }
  },
  "id": "evt_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
  "livemode": false,
  "object": "event",
  "request": {
    "id": "req_5f3c9a1e7b2d4c68a0e1f2d3c4b5a697",
    "idempotency_key": null
  },
  "type": "output.published"
}

output.unpublished#

Carries contentA published output was taken back to review. Remove it from wherever you posted it. stale_reason says why when the source changed.

Carries what the REST read of the same resource returns for a key with the matching read scope: titles, summaries, sections and references. Never secrets.

data.object.object is output.

Fields of data.object for output.unpublished
FieldTypeDescription
body_md requiredstringThe full text in markdown.
changes_requested requiredbooleanTrue when a reviewer sent it back.
id requiredstringThe output id.
kind requiredenum: devotional | blog | newsletter | study_guideThe kind of output.
language requiredstringThe output language.
meta requiredobjectKind-specific details such as a subject line.
model_id requiredstringThe model that wrote it.
note requiredobject | nullThe note it was written from.
id requiredstringThe note id.
object requiredenum: noteAlways note.
status requiredenum: draft | in_review | approved | published | superseded | failedThe note status.
note_id requiredstring | nullThe note id, null when none.
object requiredenum: outputAlways output.
prompt_version requiredstringThe prompt version that wrote it.
review_comment requiredstringWhat a reviewer asked to change.
row_version requiredintegerBumps on every change.
sections requiredobject[]The text split into its sections.
body requiredstringThe section text.
heading requiredstringThe section heading.
key requiredstringThe section key.
source_note_id requiredstring | nullThe note version it was written from.
source_version requiredinteger | nullThe note version number it was written from.
stale requiredbooleanTrue when the source note changed since this was written.
stale_acknowledged requiredbooleanTrue when a reviewer accepted the stale state.
stale_reason requiredstringsource_changed, source_unapproved, source_returned or source_superseded; empty when not stale.
status requiredenum: queued | failed | draft | in_review | approved | publishedThe output status.
status_detail requiredstringA short plain note about the status.
teaching requiredobjectThe teaching it was written from.
id requiredstringThe teaching id.
name requiredstringThe teaching title, as every reference object names itself.
object requiredenum: teachingAlways teaching.
recorded_at requiredstring (date-time) | nullWhen the teaching was recorded.
speaker requiredstringThe speaker, empty when unknown.
title requiredstringThe teaching title.
teaching_id requiredstringThe teaching id.
title requiredstringThe output title.
updated_at requiredstring (date-time)When it last changed.
verses requiredobject[]The verses it quotes, with whether each was verified against the text.
ref requiredstringThe reference.
status requiredstringverified or unverified.
warnings requiredstring[]Things to check before publishing.
word_count requiredintegerWords in the body.

On updates, data.previous_attributes holds the earlier value of any of these that changed: status, stale.

Example output.unpublished body
{
  "actor": null,
  "api_version": "2026-12-01",
  "created": "2026-10-13T09:12:10Z",
  "data": {
    "object": {
      "body_md": "The Spirit leads gently, and we follow.",
      "changes_requested": false,
      "id": "out_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "kind": "devotional",
      "language": "en",
      "meta": {
        "subject": "Walk in step with the Spirit"
      },
      "model_id": "gemini-2.5-pro",
      "note": {
        "id": "note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "object": "note",
        "status": "approved"
      },
      "note_id": "note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "object": "output",
      "prompt_version": "outputs.v9",
      "review_comment": "",
      "row_version": 4,
      "sections": [
        {
          "body": "The Spirit leads gently, and we follow.",
          "heading": "Reflection",
          "key": "reflection"
        }
      ],
      "source_note_id": "note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "source_version": 3,
      "stale": false,
      "stale_acknowledged": false,
      "stale_reason": "",
      "status": "published",
      "status_detail": "",
      "teaching": {
        "id": "tch_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "name": "Romans 8: Nothing can separate us",
        "object": "teaching",
        "recorded_at": "2026-10-11T10:00:00Z",
        "speaker": "Pastor Ada Okafor",
        "title": "Romans 8: Nothing can separate us"
      },
      "teaching_id": "tch_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "title": "Walk in step with the Spirit",
      "updated_at": "2026-10-13T09:12:10Z",
      "verses": [
        {
          "ref": "Romans 8:14",
          "status": "verified"
        }
      ],
      "warnings": [],
      "word_count": 412
    },
    "previous_attributes": {
      "stale": true,
      "status": "queued"
    }
  },
  "id": "evt_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
  "livemode": false,
  "object": "event",
  "request": {
    "id": "req_5f3c9a1e7b2d4c68a0e1f2d3c4b5a697",
    "idempotency_key": null
  },
  "type": "output.unpublished"
}

output.stale#

Carries contentThe note an output was written from changed, was returned or was replaced, so the output may no longer match it. stale_reason says which.

Carries what the REST read of the same resource returns for a key with the matching read scope: titles, summaries, sections and references. Never secrets.

data.object.object is output.

Fields of data.object for output.stale
FieldTypeDescription
body_md requiredstringThe full text in markdown.
changes_requested requiredbooleanTrue when a reviewer sent it back.
id requiredstringThe output id.
kind requiredenum: devotional | blog | newsletter | study_guideThe kind of output.
language requiredstringThe output language.
meta requiredobjectKind-specific details such as a subject line.
model_id requiredstringThe model that wrote it.
note requiredobject | nullThe note it was written from.
id requiredstringThe note id.
object requiredenum: noteAlways note.
status requiredenum: draft | in_review | approved | published | superseded | failedThe note status.
note_id requiredstring | nullThe note id, null when none.
object requiredenum: outputAlways output.
prompt_version requiredstringThe prompt version that wrote it.
review_comment requiredstringWhat a reviewer asked to change.
row_version requiredintegerBumps on every change.
sections requiredobject[]The text split into its sections.
body requiredstringThe section text.
heading requiredstringThe section heading.
key requiredstringThe section key.
source_note_id requiredstring | nullThe note version it was written from.
source_version requiredinteger | nullThe note version number it was written from.
stale requiredbooleanTrue when the source note changed since this was written.
stale_acknowledged requiredbooleanTrue when a reviewer accepted the stale state.
stale_reason requiredstringsource_changed, source_unapproved, source_returned or source_superseded; empty when not stale.
status requiredenum: queued | failed | draft | in_review | approved | publishedThe output status.
status_detail requiredstringA short plain note about the status.
teaching requiredobjectThe teaching it was written from.
id requiredstringThe teaching id.
name requiredstringThe teaching title, as every reference object names itself.
object requiredenum: teachingAlways teaching.
recorded_at requiredstring (date-time) | nullWhen the teaching was recorded.
speaker requiredstringThe speaker, empty when unknown.
title requiredstringThe teaching title.
teaching_id requiredstringThe teaching id.
title requiredstringThe output title.
updated_at requiredstring (date-time)When it last changed.
verses requiredobject[]The verses it quotes, with whether each was verified against the text.
ref requiredstringThe reference.
status requiredstringverified or unverified.
warnings requiredstring[]Things to check before publishing.
word_count requiredintegerWords in the body.

On updates, data.previous_attributes holds the earlier value of any of these that changed: stale, stale_reason.

Example output.stale body
{
  "actor": null,
  "api_version": "2026-12-01",
  "created": "2026-10-13T09:12:10Z",
  "data": {
    "object": {
      "body_md": "The Spirit leads gently, and we follow.",
      "changes_requested": false,
      "id": "out_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "kind": "devotional",
      "language": "en",
      "meta": {
        "subject": "Walk in step with the Spirit"
      },
      "model_id": "gemini-2.5-pro",
      "note": {
        "id": "note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "object": "note",
        "status": "approved"
      },
      "note_id": "note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "object": "output",
      "prompt_version": "outputs.v9",
      "review_comment": "",
      "row_version": 4,
      "sections": [
        {
          "body": "The Spirit leads gently, and we follow.",
          "heading": "Reflection",
          "key": "reflection"
        }
      ],
      "source_note_id": "note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "source_version": 3,
      "stale": false,
      "stale_acknowledged": false,
      "stale_reason": "",
      "status": "published",
      "status_detail": "",
      "teaching": {
        "id": "tch_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "name": "Romans 8: Nothing can separate us",
        "object": "teaching",
        "recorded_at": "2026-10-11T10:00:00Z",
        "speaker": "Pastor Ada Okafor",
        "title": "Romans 8: Nothing can separate us"
      },
      "teaching_id": "tch_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "title": "Walk in step with the Spirit",
      "updated_at": "2026-10-13T09:12:10Z",
      "verses": [
        {
          "ref": "Romans 8:14",
          "status": "verified"
        }
      ],
      "warnings": [],
      "word_count": 412
    },
    "previous_attributes": {
      "stale": true,
      "stale_reason": "Previous "
    }
  },
  "id": "evt_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
  "livemode": false,
  "object": "event",
  "request": {
    "id": "req_5f3c9a1e7b2d4c68a0e1f2d3c4b5a697",
    "idempotency_key": null
  },
  "type": "output.stale"
}

Verified against API version 0.0.0-dev. Generated from the live OpenAPI document.