gg.alakazam.portal) gives you the whole /v1 surface from Kotlin — generate and manage worlds, create talk-to characters, mint runtime sessions — plus a drop-in AI Character component. Requires minSdk 24 (compileSdk 34).
Install
Add the dependency in your module’sbuild.gradle.kts:
https://github.com/Alakazam-studios/alakazam-android. Minimal deps — kotlinx-coroutines-android only; networking, JSON, audio, and key storage all come from the platform.
Setup
1
Get a key
Start with an
sk_test_… secret key (get one here) — it runs a free, mocked sandbox. Swap to sk_live_… when you ship.2
Store it, or pass it explicitly
Unlike the other ports,
AlakazamClient never reads a key store implicitly — that would need a Context. Stash the key with AlakazamAuth.setApiKey(context, key) (encrypted at rest via the Android Keystore, AES-256/GCM) and fetch it yourself with AlakazamAuth.getApiKey(context), or just pass the key straight through to the constructor.Programmable worlds & AI characters (/v1)
AlakazamClient is a thin coroutine wrapper over the /v1 API — every method is a suspend fun, called from a CoroutineScope (e.g. lifecycleScope.launch { … }).
A
sk_test_… key returns deterministic mocks — every response carries mock == true, and nothing spends GPU or quota. Build your whole integration for free, then swap to sk_live_…. See Testing.Drop-in AI Character
AlakazamCharacter wraps the session → say → speak loop as a lifecycle-aware NPC you can drop into any Activity or Fragment — callbacks and audio playback are delivered on the main looper.
1
Create it
Construct with the
characterId from client.createCharacter(...) (below) and, in a shipped app, a sessionToken minted by your backend:2
Wire it up
Set
onReply / onError, then drive it with the suspend methods from a coroutine, or the *Async fire-and-forget helpers (sayAsync, speakAsync, showImageAsync).3
Prototype without a backend
Leave
sessionToken null and pass a secretKey instead — the component mints one itself for prototyping. In a shipped build, never do this — assign a backend-minted token.autoSpeak on (default) it plays the reply through MediaPlayer automatically. Call release() when you’re done (e.g. onDestroy):
speak(line) / speakAsync(line) (synthesize + play a line) and showImage(prompt) / showImageAsync(prompt) (returns a show_image src). For a public, token-free share link to a public world, use AlakazamClient.publicPlayUrl(slug).
AlakazamClient reference
Every method maps 1:1 to a /v1 endpoint. Typed methods decode into a data class; the raw endpoints return a JSONValue tree.
Optional params:
frameB64 on createWorld / createCharacter (seed creation from a base64
image), cursor on listWorlds / listCharacters (pagination — pass the prior nextCursor),
and ttlSeconds on mintSession (60–3600, omitted when 0). Empty optionals are omitted from the
request body (never sent as ""), so payloads match the Unity/Unreal/iOS SDKs.Next steps
iOS SDK
The same worlds + AI characters in Swift.
Characters
Stances, memory, voice, and images in depth.
The two-token rule
Mint session tokens server-side; never ship a secret key.
Testing sandbox
Build the whole integration free with a test key.

