Skip to content
FolioSign inStart your trial

Webhook event catalogue

Notes events

7 events. All groups

note.draft_created#

Carries contentA draft note was generated from a transcript.

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 note.

Fields of data.object for note.draft_created
FieldTypeDescription
approval_kind requiredenum: human | automatic | nullHow it was approved: human or automatic; null before approval.
approved_at requiredstring (date-time) | nullWhen it was approved.
church requiredstringThe church name printed on the note.
created_at requiredstring (date-time)When the first draft was written.
failure_reason requiredstringA short plain reason when generation failed.
id requiredstringThe note id.
model_id requiredstringThe model that wrote it.
needs_person_reason requiredstringWhy automatic approval stopped for a person, empty otherwise.
object requiredenum: noteAlways note.
prompt_version requiredstringThe prompt version that wrote it.
published_at requiredstring (date-time) | nullWhen it was published.
returned_reason requiredstringWhat a reviewer asked to change, empty when nothing was returned.
row_version requiredintegerBumps on every change; use it for If-Match.
sections requiredobject[]The note body in order.
body requiredstringThe section text in markdown.
h requiredstringThe section heading.
share_path requiredstringThe share page path, empty until published.
share_slug requiredstringThe share page slug, empty until published.
speaker requiredstringThe speaker printed on the note.
speaker_evidence requiredstringWhy that speaker was guessed.
speaker_inferred requiredbooleanTrue when the speaker was guessed.
status requiredenum: draft | in_review | approved | published | superseded | failedThe note status.
summary requiredstringThe short summary.
teaching requiredobjectThe teaching the note summarises.
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.
updated_at requiredstring (date-time)When it last changed.
version requiredintegerThe saved version number.
warnings requiredstring[]Things the team should check before publishing.
Example note.draft_created body
{
  "actor": null,
  "api_version": "2026-12-01",
  "created": "2026-10-13T09:12:10Z",
  "data": {
    "object": {
      "approval_kind": "human",
      "approved_at": "2026-10-13T09:00:00Z",
      "church": "Grace Place",
      "created_at": "2026-10-13T09:12:10Z",
      "failure_reason": "",
      "id": "note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "model_id": "gemini-2.5-pro",
      "needs_person_reason": "",
      "object": "note",
      "prompt_version": "notes.v14",
      "published_at": "2026-10-13T09:12:10Z",
      "returned_reason": "",
      "row_version": 5,
      "sections": [
        {
          "body": "Paul reminds us that nothing in our hardest seasons is wasted.",
          "h": "Called by purpose"
        }
      ],
      "share_path": "/s/romans-8-nothing-can-separate-us",
      "share_slug": "romans-8-nothing-can-separate-us",
      "speaker": "Pastor Ada Okafor",
      "speaker_evidence": "",
      "speaker_inferred": false,
      "status": "published",
      "summary": "God works all things together for good for those who love him.",
      "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"
      },
      "updated_at": "2026-10-13T09:12:10Z",
      "version": 3,
      "warnings": []
    }
  },
  "id": "evt_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
  "livemode": false,
  "object": "event",
  "request": {
    "id": "req_5f3c9a1e7b2d4c68a0e1f2d3c4b5a697",
    "idempotency_key": null
  },
  "type": "note.draft_created"
}

note.updated#

Carries contentA draft or in-review note was edited and a new version was saved.

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 note.

Fields of data.object for note.updated
FieldTypeDescription
approval_kind requiredenum: human | automatic | nullHow it was approved: human or automatic; null before approval.
approved_at requiredstring (date-time) | nullWhen it was approved.
church requiredstringThe church name printed on the note.
created_at requiredstring (date-time)When the first draft was written.
failure_reason requiredstringA short plain reason when generation failed.
id requiredstringThe note id.
model_id requiredstringThe model that wrote it.
needs_person_reason requiredstringWhy automatic approval stopped for a person, empty otherwise.
object requiredenum: noteAlways note.
prompt_version requiredstringThe prompt version that wrote it.
published_at requiredstring (date-time) | nullWhen it was published.
returned_reason requiredstringWhat a reviewer asked to change, empty when nothing was returned.
row_version requiredintegerBumps on every change; use it for If-Match.
sections requiredobject[]The note body in order.
body requiredstringThe section text in markdown.
h requiredstringThe section heading.
share_path requiredstringThe share page path, empty until published.
share_slug requiredstringThe share page slug, empty until published.
speaker requiredstringThe speaker printed on the note.
speaker_evidence requiredstringWhy that speaker was guessed.
speaker_inferred requiredbooleanTrue when the speaker was guessed.
status requiredenum: draft | in_review | approved | published | superseded | failedThe note status.
summary requiredstringThe short summary.
teaching requiredobjectThe teaching the note summarises.
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.
updated_at requiredstring (date-time)When it last changed.
version requiredintegerThe saved version number.
warnings requiredstring[]Things the team should check before publishing.

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

Example note.updated body
{
  "actor": null,
  "api_version": "2026-12-01",
  "created": "2026-10-13T09:12:10Z",
  "data": {
    "object": {
      "approval_kind": "human",
      "approved_at": "2026-10-13T09:00:00Z",
      "church": "Grace Place",
      "created_at": "2026-10-13T09:12:10Z",
      "failure_reason": "",
      "id": "note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "model_id": "gemini-2.5-pro",
      "needs_person_reason": "",
      "object": "note",
      "prompt_version": "notes.v14",
      "published_at": "2026-10-13T09:12:10Z",
      "returned_reason": "",
      "row_version": 5,
      "sections": [
        {
          "body": "Paul reminds us that nothing in our hardest seasons is wasted.",
          "h": "Called by purpose"
        }
      ],
      "share_path": "/s/romans-8-nothing-can-separate-us",
      "share_slug": "romans-8-nothing-can-separate-us",
      "speaker": "Pastor Ada Okafor",
      "speaker_evidence": "",
      "speaker_inferred": false,
      "status": "published",
      "summary": "God works all things together for good for those who love him.",
      "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"
      },
      "updated_at": "2026-10-13T09:12:10Z",
      "version": 3,
      "warnings": []
    },
    "previous_attributes": {
      "row_version": 4,
      "summary": "Previous God works all things together for good for those who love him.",
      "version": 2
    }
  },
  "id": "evt_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
  "livemode": false,
  "object": "event",
  "request": {
    "id": "req_5f3c9a1e7b2d4c68a0e1f2d3c4b5a697",
    "idempotency_key": null
  },
  "type": "note.updated"
}

note.review_requested#

Carries contentA note was sent for review.

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 note.

Fields of data.object for note.review_requested
FieldTypeDescription
approval_kind requiredenum: human | automatic | nullHow it was approved: human or automatic; null before approval.
approved_at requiredstring (date-time) | nullWhen it was approved.
church requiredstringThe church name printed on the note.
created_at requiredstring (date-time)When the first draft was written.
failure_reason requiredstringA short plain reason when generation failed.
id requiredstringThe note id.
model_id requiredstringThe model that wrote it.
needs_person_reason requiredstringWhy automatic approval stopped for a person, empty otherwise.
object requiredenum: noteAlways note.
prompt_version requiredstringThe prompt version that wrote it.
published_at requiredstring (date-time) | nullWhen it was published.
returned_reason requiredstringWhat a reviewer asked to change, empty when nothing was returned.
row_version requiredintegerBumps on every change; use it for If-Match.
sections requiredobject[]The note body in order.
body requiredstringThe section text in markdown.
h requiredstringThe section heading.
share_path requiredstringThe share page path, empty until published.
share_slug requiredstringThe share page slug, empty until published.
speaker requiredstringThe speaker printed on the note.
speaker_evidence requiredstringWhy that speaker was guessed.
speaker_inferred requiredbooleanTrue when the speaker was guessed.
status requiredenum: draft | in_review | approved | published | superseded | failedThe note status.
summary requiredstringThe short summary.
teaching requiredobjectThe teaching the note summarises.
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.
updated_at requiredstring (date-time)When it last changed.
version requiredintegerThe saved version number.
warnings requiredstring[]Things the team should check before publishing.

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

Example note.review_requested body
{
  "actor": null,
  "api_version": "2026-12-01",
  "created": "2026-10-13T09:12:10Z",
  "data": {
    "object": {
      "approval_kind": "human",
      "approved_at": "2026-10-13T09:00:00Z",
      "church": "Grace Place",
      "created_at": "2026-10-13T09:12:10Z",
      "failure_reason": "",
      "id": "note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "model_id": "gemini-2.5-pro",
      "needs_person_reason": "",
      "object": "note",
      "prompt_version": "notes.v14",
      "published_at": "2026-10-13T09:12:10Z",
      "returned_reason": "",
      "row_version": 5,
      "sections": [
        {
          "body": "Paul reminds us that nothing in our hardest seasons is wasted.",
          "h": "Called by purpose"
        }
      ],
      "share_path": "/s/romans-8-nothing-can-separate-us",
      "share_slug": "romans-8-nothing-can-separate-us",
      "speaker": "Pastor Ada Okafor",
      "speaker_evidence": "",
      "speaker_inferred": false,
      "status": "published",
      "summary": "God works all things together for good for those who love him.",
      "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"
      },
      "updated_at": "2026-10-13T09:12:10Z",
      "version": 3,
      "warnings": []
    },
    "previous_attributes": {
      "status": "draft"
    }
  },
  "id": "evt_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
  "livemode": false,
  "object": "event",
  "request": {
    "id": "req_5f3c9a1e7b2d4c68a0e1f2d3c4b5a697",
    "idempotency_key": null
  },
  "type": "note.review_requested"
}

note.approved#

Carries contentA note was approved, by a person or automatically. approval_kind 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 note.

Fields of data.object for note.approved
FieldTypeDescription
approval_kind requiredenum: human | automatic | nullHow it was approved: human or automatic; null before approval.
approved_at requiredstring (date-time) | nullWhen it was approved.
church requiredstringThe church name printed on the note.
created_at requiredstring (date-time)When the first draft was written.
failure_reason requiredstringA short plain reason when generation failed.
id requiredstringThe note id.
model_id requiredstringThe model that wrote it.
needs_person_reason requiredstringWhy automatic approval stopped for a person, empty otherwise.
object requiredenum: noteAlways note.
prompt_version requiredstringThe prompt version that wrote it.
published_at requiredstring (date-time) | nullWhen it was published.
returned_reason requiredstringWhat a reviewer asked to change, empty when nothing was returned.
row_version requiredintegerBumps on every change; use it for If-Match.
sections requiredobject[]The note body in order.
body requiredstringThe section text in markdown.
h requiredstringThe section heading.
share_path requiredstringThe share page path, empty until published.
share_slug requiredstringThe share page slug, empty until published.
speaker requiredstringThe speaker printed on the note.
speaker_evidence requiredstringWhy that speaker was guessed.
speaker_inferred requiredbooleanTrue when the speaker was guessed.
status requiredenum: draft | in_review | approved | published | superseded | failedThe note status.
summary requiredstringThe short summary.
teaching requiredobjectThe teaching the note summarises.
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.
updated_at requiredstring (date-time)When it last changed.
version requiredintegerThe saved version number.
warnings requiredstring[]Things the team should check before publishing.

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

Example note.approved body
{
  "actor": null,
  "api_version": "2026-12-01",
  "created": "2026-10-13T09:12:10Z",
  "data": {
    "object": {
      "approval_kind": "human",
      "approved_at": "2026-10-13T09:00:00Z",
      "church": "Grace Place",
      "created_at": "2026-10-13T09:12:10Z",
      "failure_reason": "",
      "id": "note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "model_id": "gemini-2.5-pro",
      "needs_person_reason": "",
      "object": "note",
      "prompt_version": "notes.v14",
      "published_at": "2026-10-13T09:12:10Z",
      "returned_reason": "",
      "row_version": 5,
      "sections": [
        {
          "body": "Paul reminds us that nothing in our hardest seasons is wasted.",
          "h": "Called by purpose"
        }
      ],
      "share_path": "/s/romans-8-nothing-can-separate-us",
      "share_slug": "romans-8-nothing-can-separate-us",
      "speaker": "Pastor Ada Okafor",
      "speaker_evidence": "",
      "speaker_inferred": false,
      "status": "published",
      "summary": "God works all things together for good for those who love him.",
      "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"
      },
      "updated_at": "2026-10-13T09:12:10Z",
      "version": 3,
      "warnings": []
    },
    "previous_attributes": {
      "status": "draft"
    }
  },
  "id": "evt_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
  "livemode": false,
  "object": "event",
  "request": {
    "id": "req_5f3c9a1e7b2d4c68a0e1f2d3c4b5a697",
    "idempotency_key": null
  },
  "type": "note.approved"
}

note.returned#

Carries contentA reviewer sent a note back to its author with a reason. returned_reason carries it.

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 note.

Fields of data.object for note.returned
FieldTypeDescription
approval_kind requiredenum: human | automatic | nullHow it was approved: human or automatic; null before approval.
approved_at requiredstring (date-time) | nullWhen it was approved.
church requiredstringThe church name printed on the note.
created_at requiredstring (date-time)When the first draft was written.
failure_reason requiredstringA short plain reason when generation failed.
id requiredstringThe note id.
model_id requiredstringThe model that wrote it.
needs_person_reason requiredstringWhy automatic approval stopped for a person, empty otherwise.
object requiredenum: noteAlways note.
prompt_version requiredstringThe prompt version that wrote it.
published_at requiredstring (date-time) | nullWhen it was published.
returned_reason requiredstringWhat a reviewer asked to change, empty when nothing was returned.
row_version requiredintegerBumps on every change; use it for If-Match.
sections requiredobject[]The note body in order.
body requiredstringThe section text in markdown.
h requiredstringThe section heading.
share_path requiredstringThe share page path, empty until published.
share_slug requiredstringThe share page slug, empty until published.
speaker requiredstringThe speaker printed on the note.
speaker_evidence requiredstringWhy that speaker was guessed.
speaker_inferred requiredbooleanTrue when the speaker was guessed.
status requiredenum: draft | in_review | approved | published | superseded | failedThe note status.
summary requiredstringThe short summary.
teaching requiredobjectThe teaching the note summarises.
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.
updated_at requiredstring (date-time)When it last changed.
version requiredintegerThe saved version number.
warnings requiredstring[]Things the team should check before publishing.

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

Example note.returned body
{
  "actor": null,
  "api_version": "2026-12-01",
  "created": "2026-10-13T09:12:10Z",
  "data": {
    "object": {
      "approval_kind": "human",
      "approved_at": "2026-10-13T09:00:00Z",
      "church": "Grace Place",
      "created_at": "2026-10-13T09:12:10Z",
      "failure_reason": "",
      "id": "note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "model_id": "gemini-2.5-pro",
      "needs_person_reason": "",
      "object": "note",
      "prompt_version": "notes.v14",
      "published_at": "2026-10-13T09:12:10Z",
      "returned_reason": "",
      "row_version": 5,
      "sections": [
        {
          "body": "Paul reminds us that nothing in our hardest seasons is wasted.",
          "h": "Called by purpose"
        }
      ],
      "share_path": "/s/romans-8-nothing-can-separate-us",
      "share_slug": "romans-8-nothing-can-separate-us",
      "speaker": "Pastor Ada Okafor",
      "speaker_evidence": "",
      "speaker_inferred": false,
      "status": "published",
      "summary": "God works all things together for good for those who love him.",
      "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"
      },
      "updated_at": "2026-10-13T09:12:10Z",
      "version": 3,
      "warnings": []
    },
    "previous_attributes": {
      "status": "draft"
    }
  },
  "id": "evt_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
  "livemode": false,
  "object": "event",
  "request": {
    "id": "req_5f3c9a1e7b2d4c68a0e1f2d3c4b5a697",
    "idempotency_key": null
  },
  "type": "note.returned"
}

note.published#

Carries contentA note was published to its share page.

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 note.

Fields of data.object for note.published
FieldTypeDescription
approval_kind requiredenum: human | automatic | nullHow it was approved: human or automatic; null before approval.
approved_at requiredstring (date-time) | nullWhen it was approved.
church requiredstringThe church name printed on the note.
created_at requiredstring (date-time)When the first draft was written.
failure_reason requiredstringA short plain reason when generation failed.
id requiredstringThe note id.
model_id requiredstringThe model that wrote it.
needs_person_reason requiredstringWhy automatic approval stopped for a person, empty otherwise.
object requiredenum: noteAlways note.
prompt_version requiredstringThe prompt version that wrote it.
published_at requiredstring (date-time) | nullWhen it was published.
returned_reason requiredstringWhat a reviewer asked to change, empty when nothing was returned.
row_version requiredintegerBumps on every change; use it for If-Match.
sections requiredobject[]The note body in order.
body requiredstringThe section text in markdown.
h requiredstringThe section heading.
share_path requiredstringThe share page path, empty until published.
share_slug requiredstringThe share page slug, empty until published.
speaker requiredstringThe speaker printed on the note.
speaker_evidence requiredstringWhy that speaker was guessed.
speaker_inferred requiredbooleanTrue when the speaker was guessed.
status requiredenum: draft | in_review | approved | published | superseded | failedThe note status.
summary requiredstringThe short summary.
teaching requiredobjectThe teaching the note summarises.
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.
updated_at requiredstring (date-time)When it last changed.
version requiredintegerThe saved version number.
warnings requiredstring[]Things the team should check before publishing.

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

Example note.published body
{
  "actor": null,
  "api_version": "2026-12-01",
  "created": "2026-10-13T09:12:10Z",
  "data": {
    "object": {
      "approval_kind": "human",
      "approved_at": "2026-10-13T09:00:00Z",
      "church": "Grace Place",
      "created_at": "2026-10-13T09:12:10Z",
      "failure_reason": "",
      "id": "note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "model_id": "gemini-2.5-pro",
      "needs_person_reason": "",
      "object": "note",
      "prompt_version": "notes.v14",
      "published_at": "2026-10-13T09:12:10Z",
      "returned_reason": "",
      "row_version": 5,
      "sections": [
        {
          "body": "Paul reminds us that nothing in our hardest seasons is wasted.",
          "h": "Called by purpose"
        }
      ],
      "share_path": "/s/romans-8-nothing-can-separate-us",
      "share_slug": "romans-8-nothing-can-separate-us",
      "speaker": "Pastor Ada Okafor",
      "speaker_evidence": "",
      "speaker_inferred": false,
      "status": "published",
      "summary": "God works all things together for good for those who love him.",
      "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"
      },
      "updated_at": "2026-10-13T09:12:10Z",
      "version": 3,
      "warnings": []
    },
    "previous_attributes": {
      "status": "draft"
    }
  },
  "id": "evt_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
  "livemode": false,
  "object": "event",
  "request": {
    "id": "req_5f3c9a1e7b2d4c68a0e1f2d3c4b5a697",
    "idempotency_key": null
  },
  "type": "note.published"
}

note.superseded#

Carries contentA note was replaced and its share page was unpublished.

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 note.

Fields of data.object for note.superseded
FieldTypeDescription
approval_kind requiredenum: human | automatic | nullHow it was approved: human or automatic; null before approval.
approved_at requiredstring (date-time) | nullWhen it was approved.
church requiredstringThe church name printed on the note.
created_at requiredstring (date-time)When the first draft was written.
failure_reason requiredstringA short plain reason when generation failed.
id requiredstringThe note id.
model_id requiredstringThe model that wrote it.
needs_person_reason requiredstringWhy automatic approval stopped for a person, empty otherwise.
object requiredenum: noteAlways note.
prompt_version requiredstringThe prompt version that wrote it.
published_at requiredstring (date-time) | nullWhen it was published.
returned_reason requiredstringWhat a reviewer asked to change, empty when nothing was returned.
row_version requiredintegerBumps on every change; use it for If-Match.
sections requiredobject[]The note body in order.
body requiredstringThe section text in markdown.
h requiredstringThe section heading.
share_path requiredstringThe share page path, empty until published.
share_slug requiredstringThe share page slug, empty until published.
speaker requiredstringThe speaker printed on the note.
speaker_evidence requiredstringWhy that speaker was guessed.
speaker_inferred requiredbooleanTrue when the speaker was guessed.
status requiredenum: draft | in_review | approved | published | superseded | failedThe note status.
summary requiredstringThe short summary.
teaching requiredobjectThe teaching the note summarises.
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.
updated_at requiredstring (date-time)When it last changed.
version requiredintegerThe saved version number.
warnings requiredstring[]Things the team should check before publishing.

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

Example note.superseded body
{
  "actor": null,
  "api_version": "2026-12-01",
  "created": "2026-10-13T09:12:10Z",
  "data": {
    "object": {
      "approval_kind": "human",
      "approved_at": "2026-10-13T09:00:00Z",
      "church": "Grace Place",
      "created_at": "2026-10-13T09:12:10Z",
      "failure_reason": "",
      "id": "note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "model_id": "gemini-2.5-pro",
      "needs_person_reason": "",
      "object": "note",
      "prompt_version": "notes.v14",
      "published_at": "2026-10-13T09:12:10Z",
      "returned_reason": "",
      "row_version": 5,
      "sections": [
        {
          "body": "Paul reminds us that nothing in our hardest seasons is wasted.",
          "h": "Called by purpose"
        }
      ],
      "share_path": "/s/romans-8-nothing-can-separate-us",
      "share_slug": "romans-8-nothing-can-separate-us",
      "speaker": "Pastor Ada Okafor",
      "speaker_evidence": "",
      "speaker_inferred": false,
      "status": "published",
      "summary": "God works all things together for good for those who love him.",
      "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"
      },
      "updated_at": "2026-10-13T09:12:10Z",
      "version": 3,
      "warnings": []
    },
    "previous_attributes": {
      "status": "draft"
    }
  },
  "id": "evt_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
  "livemode": false,
  "object": "event",
  "request": {
    "id": "req_5f3c9a1e7b2d4c68a0e1f2d3c4b5a697",
    "idempotency_key": null
  },
  "type": "note.superseded"
}

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