Skip to content
FolioSign inStart your trial

Webhook event catalogue

Teachings events

5 events. All groups

teaching.created#

Carries contentA teaching was added by upload, link, YouTube, Drive or a finished live service.

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

Fields of data.object for teaching.created
FieldTypeDescription
created_at requiredstring (date-time)When the teaching was added.
duration_seconds requiredintegerThe spoken length in seconds.
failure_reason requiredstringA short plain reason when it failed, empty otherwise.
guest_affiliation requiredstringThe guest speaker's church or organisation.
id requiredstringThe teaching id.
is_guest requiredbooleanTrue when the speaker is a guest.
name requiredstringThe teaching title, as every reference object names itself.
object requiredenum: teachingAlways teaching.
passage requiredstringThe main passage, empty when none was set.
possible_duplicate_ofobjectA teaching Folio thinks this repeats.
id requiredstringThe other teaching id.
reason requiredstringWhy they look alike.
title requiredstringThe other teaching title.
progressobjectHow far processing has got.
current requiredobject | nullThe step running now, null when none.
finished_atstring (date-time)When the step finished.
key requiredstringThe step key.
label requiredstringThe step name shown to the team.
note requiredstringA short plain note about the step.
started_atstring (date-time)When the step began.
state requiredstringWhere the step stands: pending, active, waiting, decision, done, skipped or failed.
needs_decision requiredbooleanTrue when a person must decide something before it continues.
steps requiredobject[]The processing steps in order.
finished_atstring (date-time)When the step finished.
key requiredstringThe step key.
label requiredstringThe step name shown to the team.
note requiredstringA short plain note about the step.
started_atstring (date-time)When the step began.
state requiredstringWhere the step stands: pending, active, waiting, decision, done, skipped or failed.
recorded_at requiredstring (date-time) | nullWhen it was recorded.
series requiredstringThe series it belongs to, empty when none.
source requiredobject | nullWhere it came from, null for a one-off upload.
id requiredstringThe source id.
kind requiredstringupload, link, youtube, drive or live.
name requiredstringThe source name.
object requiredenum: sourceAlways source.
speaker requiredstringThe speaker, empty when unknown.
speaker_evidence requiredstringWhy Folio guessed that speaker, empty when it did not.
speaker_inferred requiredbooleanTrue when Folio guessed the speaker from the recording.
status requiredenum: awaiting_upload | queued | ingested | resolving | processing | ready | failedWhere processing stands.
status_note requiredstringA short plain note about the current status.
title requiredstringThe teaching title.
transcript_changed requiredbooleanTrue when the transcript was edited after the notes were written.
Example teaching.created body
{
  "actor": null,
  "api_version": "2026-12-01",
  "created": "2026-10-13T09:12:10Z",
  "data": {
    "object": {
      "created_at": "2026-10-13T09:12:10Z",
      "duration_seconds": 2412,
      "failure_reason": "",
      "guest_affiliation": "",
      "id": "tch_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "is_guest": false,
      "name": "Romans 8: Nothing can separate us",
      "object": "teaching",
      "passage": "Romans 8:31-39",
      "possible_duplicate_of": {
        "id": "tch_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9099",
        "reason": "same recording length and transcript",
        "title": "Romans 8: Nothing can separate us"
      },
      "progress": {
        "current": {
          "finished_at": "2026-10-13T09:12:10Z",
          "key": "transcribe",
          "label": "Transcribing",
          "note": "",
          "started_at": "2026-10-13T09:12:10Z",
          "state": "done"
        },
        "needs_decision": false,
        "steps": [
          {
            "finished_at": "2026-10-13T09:12:10Z",
            "key": "transcribe",
            "label": "Transcribing",
            "note": "",
            "started_at": "2026-10-13T09:12:10Z",
            "state": "done"
          }
        ]
      },
      "recorded_at": "2026-10-11T10:00:00Z",
      "series": "Romans",
      "source": {
        "id": "src_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "kind": "upload",
        "name": "Sunday uploads",
        "object": "source"
      },
      "speaker": "Pastor Ada Okafor",
      "speaker_evidence": "",
      "speaker_inferred": false,
      "status": "ready",
      "status_note": "",
      "title": "Romans 8: Nothing can separate us",
      "transcript_changed": false
    }
  },
  "id": "evt_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
  "livemode": false,
  "object": "event",
  "request": {
    "id": "req_5f3c9a1e7b2d4c68a0e1f2d3c4b5a697",
    "idempotency_key": null
  },
  "type": "teaching.created"
}

teaching.ready#

Carries contentA teaching finished processing and is searchable.

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

Fields of data.object for teaching.ready
FieldTypeDescription
created_at requiredstring (date-time)When the teaching was added.
duration_seconds requiredintegerThe spoken length in seconds.
failure_reason requiredstringA short plain reason when it failed, empty otherwise.
guest_affiliation requiredstringThe guest speaker's church or organisation.
id requiredstringThe teaching id.
is_guest requiredbooleanTrue when the speaker is a guest.
name requiredstringThe teaching title, as every reference object names itself.
object requiredenum: teachingAlways teaching.
passage requiredstringThe main passage, empty when none was set.
possible_duplicate_ofobjectA teaching Folio thinks this repeats.
id requiredstringThe other teaching id.
reason requiredstringWhy they look alike.
title requiredstringThe other teaching title.
progressobjectHow far processing has got.
current requiredobject | nullThe step running now, null when none.
finished_atstring (date-time)When the step finished.
key requiredstringThe step key.
label requiredstringThe step name shown to the team.
note requiredstringA short plain note about the step.
started_atstring (date-time)When the step began.
state requiredstringWhere the step stands: pending, active, waiting, decision, done, skipped or failed.
needs_decision requiredbooleanTrue when a person must decide something before it continues.
steps requiredobject[]The processing steps in order.
finished_atstring (date-time)When the step finished.
key requiredstringThe step key.
label requiredstringThe step name shown to the team.
note requiredstringA short plain note about the step.
started_atstring (date-time)When the step began.
state requiredstringWhere the step stands: pending, active, waiting, decision, done, skipped or failed.
recorded_at requiredstring (date-time) | nullWhen it was recorded.
series requiredstringThe series it belongs to, empty when none.
source requiredobject | nullWhere it came from, null for a one-off upload.
id requiredstringThe source id.
kind requiredstringupload, link, youtube, drive or live.
name requiredstringThe source name.
object requiredenum: sourceAlways source.
speaker requiredstringThe speaker, empty when unknown.
speaker_evidence requiredstringWhy Folio guessed that speaker, empty when it did not.
speaker_inferred requiredbooleanTrue when Folio guessed the speaker from the recording.
status requiredenum: awaiting_upload | queued | ingested | resolving | processing | ready | failedWhere processing stands.
status_note requiredstringA short plain note about the current status.
title requiredstringThe teaching title.
transcript_changed requiredbooleanTrue when the transcript was edited after the notes were written.

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

Example teaching.ready body
{
  "actor": null,
  "api_version": "2026-12-01",
  "created": "2026-10-13T09:12:10Z",
  "data": {
    "object": {
      "created_at": "2026-10-13T09:12:10Z",
      "duration_seconds": 2412,
      "failure_reason": "",
      "guest_affiliation": "",
      "id": "tch_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "is_guest": false,
      "name": "Romans 8: Nothing can separate us",
      "object": "teaching",
      "passage": "Romans 8:31-39",
      "possible_duplicate_of": {
        "id": "tch_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9099",
        "reason": "same recording length and transcript",
        "title": "Romans 8: Nothing can separate us"
      },
      "progress": {
        "current": {
          "finished_at": "2026-10-13T09:12:10Z",
          "key": "transcribe",
          "label": "Transcribing",
          "note": "",
          "started_at": "2026-10-13T09:12:10Z",
          "state": "done"
        },
        "needs_decision": false,
        "steps": [
          {
            "finished_at": "2026-10-13T09:12:10Z",
            "key": "transcribe",
            "label": "Transcribing",
            "note": "",
            "started_at": "2026-10-13T09:12:10Z",
            "state": "done"
          }
        ]
      },
      "recorded_at": "2026-10-11T10:00:00Z",
      "series": "Romans",
      "source": {
        "id": "src_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "kind": "upload",
        "name": "Sunday uploads",
        "object": "source"
      },
      "speaker": "Pastor Ada Okafor",
      "speaker_evidence": "",
      "speaker_inferred": false,
      "status": "ready",
      "status_note": "",
      "title": "Romans 8: Nothing can separate us",
      "transcript_changed": false
    },
    "previous_attributes": {
      "duration_seconds": 2411,
      "status": "awaiting_upload"
    }
  },
  "id": "evt_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
  "livemode": false,
  "object": "event",
  "request": {
    "id": "req_5f3c9a1e7b2d4c68a0e1f2d3c4b5a697",
    "idempotency_key": null
  },
  "type": "teaching.ready"
}

teaching.failed#

Carries contentA teaching could not be processed.

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

Fields of data.object for teaching.failed
FieldTypeDescription
created_at requiredstring (date-time)When the teaching was added.
duration_seconds requiredintegerThe spoken length in seconds.
failure_reason requiredstringA short plain reason when it failed, empty otherwise.
guest_affiliation requiredstringThe guest speaker's church or organisation.
id requiredstringThe teaching id.
is_guest requiredbooleanTrue when the speaker is a guest.
name requiredstringThe teaching title, as every reference object names itself.
object requiredenum: teachingAlways teaching.
passage requiredstringThe main passage, empty when none was set.
possible_duplicate_ofobjectA teaching Folio thinks this repeats.
id requiredstringThe other teaching id.
reason requiredstringWhy they look alike.
title requiredstringThe other teaching title.
progressobjectHow far processing has got.
current requiredobject | nullThe step running now, null when none.
finished_atstring (date-time)When the step finished.
key requiredstringThe step key.
label requiredstringThe step name shown to the team.
note requiredstringA short plain note about the step.
started_atstring (date-time)When the step began.
state requiredstringWhere the step stands: pending, active, waiting, decision, done, skipped or failed.
needs_decision requiredbooleanTrue when a person must decide something before it continues.
steps requiredobject[]The processing steps in order.
finished_atstring (date-time)When the step finished.
key requiredstringThe step key.
label requiredstringThe step name shown to the team.
note requiredstringA short plain note about the step.
started_atstring (date-time)When the step began.
state requiredstringWhere the step stands: pending, active, waiting, decision, done, skipped or failed.
recorded_at requiredstring (date-time) | nullWhen it was recorded.
series requiredstringThe series it belongs to, empty when none.
source requiredobject | nullWhere it came from, null for a one-off upload.
id requiredstringThe source id.
kind requiredstringupload, link, youtube, drive or live.
name requiredstringThe source name.
object requiredenum: sourceAlways source.
speaker requiredstringThe speaker, empty when unknown.
speaker_evidence requiredstringWhy Folio guessed that speaker, empty when it did not.
speaker_inferred requiredbooleanTrue when Folio guessed the speaker from the recording.
status requiredenum: awaiting_upload | queued | ingested | resolving | processing | ready | failedWhere processing stands.
status_note requiredstringA short plain note about the current status.
title requiredstringThe teaching title.
transcript_changed requiredbooleanTrue when the transcript was edited after the notes were written.

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

Example teaching.failed body
{
  "actor": null,
  "api_version": "2026-12-01",
  "created": "2026-10-13T09:12:10Z",
  "data": {
    "object": {
      "created_at": "2026-10-13T09:12:10Z",
      "duration_seconds": 2412,
      "failure_reason": "",
      "guest_affiliation": "",
      "id": "tch_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "is_guest": false,
      "name": "Romans 8: Nothing can separate us",
      "object": "teaching",
      "passage": "Romans 8:31-39",
      "possible_duplicate_of": {
        "id": "tch_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9099",
        "reason": "same recording length and transcript",
        "title": "Romans 8: Nothing can separate us"
      },
      "progress": {
        "current": {
          "finished_at": "2026-10-13T09:12:10Z",
          "key": "transcribe",
          "label": "Transcribing",
          "note": "",
          "started_at": "2026-10-13T09:12:10Z",
          "state": "done"
        },
        "needs_decision": false,
        "steps": [
          {
            "finished_at": "2026-10-13T09:12:10Z",
            "key": "transcribe",
            "label": "Transcribing",
            "note": "",
            "started_at": "2026-10-13T09:12:10Z",
            "state": "done"
          }
        ]
      },
      "recorded_at": "2026-10-11T10:00:00Z",
      "series": "Romans",
      "source": {
        "id": "src_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "kind": "upload",
        "name": "Sunday uploads",
        "object": "source"
      },
      "speaker": "Pastor Ada Okafor",
      "speaker_evidence": "",
      "speaker_inferred": false,
      "status": "ready",
      "status_note": "",
      "title": "Romans 8: Nothing can separate us",
      "transcript_changed": false
    },
    "previous_attributes": {
      "status": "awaiting_upload"
    }
  },
  "id": "evt_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
  "livemode": false,
  "object": "event",
  "request": {
    "id": "req_5f3c9a1e7b2d4c68a0e1f2d3c4b5a697",
    "idempotency_key": null
  },
  "type": "teaching.failed"
}

teaching.retired#

Carries contentA teaching was deleted from the library. The object is its last state.

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

Fields of data.object for teaching.retired
FieldTypeDescription
created_at requiredstring (date-time)When the teaching was added.
duration_seconds requiredintegerThe spoken length in seconds.
failure_reason requiredstringA short plain reason when it failed, empty otherwise.
guest_affiliation requiredstringThe guest speaker's church or organisation.
id requiredstringThe teaching id.
is_guest requiredbooleanTrue when the speaker is a guest.
name requiredstringThe teaching title, as every reference object names itself.
object requiredenum: teachingAlways teaching.
passage requiredstringThe main passage, empty when none was set.
possible_duplicate_ofobjectA teaching Folio thinks this repeats.
id requiredstringThe other teaching id.
reason requiredstringWhy they look alike.
title requiredstringThe other teaching title.
progressobjectHow far processing has got.
current requiredobject | nullThe step running now, null when none.
finished_atstring (date-time)When the step finished.
key requiredstringThe step key.
label requiredstringThe step name shown to the team.
note requiredstringA short plain note about the step.
started_atstring (date-time)When the step began.
state requiredstringWhere the step stands: pending, active, waiting, decision, done, skipped or failed.
needs_decision requiredbooleanTrue when a person must decide something before it continues.
steps requiredobject[]The processing steps in order.
finished_atstring (date-time)When the step finished.
key requiredstringThe step key.
label requiredstringThe step name shown to the team.
note requiredstringA short plain note about the step.
started_atstring (date-time)When the step began.
state requiredstringWhere the step stands: pending, active, waiting, decision, done, skipped or failed.
recorded_at requiredstring (date-time) | nullWhen it was recorded.
series requiredstringThe series it belongs to, empty when none.
source requiredobject | nullWhere it came from, null for a one-off upload.
id requiredstringThe source id.
kind requiredstringupload, link, youtube, drive or live.
name requiredstringThe source name.
object requiredenum: sourceAlways source.
speaker requiredstringThe speaker, empty when unknown.
speaker_evidence requiredstringWhy Folio guessed that speaker, empty when it did not.
speaker_inferred requiredbooleanTrue when Folio guessed the speaker from the recording.
status requiredenum: awaiting_upload | queued | ingested | resolving | processing | ready | failedWhere processing stands.
status_note requiredstringA short plain note about the current status.
title requiredstringThe teaching title.
transcript_changed requiredbooleanTrue when the transcript was edited after the notes were written.
Example teaching.retired body
{
  "actor": null,
  "api_version": "2026-12-01",
  "created": "2026-10-13T09:12:10Z",
  "data": {
    "object": {
      "created_at": "2026-10-13T09:12:10Z",
      "duration_seconds": 2412,
      "failure_reason": "",
      "guest_affiliation": "",
      "id": "tch_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "is_guest": false,
      "name": "Romans 8: Nothing can separate us",
      "object": "teaching",
      "passage": "Romans 8:31-39",
      "possible_duplicate_of": {
        "id": "tch_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9099",
        "reason": "same recording length and transcript",
        "title": "Romans 8: Nothing can separate us"
      },
      "progress": {
        "current": {
          "finished_at": "2026-10-13T09:12:10Z",
          "key": "transcribe",
          "label": "Transcribing",
          "note": "",
          "started_at": "2026-10-13T09:12:10Z",
          "state": "done"
        },
        "needs_decision": false,
        "steps": [
          {
            "finished_at": "2026-10-13T09:12:10Z",
            "key": "transcribe",
            "label": "Transcribing",
            "note": "",
            "started_at": "2026-10-13T09:12:10Z",
            "state": "done"
          }
        ]
      },
      "recorded_at": "2026-10-11T10:00:00Z",
      "series": "Romans",
      "source": {
        "id": "src_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "kind": "upload",
        "name": "Sunday uploads",
        "object": "source"
      },
      "speaker": "Pastor Ada Okafor",
      "speaker_evidence": "",
      "speaker_inferred": false,
      "status": "ready",
      "status_note": "",
      "title": "Romans 8: Nothing can separate us",
      "transcript_changed": false
    }
  },
  "id": "evt_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
  "livemode": false,
  "object": "event",
  "request": {
    "id": "req_5f3c9a1e7b2d4c68a0e1f2d3c4b5a697",
    "idempotency_key": null
  },
  "type": "teaching.retired"
}

transcript.ready#

Carries contentA transcript was stored and selected for a teaching.

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

Fields of data.object for transcript.ready
FieldTypeDescription
character_count requiredintegerHow many characters of text it holds.
created_at requiredstring (date-time)When it was stored.
id requiredstringThe transcript id.
language requiredstringThe transcript language.
object requiredenum: transcriptAlways transcript.
origin requiredenum: live | batch | captions_import | provider | manualWhere the words came from.
segment_count requiredintegerHow many timed segments it holds.
teaching requiredobjectThe teaching it belongs to.
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.
url requiredstringThe API path that returns the full text.
Example transcript.ready body
{
  "actor": null,
  "api_version": "2026-12-01",
  "created": "2026-10-13T09:12:10Z",
  "data": {
    "object": {
      "character_count": 38214,
      "created_at": "2026-10-13T09:12:10Z",
      "id": "trn_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "language": "en",
      "object": "transcript",
      "origin": "batch",
      "segment_count": 612,
      "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"
      },
      "url": "/v1/transcripts/trn_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012"
    }
  },
  "id": "evt_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
  "livemode": false,
  "object": "event",
  "request": {
    "id": "req_5f3c9a1e7b2d4c68a0e1f2d3c4b5a697",
    "idempotency_key": null
  },
  "type": "transcript.ready"
}

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