docsv1 ProductChangelogStatusGet an API key
developersapi-firstv1

Build on the platform, not around it.

Everything the fkra apps do goes through the same REST API you get: organizations, paths, modules, progress. Wire it into your stack, not the other way round.

zsh · api.fkra.ai
{ "status": "ok", "region": "me-central-1" }
fkra api/v1/schema200 OK
TYPEOrganization12 fieldsTYPELearningPath9 fieldsTYPEModule14 fieldsTYPEEnrollment7 fieldsSDKtypescript · pythongenerated
42 types · typed client generated

Generated from the same spec the apps consume

DocsDevelopersIntroduction

The fkra API

One REST API behind every fkra surface. Same objects, same permissions, same audit trail, whether the call comes from the studio, the player, or your own service.

Base URLhttps://api.fkra.ai/v1AuthBearer sk_live_…Contentapplication/json

NoteEvery response body on this page is the real shape the API returns. Copy any snippet, swap in your key, and it runs.

Quickstart

#

Three calls to a running academy. Create the org, enroll the team, read the progress. That is the API.

One POST: tenant, locale, and theme. The org exists.

create-org.sh
curl -X POST https://api.fkra.ai/v1/orgs \  -H "Authorization: Bearer sk_live_…" \  -d '{ "name": "Acme Academy", "locale": "ar" }'
POST/v1/orgs201 Created · 82 ms
Body parameters
FieldTypeDescription
namerequiredstringDisplay name for the organization.
slugoptionalstringURL key for the tenant. Derived from name when omitted.
localerequiredenumar or en. Sets RTL and the default content language.
themeoptionalobjectBrand colors and logo for white-label surfaces.

Authentication

#

A bearer key, scoped to one organization. Keys carry scopes, not roles, and every call they make lands in the audit log with the key as actor.

shell
curl https://api.fkra.ai/v1/orgs/org_7f3/progress \  -H "Authorization: Bearer sk_live_…" \  -H "Accept-Language: ar"
sk_live_…Production. Writes are real, certificates mint, webhooks fire.sk_test_…Sandbox tenant, same schemas. Reset it whenever you like.

CarefulKeys are server-side only. Anything a browser can read is a leaked key; proxy through your backend and rotate from /admin/api-keys.

Define your own module types

#

A module type is a pair of JSON schemas: config and body. Ship a new interactive format without waiting on us, because the studio forms and the player read the schema.

scenario.schema.json
{  "type": "scenario",  "version": "1.2.0",  "properties": {    "persona":  { "type": "string" },    "branches": { "type": "array", "minItems": 2 },    "endings":  { "type": "array", "minItems": 2 },    "scoring":  { "enum": ["rubric", "points"] }  },  "required": ["persona", "branches", "endings"]}
Rendered in the studio
scenarioSev-1 at 3am
personaon-call-engineerbranches4endings3scoringrubric
fkra/admin/module-typeslive

Tenants and scopes in the core

#

Every organization lives in its own tenant, and every admin action needs the right scope. The government tier runs on the same isolation, built into the core.

Tenantsk_live_…a41org_7f3
Scope
content.writePublish modules and paths
users.manageInvite people, assign roles
progress.readRead completion and scores
A key scoped to fkra-academy cannot read the other tenant. Cross-tenant reads return 404./admin/tenants · live

Speaks your language.

#

Every surface ships in Arabic and English with right-to-left layout: content, dashboards, certificates.

Set locale on the org and the API returns rtl: true with localized labels; Accept-Language overrides it per request.

ENReading our codebasev4.2 · approved
01Absorb12 min02Connect09 min03Evaluate06 min04Practice18 min
Readiness72%
ARقراءة قاعدة الكود لديناالإصدار 4.2 · معتمد
01استيعاب12 min02تواصل09 min03تقييم06 min04ممارسة18 min
الجاهزية72%

One API for everything

#

Create organizations, enroll learners, publish modules, and read progress from the same endpoints the apps call. Open an endpoint to see its scope and response.

Scopeorgs.writeReturnsOrganization
{ "id": "org_7f3", "rtl": true, "audit": { "action": "org.created" } }
42 types · TypeScript and Python clients generated from the same specFull reference

Webhooks

#

Subscribe once and let the platform push. Deliveries are signed, retried with exponential backoff for 24 hours, and replayable from the dashboard.

EventPayloadLast
module.publishedmodule, version, actor200 · 41ms
cert.issuedcertificate, learner200 · 38ms
enrollment.completedenrollment, path, score200 · 52ms
attempt.gradedattempt, score, rubric200 · 44ms
role.grantedactor, subject, scope200 · 36ms
org.createdorg, locale, theme200 · 47ms
delivery headers
POST /hooks/fkra HTTP/1.1X-Fkra-Event: module.publishedX-Fkra-Delivery: dlv_8241X-Fkra-Signature: t=1755782531,v1=8f3c…

Errors and limits

#

Conventional status codes, a machine-readable code, and a message that names the field that failed.

400invalid_requestBody failed schema validation. The message names the field.
401unauthorizedMissing or malformed bearer token.
403scope_missingThe key is valid but lacks the scope for this action.
404not_foundNo such object in this tenant. Cross-tenant reads look identical to a miss.
409conflictSlug already taken inside the organization.
422schema_mismatchModule body does not satisfy its module type schema.
429rate_limitedOver 100 requests in 10 seconds. Honour Retry-After.

Limits100 requests every 10 seconds, counted per calling address rather than per key. Bursts get a Retry-After header; respect it and nothing else changes.

An audit trail

#

Publishes, permission changes, and attestations are recorded with actor, action, and object, and exportable into your compliance tooling.

GET /v1/audit?org=org_7f33 events
14:02:11module.publishedpolicy-v4-2amina@fkra.ai14:02:12cert.issuedFKRA-8241 to u_812system14:07:44org.createdacme-academyapi:sk_live_…a41

And everything you’d expect

#

The rest of the platform is one sign-in away.

AnalyticsEngagement, readiness, and completion, live per teamNotificationsAchievements and certificates land the moment they are earnedDiscoverA storefront for everything your organization teachesCommunitiesPractice groups, events, polls, and module discussionsGamificationPoints, badges, streaks, and verifiable certificatesMedia timelineChapters, cues, bookmarks, and notes on every videoLearning pathsStages, prerequisites, and outcomes, sequenced by difficultyAssessmentsAn authoring wizard, timed runs, server-side grading
27interactive module types10languages, one experience100%of certificates verifiableisolated tenants on one platform

Build on fkra

#

Straight to the founders, with no sales sequence and no qualification form. hello@fkra.ai

Was this page helpful?hello@fkra.ai reaches a founder

Explore more