Skip to content
FolioSign inStart your trial

API reference

Notes

The notes Folio writes from a transcript. Keys read published notes only.

GET/v1/notes

List published notes#

Lists the church's published notes. Keys never see drafts, notes in review or retired notes. Because unpublished notes are filtered out after the page is cut, a page can hold fewer items than limit while has_next is still true; keep following next_cursor.

Auth. A church API key. Needs the notes:read scope, or a wildcard that includes it (machine:read, machine:*, * on a partner key). A partner key can call it for a customer church by sending X-Folio-Church.

Limits. Responses carry RateLimit-Limit and RateLimit-Remaining; a 429 carries Retry-After.

Auth
Church API key
Scope
notes:read
Operation id
machineListNotes

Parameters

Parameters
NameInDescription
limitqueryItems per page. (integer, e.g. 20)
cursorqueryOpaque cursor from meta.next_cursor of the previous page. (string)
X-Folio-ChurchheaderPartner keys only: run this call as one of your customer churches (its org_ id or slug). The church must be one of yours, the key must be allowed to act for it, and plan checks run against that church. (string, e.g. org_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012)

Responses

Response data fields
FieldTypeDescription
approval_kindstringHow it was approved: human when a reviewer read it, automatic when the church's automatic approval did. Null when not approved.
approved_atstring (date-time)When it was approved.
churchstringThe church name.
created_atstring (date-time)When the first version was written.
idstringThe note id, prefixed note_.
objectenum: noteAlways note.
published_atstring (date-time)When it was published.
sectionsobject[]The note body in order. Each section has a heading (h) and a body.
share_pathstringThe path of the published share page on the church's public site.
share_slugstringThe slug of the published share page.
speakerstringWho taught it.
statusstringThe note status. Keys only see published notes.
summarystringA short summary of the teaching.
teachingobjectThe teaching the note was written from.
idstringThe id, with a type prefix such as tch_ or note_.
namestringThe name.
objectstringThe object type.
updated_atstring (date-time)When it last changed.
200 Success. List published notes.
200 example
{
  "status": true,
  "message": "notes",
  "data": [
    {
      "id": "note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "object": "note",
      "teaching": {
        "id": "tch_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "object": "teaching",
        "name": "Sunday, 1 November: Nothing can separate us"
      },
      "status": "published",
      "summary": "Nothing in all creation can separate us from the love of God in Christ.",
      "sections": [
        {
          "h": "Who can condemn?",
          "body": "Paul answers with Christ's death, resurrection and intercession."
        }
      ],
      "approval_kind": "human",
      "approved_at": "2026-11-01T12:30:00Z",
      "published_at": "2026-11-01T12:31:00Z",
      "created_at": "2026-11-01T10:20:00Z",
      "updated_at": "2026-11-01T12:31:00Z",
      "share_slug": "nothing-can-separate-us",
      "share_path": "/grace-chapel/notes/nothing-can-separate-us"
    }
  ],
  "meta": {
    "request_id": "req_b337770ecebe03b03a88a8998b59263d",
    "has_next": false,
    "has_prev": false
  }
}
400 The request could not be read.
400 example
{
  "status": false,
  "message": "the page cursor is not valid",
  "error": {
    "code": "invalid_argument",
    "status": 400,
    "request_id": "req_b337770ecebe03b03a88a8998b59263d"
  }
}
401 The key or session is missing, invalid or expired.
401 example
{
  "status": false,
  "message": "That API key is not valid or has expired.",
  "error": {
    "code": "unauthenticated",
    "status": 401,
    "request_id": "req_b337770ecebe03b03a88a8998b59263d"
  }
}
403 The credential lacks the scope, the church is suspended, the feature is not in the plan, or the address is not allowed.
403 example
{
  "status": false,
  "message": "That API key does not have the required scope.",
  "error": {
    "code": "permission_denied",
    "status": 403,
    "request_id": "req_b337770ecebe03b03a88a8998b59263d"
  }
}
404 The resource is not in this church.
404 example
{
  "status": false,
  "message": "That item is not in this church.",
  "error": {
    "code": "not_found",
    "status": 404,
    "request_id": "req_b337770ecebe03b03a88a8998b59263d"
  }
}
409 Conflict, including a duplicate Idempotency-Key still being processed.
409 example
{
  "status": false,
  "message": "A request with this Idempotency-Key is still running.",
  "error": {
    "code": "conflict",
    "status": 409,
    "request_id": "req_b337770ecebe03b03a88a8998b59263d"
  }
}
422 A field failed validation, or an Idempotency-Key was reused with a different body.
422 example
{
  "status": false,
  "message": "A field is not valid.",
  "error": {
    "code": "validation",
    "status": 422,
    "request_id": "req_b337770ecebe03b03a88a8998b59263d"
  }
}
429 Rate limited. Wait Retry-After seconds.
429 example
{
  "status": false,
  "message": "Too many requests. Wait before trying again.",
  "error": {
    "code": "rate_limited",
    "status": 429,
    "request_id": "req_b337770ecebe03b03a88a8998b59263d"
  }
}
500 Something went wrong. Quote error.request_id.
500 example
{
  "status": false,
  "message": "Something went wrong. Quote the request id to support.",
  "error": {
    "code": "internal",
    "status": 500,
    "request_id": "req_b337770ecebe03b03a88a8998b59263d"
  }
}

Code samples

curl -X GET "$FOLIO_API_URL/v1/notes?limit=20" \
  -H "Authorization: Bearer $FOLIO_API_KEY"

GET/v1/notes/{note}

Read a published note#

Returns one published note. A note that exists but is not published answers 404, the same as an unknown id. Verses quoted in a note are checked against the King James Version before the note can be approved.

Auth. A church API key. Needs the notes:read scope, or a wildcard that includes it (machine:read, machine:*, * on a partner key). A partner key can call it for a customer church by sending X-Folio-Church.

Limits. Responses carry RateLimit-Limit and RateLimit-Remaining; a 429 carries Retry-After.

Auth
Church API key
Scope
notes:read
Operation id
machineGetNote

Parameters

Parameters
NameInDescription
note requiredpathThe note id, prefixed note_. (string, e.g. note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012)
X-Folio-ChurchheaderPartner keys only: run this call as one of your customer churches (its org_ id or slug). The church must be one of yours, the key must be allowed to act for it, and plan checks run against that church. (string, e.g. org_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012)

Responses

Response data fields
FieldTypeDescription
approval_kindstringHow it was approved: human when a reviewer read it, automatic when the church's automatic approval did. Null when not approved.
approved_atstring (date-time)When it was approved.
churchstringThe church name.
created_atstring (date-time)When the first version was written.
idstringThe note id, prefixed note_.
objectenum: noteAlways note.
published_atstring (date-time)When it was published.
sectionsobject[]The note body in order. Each section has a heading (h) and a body.
share_pathstringThe path of the published share page on the church's public site.
share_slugstringThe slug of the published share page.
speakerstringWho taught it.
statusstringThe note status. Keys only see published notes.
summarystringA short summary of the teaching.
teachingobjectThe teaching the note was written from.
idstringThe id, with a type prefix such as tch_ or note_.
namestringThe name.
objectstringThe object type.
updated_atstring (date-time)When it last changed.
200 Success. Read a published note.
200 example
{
  "status": true,
  "message": "note",
  "data": {
    "id": "note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
    "object": "note",
    "teaching": {
      "id": "tch_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "object": "teaching",
      "name": "Sunday, 1 November: Nothing can separate us"
    },
    "status": "published",
    "summary": "Nothing in all creation can separate us from the love of God in Christ.",
    "sections": [
      {
        "h": "Who can condemn?",
        "body": "Paul answers with Christ's death, resurrection and intercession."
      }
    ],
    "approval_kind": "automatic",
    "approved_at": "2026-11-01T12:30:00Z",
    "published_at": "2026-11-01T12:31:00Z",
    "created_at": "2026-11-01T10:20:00Z",
    "updated_at": "2026-11-01T12:31:00Z",
    "share_slug": "nothing-can-separate-us",
    "share_path": "/grace-chapel/notes/nothing-can-separate-us"
  }
}
400 The request could not be read.
400 example
{
  "status": false,
  "message": "the page cursor is not valid",
  "error": {
    "code": "invalid_argument",
    "status": 400,
    "request_id": "req_b337770ecebe03b03a88a8998b59263d"
  }
}
401 The key or session is missing, invalid or expired.
401 example
{
  "status": false,
  "message": "That API key is not valid or has expired.",
  "error": {
    "code": "unauthenticated",
    "status": 401,
    "request_id": "req_b337770ecebe03b03a88a8998b59263d"
  }
}
403 The credential lacks the scope, the church is suspended, the feature is not in the plan, or the address is not allowed.
403 example
{
  "status": false,
  "message": "That API key does not have the required scope.",
  "error": {
    "code": "permission_denied",
    "status": 403,
    "request_id": "req_b337770ecebe03b03a88a8998b59263d"
  }
}
404 The resource is not in this church.
404 example
{
  "status": false,
  "message": "That item is not in this church.",
  "error": {
    "code": "not_found",
    "status": 404,
    "request_id": "req_b337770ecebe03b03a88a8998b59263d"
  }
}
409 Conflict, including a duplicate Idempotency-Key still being processed.
409 example
{
  "status": false,
  "message": "A request with this Idempotency-Key is still running.",
  "error": {
    "code": "conflict",
    "status": 409,
    "request_id": "req_b337770ecebe03b03a88a8998b59263d"
  }
}
422 A field failed validation, or an Idempotency-Key was reused with a different body.
422 example
{
  "status": false,
  "message": "A field is not valid.",
  "error": {
    "code": "validation",
    "status": 422,
    "request_id": "req_b337770ecebe03b03a88a8998b59263d"
  }
}
429 Rate limited. Wait Retry-After seconds.
429 example
{
  "status": false,
  "message": "Too many requests. Wait before trying again.",
  "error": {
    "code": "rate_limited",
    "status": 429,
    "request_id": "req_b337770ecebe03b03a88a8998b59263d"
  }
}
500 Something went wrong. Quote error.request_id.
500 example
{
  "status": false,
  "message": "Something went wrong. Quote the request id to support.",
  "error": {
    "code": "internal",
    "status": 500,
    "request_id": "req_b337770ecebe03b03a88a8998b59263d"
  }
}

Code samples

curl -X GET "$FOLIO_API_URL/v1/notes/note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012" \
  -H "Authorization: Bearer $FOLIO_API_KEY"

GET/v1/teachings/{teaching}/note

Read the note for a teaching#

Returns the published note written from a teaching. Until a person (or the church's automatic approval) has published the note, this answers 404 "This teaching has no published note yet." That is expected: Folio shows nothing to members, or to your integration, before review.

Subscribe to note.published to know when to call it.

Auth. A church API key. Needs the notes:read scope, or a wildcard that includes it (machine:read, machine:*, * on a partner key). A partner key can call it for a customer church by sending X-Folio-Church.

Limits. Responses carry RateLimit-Limit and RateLimit-Remaining; a 429 carries Retry-After.

Auth
Church API key
Scope
notes:read
Operation id
machineGetTeachingNote

Parameters

Parameters
NameInDescription
teaching requiredpathThe teaching id, prefixed tch_. (string, e.g. tch_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012)
X-Folio-ChurchheaderPartner keys only: run this call as one of your customer churches (its org_ id or slug). The church must be one of yours, the key must be allowed to act for it, and plan checks run against that church. (string, e.g. org_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012)

Responses

Response data fields
FieldTypeDescription
approval_kindstringHow it was approved: human when a reviewer read it, automatic when the church's automatic approval did. Null when not approved.
approved_atstring (date-time)When it was approved.
churchstringThe church name.
created_atstring (date-time)When the first version was written.
idstringThe note id, prefixed note_.
objectenum: noteAlways note.
published_atstring (date-time)When it was published.
sectionsobject[]The note body in order. Each section has a heading (h) and a body.
share_pathstringThe path of the published share page on the church's public site.
share_slugstringThe slug of the published share page.
speakerstringWho taught it.
statusstringThe note status. Keys only see published notes.
summarystringA short summary of the teaching.
teachingobjectThe teaching the note was written from.
idstringThe id, with a type prefix such as tch_ or note_.
namestringThe name.
objectstringThe object type.
updated_atstring (date-time)When it last changed.
200 Success. Read the note for a teaching.
200 example
{
  "status": true,
  "message": "note",
  "data": {
    "id": "note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
    "object": "note",
    "teaching": {
      "id": "tch_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "object": "teaching",
      "name": "Sunday, 1 November: Nothing can separate us"
    },
    "status": "published",
    "summary": "Nothing in all creation can separate us from the love of God in Christ.",
    "sections": [
      {
        "h": "Who can condemn?",
        "body": "Paul answers with Christ's death, resurrection and intercession."
      },
      {
        "h": "More than conquerors",
        "body": "Hardship does not cancel God's love; it is where that love is proved."
      }
    ],
    "approval_kind": "human",
    "approved_at": "2026-11-01T12:30:00Z",
    "published_at": "2026-11-01T12:31:00Z",
    "created_at": "2026-11-01T10:20:00Z",
    "updated_at": "2026-11-01T12:31:00Z",
    "share_slug": "nothing-can-separate-us",
    "share_path": "/grace-chapel/notes/nothing-can-separate-us",
    "church": "Grace Chapel",
    "speaker": "Pastor Ade"
  }
}
400 The request could not be read.
400 example
{
  "status": false,
  "message": "the page cursor is not valid",
  "error": {
    "code": "invalid_argument",
    "status": 400,
    "request_id": "req_b337770ecebe03b03a88a8998b59263d"
  }
}
401 The key or session is missing, invalid or expired.
401 example
{
  "status": false,
  "message": "That API key is not valid or has expired.",
  "error": {
    "code": "unauthenticated",
    "status": 401,
    "request_id": "req_b337770ecebe03b03a88a8998b59263d"
  }
}
403 The credential lacks the scope, the church is suspended, the feature is not in the plan, or the address is not allowed.
403 example
{
  "status": false,
  "message": "That API key does not have the required scope.",
  "error": {
    "code": "permission_denied",
    "status": 403,
    "request_id": "req_b337770ecebe03b03a88a8998b59263d"
  }
}
404 The resource is not in this church.
404 example
{
  "status": false,
  "message": "That item is not in this church.",
  "error": {
    "code": "not_found",
    "status": 404,
    "request_id": "req_b337770ecebe03b03a88a8998b59263d"
  }
}
409 Conflict, including a duplicate Idempotency-Key still being processed.
409 example
{
  "status": false,
  "message": "A request with this Idempotency-Key is still running.",
  "error": {
    "code": "conflict",
    "status": 409,
    "request_id": "req_b337770ecebe03b03a88a8998b59263d"
  }
}
422 A field failed validation, or an Idempotency-Key was reused with a different body.
422 example
{
  "status": false,
  "message": "A field is not valid.",
  "error": {
    "code": "validation",
    "status": 422,
    "request_id": "req_b337770ecebe03b03a88a8998b59263d"
  }
}
429 Rate limited. Wait Retry-After seconds.
429 example
{
  "status": false,
  "message": "Too many requests. Wait before trying again.",
  "error": {
    "code": "rate_limited",
    "status": 429,
    "request_id": "req_b337770ecebe03b03a88a8998b59263d"
  }
}
500 Something went wrong. Quote error.request_id.
500 example
{
  "status": false,
  "message": "Something went wrong. Quote the request id to support.",
  "error": {
    "code": "internal",
    "status": 500,
    "request_id": "req_b337770ecebe03b03a88a8998b59263d"
  }
}

Code samples

curl -X GET "$FOLIO_API_URL/v1/teachings/tch_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012/note" \
  -H "Authorization: Bearer $FOLIO_API_KEY"

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