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.