{
  "openapi": "3.1.0",
  "info": {
    "title": "Lamplight daily verse API",
    "version": "1.0.0",
    "summary": "The verse of the day, any verse in the KJV or WEB, and the day’s reflection. Free and read-only.",
    "description": "Free JSON API for Lamplight (lamplightverse.com). No key, no sign-up, read-only. Scripture is the King James Version and the World English Bible, word for word. License: KJV: Public domain outside the United Kingdom; WEB: Dedicated to the public domain. Free to use, including commercially, with attribution: name Lamplight (lamplightverse.com) and link back to the source_url in each result. Limits: about 60 requests a minute per IP; results are cached for up to 10 minutes. At most 50 verses per lookup. The same data is available as an MCP server at https://lamplightverse.com/mcp. Docs: https://lamplightverse.com/developers.",
    "contact": {
      "name": "Lamplight",
      "email": "ryan@sarvixo.co",
      "url": "https://lamplightverse.com/developers"
    },
    "termsOfService": "https://lamplightverse.com/developers#terms"
  },
  "servers": [
    {
      "url": "https://lamplightverse.com"
    }
  ],
  "tags": [
    {
      "name": "Bible"
    },
    {
      "name": "Meta"
    }
  ],
  "paths": {
    "/api/v1/verse-of-the-day": {
      "get": {
        "operationId": "getVerseOfTheDay",
        "summary": "Bible verse of the day",
        "description": "Get the Bible verse of the day from Lamplight (https://lamplightverse.com), in the King James Version (KJV) or the World English Bible (WEB). Verses come from a fixed list of daily verses, one per calendar day, and the day turns over at midnight US Eastern. Pass date (YYYY-MM-DD) for yesterday, today or tomorrow to match the reader’s own day. The text is the scripture stored on the site, word for word. License: KJV: Public domain outside the United Kingdom; WEB: Dedicated to the public domain. data_updated_at is the date of the verse. Same data as the MCP tool verse_of_the_day.",
        "tags": [
          "Bible"
        ],
        "parameters": [
          {
            "name": "translation",
            "in": "query",
            "required": false,
            "description": "Bible translation: KJV or WEB (World English Bible). Default KJV. Case-insensitive in the API: kjv and KJV both work.",
            "schema": {
              "type": "string",
              "enum": [
                "KJV",
                "WEB"
              ]
            }
          },
          {
            "name": "date",
            "in": "query",
            "required": false,
            "description": "Day to get, as YYYY-MM-DD. Only yesterday, today or tomorrow (US Eastern) are accepted, so a reader in any time zone can ask for their own day. Default: today, US Eastern.",
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The answer.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute per IP (about).",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "Cache-Control": {
                "description": "How long it can be cached.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "meta",
                    "errors"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/VerseOfTheDay"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/Meta"
                    },
                    "errors": {
                      "type": "null"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "One or more parameters are invalid. Every problem is listed in errors.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute per IP (about).",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current window.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "429": {
            "description": "More than about 60 requests a minute from one IP.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute per IP (about).",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds until you can try again.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "500": {
            "description": "Something went wrong on our side.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute per IP (about).",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current window.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/verses": {
      "get": {
        "operationId": "getVerses",
        "summary": "Look up a Bible verse",
        "description": "Look up a Bible verse, a range inside one chapter, or a whole chapter in the KJV or the World English Bible, from Lamplight (https://lamplightverse.com). At most 50 verses per call; split longer passages. References like \"John 3:16\", \"1 Cor 13:4-7\" and \"Psalm 23\" work. The text is the scripture stored on the site, word for word, and it does not change. License: KJV: Public domain outside the United Kingdom; WEB: Dedicated to the public domain. Same data as the MCP tool lookup_verse.",
        "tags": [
          "Bible"
        ],
        "parameters": [
          {
            "name": "reference",
            "in": "query",
            "required": true,
            "description": "A verse, a range in one chapter, or a whole chapter: \"John 3:16\", \"1 Cor 13:4-7\", \"Psalm 23\". At most 50 verses.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 64
            }
          },
          {
            "name": "translation",
            "in": "query",
            "required": false,
            "description": "Bible translation: KJV or WEB (World English Bible). Default KJV. Case-insensitive in the API: kjv and KJV both work.",
            "schema": {
              "type": "string",
              "enum": [
                "KJV",
                "WEB"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The answer.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute per IP (about).",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "Cache-Control": {
                "description": "How long it can be cached.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "meta",
                    "errors"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Verses"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/Meta"
                    },
                    "errors": {
                      "type": "null"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "One or more parameters are invalid. Every problem is listed in errors.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute per IP (about).",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current window.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "404": {
            "description": "No such book, chapter or verse in that translation.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute per IP (about).",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current window.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "429": {
            "description": "More than about 60 requests a minute from one IP.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute per IP (about).",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds until you can try again.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "500": {
            "description": "Something went wrong on our side.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute per IP (about).",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current window.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/reflection": {
      "get": {
        "operationId": "getReflection",
        "summary": "Reflection and prayer for the verse of the day",
        "description": "Get the short reflection and one-line prayer Lamplight (https://lamplightverse.com) shows for a day’s verse, with the verse in the KJV (license: Public domain outside the United Kingdom). Reflections are written with help from AI tools and checked against each verse; the scripture itself is never AI-written. They change once a day, at midnight US Eastern. Pass date (YYYY-MM-DD) for yesterday, today or tomorrow. data_updated_at is the date of the verse. Same data as the MCP tool todays_reflection.",
        "tags": [
          "Bible"
        ],
        "parameters": [
          {
            "name": "date",
            "in": "query",
            "required": false,
            "description": "Day to get, as YYYY-MM-DD. Only yesterday, today or tomorrow (US Eastern) are accepted, so a reader in any time zone can ask for their own day. Default: today, US Eastern.",
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The answer.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute per IP (about).",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "Cache-Control": {
                "description": "How long it can be cached.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "meta",
                    "errors"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Reflection"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/Meta"
                    },
                    "errors": {
                      "type": "null"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "One or more parameters are invalid. Every problem is listed in errors.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute per IP (about).",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current window.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "429": {
            "description": "More than about 60 requests a minute from one IP.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute per IP (about).",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds until you can try again.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "500": {
            "description": "Something went wrong on our side.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute per IP (about).",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current window.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/openapi.json": {
      "get": {
        "operationId": "getOpenApi",
        "summary": "This document",
        "description": "The OpenAPI 3.1 description of this API.",
        "tags": [
          "Meta"
        ],
        "responses": {
          "200": {
            "description": "The OpenAPI document.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Translation": {
        "type": "object",
        "required": [
          "id",
          "name",
          "license"
        ],
        "properties": {
          "id": {
            "type": "string",
            "enum": [
              "KJV",
              "WEB"
            ]
          },
          "name": {
            "type": "string",
            "description": "Full name, for example \"King James Version\"."
          },
          "license": {
            "type": "string",
            "enum": [
              "Public domain outside the United Kingdom",
              "Dedicated to the public domain"
            ],
            "description": "The license, in the app’s own words."
          }
        }
      },
      "Meta": {
        "type": "object",
        "required": [
          "api_version",
          "docs_url"
        ],
        "properties": {
          "api_version": {
            "type": "string",
            "const": "v1"
          },
          "docs_url": {
            "type": "string",
            "description": "Where these docs live.",
            "format": "uri"
          }
        }
      },
      "ErrorItem": {
        "type": "object",
        "required": [
          "code",
          "message"
        ],
        "properties": {
          "code": {
            "type": "string",
            "enum": [
              "VALIDATION_ERROR",
              "NOT_FOUND",
              "RATE_LIMITED",
              "METHOD_NOT_ALLOWED",
              "INTERNAL_ERROR"
            ]
          },
          "message": {
            "type": "string",
            "description": "What went wrong, in plain words."
          },
          "field": {
            "type": [
              "string",
              "null"
            ],
            "description": "The query parameter at fault, when there is one."
          }
        }
      },
      "ErrorEnvelope": {
        "type": "object",
        "required": [
          "data",
          "errors"
        ],
        "properties": {
          "data": {
            "type": "null"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ErrorItem"
            }
          }
        }
      },
      "VerseOfTheDay": {
        "type": "object",
        "required": [
          "date",
          "reference",
          "translation",
          "text",
          "share_url",
          "source_url",
          "attribution",
          "data_updated_at"
        ],
        "properties": {
          "date": {
            "type": "string",
            "description": "The day this verse belongs to, YYYY-MM-DD.",
            "format": "date"
          },
          "reference": {
            "type": "string",
            "description": "For example \"Philippians 4:6-7\"."
          },
          "translation": {
            "$ref": "#/components/schemas/Translation"
          },
          "text": {
            "type": "string",
            "description": "The verse text, word for word from the stored translation."
          },
          "share_url": {
            "type": "string",
            "description": "A shareable page for this day.",
            "format": "uri"
          },
          "source_url": {
            "type": "string",
            "description": "The page on the site this answer comes from. Link to it.",
            "format": "uri"
          },
          "attribution": {
            "type": "string",
            "description": "How to name the source. Free to use with a link back to source_url."
          },
          "data_updated_at": {
            "type": "string",
            "description": "The date of the verse, YYYY-MM-DD.",
            "format": "date"
          }
        }
      },
      "Verses": {
        "type": "object",
        "required": [
          "reference",
          "translation",
          "verses",
          "text",
          "source_url",
          "attribution"
        ],
        "properties": {
          "reference": {
            "type": "string",
            "description": "The reference as printed, for example \"Psalm 23:1-6\"."
          },
          "translation": {
            "$ref": "#/components/schemas/Translation"
          },
          "verses": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "verse",
                "text"
              ],
              "properties": {
                "verse": {
                  "type": "integer",
                  "minimum": 1
                },
                "text": {
                  "type": "string",
                  "description": "The verse text."
                }
              }
            }
          },
          "text": {
            "type": "string",
            "description": "All the verses joined with a space."
          },
          "source_url": {
            "type": "string",
            "description": "The page on the site this answer comes from. Link to it.",
            "format": "uri"
          },
          "attribution": {
            "type": "string",
            "description": "How to name the source. Free to use with a link back to source_url."
          }
        }
      },
      "Reflection": {
        "type": "object",
        "required": [
          "date",
          "reference",
          "verse_text_kjv",
          "reflection",
          "prayer",
          "about",
          "share_url",
          "source_url",
          "attribution",
          "data_updated_at"
        ],
        "properties": {
          "date": {
            "type": "string",
            "description": "The day, YYYY-MM-DD.",
            "format": "date"
          },
          "reference": {
            "type": "string",
            "description": "The verse of the day."
          },
          "verse_text_kjv": {
            "type": "string",
            "description": "The verse in the King James Version."
          },
          "reflection": {
            "type": "string",
            "description": "The short reflection shown on the site for this day."
          },
          "prayer": {
            "type": "string",
            "description": "The one-line prayer shown on the site for this day."
          },
          "about": {
            "type": "string",
            "description": "How reflections are written."
          },
          "share_url": {
            "type": "string",
            "description": "A shareable page for this day.",
            "format": "uri"
          },
          "source_url": {
            "type": "string",
            "description": "The page on the site this answer comes from. Link to it.",
            "format": "uri"
          },
          "attribution": {
            "type": "string",
            "description": "How to name the source. Free to use with a link back to source_url."
          },
          "data_updated_at": {
            "type": "string",
            "description": "The date of the verse, YYYY-MM-DD.",
            "format": "date"
          }
        }
      }
    }
  }
}