Skip to main content

Authentication

ReOpenly uses Logto for dashboard sessions and account-scoped API keys for programmatic access. An authenticated request identifies the caller; the requested project and model then determine access and, for shared models, which account pays. The public pricing endpoints do not require authentication.

Your ReOpenly account is created when you first sign in and accept the Terms of Service on the screen that follows. Signing in alone creates nothing: until the Terms are accepted, requests for that identity return 403 with detail.code set to registration_required, and the dashboard takes you to the Terms screen.

Create an account API key​

Sign in to the ReOpenly dashboard and open API keys from the profile menu (/app/api-keys). A key belongs to your account and can be used with projects that account is allowed to access; it is not attached to one project. The full fnf_... token is shown only in the create response or dialog. Store it in a secret manager immediately; ReOpenly stores a digest and cannot display the original value later.

API keys act as your account on the customer API. They cannot sign in to the app or change account settings such as your password or privacy choices.

Send the key​

Use the standard bearer header:

export REOPENLY_API_KEY='fnf_replace_with_the_created_key'

curl https://reopenly.com/api/v1/base-models \
-H "Authorization: Bearer ${REOPENLY_API_KEY}"

Do not put the key in a browser bundle, URL, model name, or log line. A missing, invalid, or inactive credential can return FastAPI's top-level detail shape; model and serving failures use the OpenAI envelope described in Errors and retries.

Find the deployment catalog​

GET /api/v1/base-models is authenticated and returns the model catalog plus the training bounds for that deployment:

{
"base_models": [
{
"model_id": "<catalog-model-id>",
"display_name": "<display name>",
"size_label": "9B",
"hosted_lora": true,
"max_context_tokens": 4096
}
],
"limits": {
"max_seq_length": { "min": 512, "max": 4096, "default": 2048 },
"num_train_epochs": { "min": 0.01, "max": 20, "default": 3, "integer": false }
},
"profiles": {
"<catalog-model-id>": {
"id": "<training-profile-id>",
"version": 1,
"model_id": "<catalog-model-id>",
"limits": { "num_train_epochs": { "min": 0.01, "max": 20, "default": 3, "integer": false } }
}
}
}

The exact list and limits are deployment data. Render what the endpoint returns instead of copying this example into application logic.

Project URL template​

For OpenAI-compatible calls, combine the project owner and slug with the deployment origin:

export REOPENLY_OPENAI_BASE='https://reopenly.com/api/projects/acme/support/openai/v1'

curl "${REOPENLY_OPENAI_BASE}/models" \
-H "Authorization: Bearer ${REOPENLY_API_KEY}"

The model list is caller-aware: owners see their models, while shared or public hosted aliases appear only when the caller is allowed to use them.