The Navōn API

    Build on AI with Navōn’s standards built in. Every question and every answer goes through the same filter as the app, so what your users see is what you’d want them to see.

    Works with the OpenAI SDKs

    Change the base URL and the key. Your existing code, streaming included, keeps working.

    Filtered both ways

    The question is checked before it reaches a model, and the answer is checked before it reaches you. Nothing is released until it passes.

    Your own policy

    A key carries its account’s filter settings, so strictness, subjects to keep off and Torah-learning mode apply to your app too.

    Quickstart

    Your first request

    1. 1. Make a key at navon.org/developers/keys. It’s shown once, so keep it somewhere safe.
    2. 2. Point any OpenAI client at https://api.navon.org/functions/v1/api/v1
    3. 3. Send it as Authorization: Bearer nvn_…, from your server. Never put a key in a browser or an app people can download.
    curl https://api.navon.org/functions/v1/api/v1/chat/completions \
      -H "Authorization: Bearer $NAVON_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "model": "auto",
        "messages": [
          { "role": "system", "content": "You help 5th graders with Chumash." },
          { "role": "user", "content": "Why did Yaakov work fourteen years for Rachel?" }
        ]
      }'
    Reference

    Endpoints

    POST/chat/completions

    A reply to a conversation. OpenAI's request and response shape; `stream: true` works. `model` can be "auto" to let Navōn choose.

    POST/images/generations

    A picture from a prompt. `model`, `size` (1024x1024, 1536x1024, 1024x1536), `response_format` (url or b64_json).

    POST/moderations

    Check text against your Navōn policy without generating anything. Up to 20 inputs at a time.

    GET/models

    The models your key can use.

    Safety

    When something is refused

    A chat request that Navōn won’t answer isn’t an error. Like OpenAI’s own content filter, it comes back as a normal completion with finish_reason: "content_filter" and a kind reply your app can show as it is.

    Every response carries a navon object: whether anything was blocked, at which stage, and why. With model: "auto" it also says which model answered.

    Streaming begins once the answer has passed the check, so a withheld answer never reaches your users half-written. Expect a few seconds for the checks on every request.

    {
      "object": "chat.completion",
      "model": "gemini-3.7-flash",
      "choices": [{
        "message": { "role": "assistant", "content": "I can't help with that kind of story. How about …" },
        "finish_reason": "content_filter"
      }],
      "navon": {
        "blocked": true,
        "stage": "input",            // "input": the question was refused; "output": the answer was withheld
        "category": "untouchable",
        "reason": "The request asks for explicit content.",
        "suggestion": "Perhaps a story about …"
      }
    }
    Models

    What you can ask for

    Chat

    autonavon-pronavon-fastnavon-liteclaude-opus-5-5claude-sonnet-5claude-haiku-4-5gpt-5.6-solgpt-5.6-terragpt-5.6-lunagemini-4-argongemini-3-progemini-3.7-flashgemini-3-flash-litegrok-4 ¹grok-4-fast ¹

    Images

    nano-banana-2nano-banana-2-litenano-banana-progpt-image-2gpt-image-1-minigrok-imagine-2 ¹

    ¹ Adult accounts only. The list your own key can use is at GET /models.

    Limits & errors

    The fine print

    Who can have a key. An approved adult account on a paid plan (Pro, Family, or a school’s admin). Accounts supervised by a parent or a school can’t.

    Limits. 60 requests a minute per key, on top of your account’s own limits: 30 a minute and 400 an hour for text, 8 a minute and 60 an hour for pictures. Included in your plan, with no extra charge.

    Your data. Requests are kept as part of your account, like your chats in the app, and never used to train a model.

    401invalid_api_keyThe key is missing, wrong, or revoked.
    403api_access_*The account behind the key can't use the API (no paid plan, supervised, suspended).
    404model_not_foundThat model name isn't one of the ones listed.
    422content_blocked / content_withheldImages only: the prompt or the picture didn't meet the guidelines. Chat refusals are not errors (see above).
    429rate_limit_exceededToo many requests. Wait for the Retry-After header.
    503safety_check_unavailableThe safety check couldn't run, so nothing was sent. Retry in a few seconds.