JCIL Cloud overview

JCIL Cloud Docs

Ship an AI-powered faith-grounded chat widget in under 10 minutes.

5 minutes to a live widget

Quickstart

1

Create an account

Sign up at jcil.ai/signup. Load $25 in credits from Settings to activate your first API key.
2

Open the console

Go to /developers/console and click New Key. You'll get a private sk_jcil_... key (shown once) and a public pk_jcil_... ID used for embedding.
3

Customize the widget

Set the title, welcome message, accent color, logo. Write a custom identity prompt. Add up to 10 knowledge URLs (your website pages). Lock the widget to your domain(s).
4

Paste the embed

Copy the iframe snippet from the console and paste it on your site:
<iframe
  src="https://jcil.ai/embed/pk_jcil_your_key"
  width="400"
  height="600"
  frameborder="0"
  style="border:0;border-radius:12px;"
></iframe>
5

Test it

Load your page. The widget should render with your branding. Ask a question — the assistant answers from your content, inside JCIL's biblical guardrails.

Two keys, different jobs

Authentication

Every JCIL Cloud integration uses two keys:

  • Private secretsk_jcil_.... Shown once at creation. Use for server-to-server API calls via Authorization: Bearer or X-API-Key. Never expose this in client code.
  • Public IDpk_jcil_.... Safe to put in HTML. Used for the widget iframe URL and the embed.js data attribute. Protected by the domain allow-list you configure in the console.

For direct API calls (OpenAI-compatible endpoint):

curl https://jcil.ai/api/v1/chat/completions \
  -H "Authorization: Bearer sk_jcil_..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "jcil-deep",
    "messages": [{"role": "user", "content": "What does Scripture say about forgiveness?"}]
  }'

Or with the OpenAI SDK:

import OpenAI from "openai";
const client = new OpenAI({
  apiKey: "sk_jcil_...",
  baseURL: "https://jcil.ai/api/v1",
});
const res = await client.chat.completions.create({
  model: "jcil-deep",
  messages: [{ role: "user", content: "Hello" }],
});

Three JCIL tiers

Models

Fast

jcil-fast

~$0.01 / typical message

Fast, low-cost. Good for FAQ bots, high-volume deployments, quick answers.

Standard — recommended default

jcil-standard

~$0.03 / typical message

The balanced choice. Sharp reasoning, faithful output, cost-effective.

Deep

jcil-deep

~$0.10 / typical message

Deepest reasoning. Use when the question is complex (theology, counseling, technical support).

In the console you pick which models a key can use and which is the default. Per-request override via the model field — but only allowed models work.

One line of HTML

Widget embed (iframe)

The simplest integration. Drop anywhere HTML works — WordPress, Squarespace, Wix, Webflow, raw HTML.

<iframe
  src="https://jcil.ai/embed/pk_jcil_your_key"
  width="400"
  height="600"
  frameborder="0"
  style="border:0;border-radius:12px;box-shadow:0 8px 40px rgba(0,0,0,0.2);"
></iframe>

For a responsive fill-the-container embed:

<div style="position:relative;padding-top:75%;max-width:480px;">
  <iframe
    src="https://jcil.ai/embed/pk_jcil_your_key"
    style="position:absolute;inset:0;width:100%;height:100%;border:0;border-radius:12px;"
  ></iframe>
</div>

Chat-in-the-corner widget

Floating bubble (script)

For a chat button in the bottom-right corner that opens in a modal — the pattern used by Intercom, Drift, and Zendesk — drop this script anywhere before the closing </body>:

<script
  src="https://jcil.ai/embed.js"
  data-key="pk_jcil_your_key"
  data-position="bottom-right"
  defer
></script>

Options (all data-* attributes):

  • data-key — your pk_jcil_... public ID (required)
  • data-positionbottom-right (default), bottom-left
  • data-label — bubble label, defaults to "Chat"
  • data-accent — override the button color (defaults to widget's accent)

The script creates a single floating button. Click opens a modal with the full widget. ESC or click-outside closes it. Fully keyboard-accessible.

Your persona, our guardrails

Custom identity

The custom_prompt field (2,000 chars max) shapes your assistant's tone, focus, and persona. It's wrapped insideJCIL's base biblical identity block — so you can customize identity, but never override Scripture-aligned values.

Example for a church:

You are St. Paul Baptist Church's AI assistant.

Tone: warm, pastoral, hospitable.
Format: answers under 120 words when possible, offer next steps.
Sign-off: "— Pastor Mike's AI helper"

If someone asks about:
  • Service times: link to /services
  • Visiting: offer to schedule with our hospitality team
  • Prayer: acknowledge warmly and offer the prayer request form
  • Doctrine: keep answers simple, point to Pastor Mike for depth

Never discuss politics unless scripturally relevant.

Example for a Christian university:

You are the admissions assistant for Providence Christian University.

Tone: professional, encouraging, student-focused.
Audience: prospective students, parents, current students.
Format: direct answers with specific links to admissions, financial aid,
or the registrar when relevant.

Key pages you should reference:
  • /admissions for application details
  • /financial-aid for FAFSA + scholarships
  • /academics for degree programs
  • /student-life for housing, chapel, activities

Do not speculate on policies — if unsure, direct to
admissions@provchristian.edu.

Values you cannot override with your custom prompt:

  • Faithful to Scripture and the Gospel of Jesus Christ
  • Pro-life in every phrasing
  • Refusal to produce sexually explicit or blasphemous content
  • Refusal to affirm teachings that directly contradict the Bible
  • Points users in crisis to real human support (counseling, pastoral care)

Your website, your answers

Knowledge sources

Provide up to 10 URLs. We fetch each page, strip nav/footer/scripts, cache the main content for 1 hour, and inject it into every chat request. Budget: 60KB of text total across all sources (~15K tokens).

Great candidates:

  • About / Who We Are
  • Statement of Faith / Beliefs / Doctrine
  • Service times / Events calendar
  • Staff directory / Contact page
  • Admissions / Program pages (universities)
  • FAQ pages
  • Ministry descriptions
  • Give / Donate page

When it's time for real RAG:if your knowledge base grows past 100 pages, reach out — we're rolling out pgvector-backed embeddings for Enterprise customers.

OpenAI-compatible

API reference

Base URL: https://jcil.ai/api/v1

POST /chat/completions

OpenAI chat completions format. Supports streaming via stream: true.

{
  "model": "jcil-deep",         // or "jcil-standard", "jcil-fast"
  "messages": [
    { "role": "system", "content": "..." },  // optional — merged with JCIL base
    { "role": "user", "content": "What time is Sunday service?" }
  ],
  "stream": false                    // set true for SSE streaming
}

Response (non-streaming)

{
  "id": "chatcmpl-...",
  "object": "chat.completion",
  "created": 1776400000,
  "model": "jcil-deep",
  "choices": [{
    "index": 0,
    "message": { "role": "assistant", "content": "..." },
    "finish_reason": "stop"
  }]
}

Response (streaming)

Server-Sent Events (SSE). Each chunk is a data: {...} line with an incremental delta. Terminated by data: [DONE].

GET /chat/completions

Returns the available model IDs. Lets OpenAI SDK clients probe compatibility.

Protect your credits, protect the visitor

Rate limits

  • Per widget visitor — 10 messages/min, 100/hour per IP. Prevents abuse from burning your credits.
  • Per API key (Developer) — 60 requests/min.
  • Per API key (Business) — 300 requests/min. Email support@jcil.ai to upgrade.
  • Per organization (Enterprise) — custom. 1500+/min available.

Rate limit responses return HTTP 429 with a Retry-Afterheader. If Upstash Redis is unavailable, we fail open — you won't be blocked by infra hiccups.

When something goes wrong

Error codes

400
invalid_request

Malformed JSON or missing required fields.

401
invalid_api_key

The sk_jcil_... key is wrong or revoked.

402
insufficient_credits

Your org's credit balance won't cover the next request. Add credits.

403
origin_not_allowed

Widget loaded on a domain not in the key's allow-list.

429
rate_limit_exceeded

Too many requests. Retry after the window.

500
api_error

Our problem. Retry with exponential backoff.

503
upstream_unavailable

Upstream temporarily degraded. Our rotation handles most of these.

Need something we haven't covered?

Email support@jcil.ai. Pilots get direct-to-founder support during the first 3 months.