Skip to content
FolioSign inStart your trial

API reference

Outputs

Devotionals, blog posts, newsletters and study guides written from a note. Keys read published outputs only.

GET/v1/outputs

List published outputs#

Lists published outputs: devotionals, blog posts, newsletters and study guides written from a note. Pass teaching to see the outputs of one teaching. Drafts and outputs in review are never returned to a key. If the note an output was written from changes, the output is taken back to review and disappears from this list until it is published again; the output.unpublished webhook tells you.

Auth. A church API key. Needs the outputs: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
outputs:read
Operation id
machineListOutputs

Parameters

Parameters
NameInDescription
teachingqueryOnly outputs written from this teaching. (string, e.g. {{tch}})
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
body_mdstringThe full text as Markdown.
idstringThe output id, prefixed out_.
kindenum: devotional | blog | newsletter | study_guideWhat it is.
languagestringThe language code.
metaobjectExtra fields for the kind, such as a subject line for a newsletter.
note_idstringThe note it was written from.
objectenum: outputAlways output.
statusstringThe output status. Keys only see published outputs.
teaching_idstringThe teaching it was written from.
titlestringThe title.
updated_atstring (date-time)When it last changed.
versesobject[]The passages it quotes, checked against the King James Version.
word_countinteger (int64)The length in words.
200 Success. List published outputs.
200 example
{
  "status": true,
  "message": "outputs",
  "data": [
    {
      "id": "out_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "object": "output",
      "teaching_id": "tch_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "note_id": "note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "kind": "devotional",
      "status": "published",
      "language": "en",
      "title": "Held by a love that does not let go",
      "body_md": "Paul's question in Romans 8 is not rhetorical…",
      "meta": {},
      "verses": [
        {
          "ref": "Romans 8:38-39",
          "status": "verified"
        }
      ],
      "word_count": 312,
      "updated_at": "2026-11-02T08:00:00Z"
    }
  ],
  "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/outputs?teaching=%7B%7Btch%7D%7D" \
  -H "Authorization: Bearer $FOLIO_API_KEY"

GET/v1/outputs/{output}

Read a published output#

Returns one published output with its full Markdown body. Anything that is not published answers 404.

Auth. A church API key. Needs the outputs: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
outputs:read
Operation id
machineGetOutput

Parameters

Parameters
NameInDescription
output requiredpathThe output id, prefixed out_. (string, e.g. out_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
body_mdstringThe full text as Markdown.
idstringThe output id, prefixed out_.
kindenum: devotional | blog | newsletter | study_guideWhat it is.
languagestringThe language code.
metaobjectExtra fields for the kind, such as a subject line for a newsletter.
note_idstringThe note it was written from.
objectenum: outputAlways output.
statusstringThe output status. Keys only see published outputs.
teaching_idstringThe teaching it was written from.
titlestringThe title.
updated_atstring (date-time)When it last changed.
versesobject[]The passages it quotes, checked against the King James Version.
word_countinteger (int64)The length in words.
200 Success. Read a published output.
200 example
{
  "status": true,
  "message": "output",
  "data": {
    "id": "out_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
    "object": "output",
    "teaching_id": "tch_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
    "note_id": "note_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
    "kind": "devotional",
    "status": "published",
    "language": "en",
    "title": "Held by a love that does not let go",
    "body_md": "Paul's question in Romans 8 is not rhetorical…",
    "meta": {},
    "verses": [
      {
        "ref": "Romans 8:38-39",
        "status": "verified"
      }
    ],
    "word_count": 312,
    "updated_at": "2026-11-02T08:00:00Z"
  }
}
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/outputs/out_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012" \
  -H "Authorization: Bearer $FOLIO_API_KEY"

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