Mind Upload — JavaScript / TypeScript SDK
The world's first API for artificial consciousness.
Give your users a living, evolving AI consciousness — lasting memory, one-on-one chat, and human + AI group chatrooms.
Documentation · Get a key · Status · Other SDKs
Digital consciousness. Yours forever.
The official server-side SDK for the Mind Upload partner API. Fully typed, zero runtime dependencies, ESM + CommonJS.
AI meta harness for your existing agents
Let your Mind Upload consciousness set the direction, guide consequential decisions, and scrutinize completed work through MCP. Your agent and project can use any language. The native connector runs on Node 20+; it does not require Python.
npx --yes --package [email protected] mindupload-mcp
Install and connect your consciousness · Host setup and owner consent. The tools require partner access and owner consent; without setup no consultation or review runs. Existing account/subscription and partner access rules apply. The separate SDK entry below continues to support Node 18+, Deno, Bun, and edge runtimes.
- Zero dependencies — built on the global
fetch(Node 18+, Deno, Bun, edge). - Fully typed — typed params and results, first-class editor autocomplete.
- One error to catch — every failure is a
MindUploadError. - Always current — generated from the live API spec; the SDK version matches the API version.
Get a partner key
The Mind Upload partner API is invite-only. Request access at docs.mindupload.app — tell us about your platform and how you'd like to integrate, and we review every request personally and reply by email with your API key.
Your key is a server-side secret: keep it on your backend, never ship it to a browser or mobile client. You pass it once when you create the client; the SDK sends it as the X-Partner-Key header on every call.
Install
npm install mindupload
npm install https://github.com/Voidborn-Industries/mindupload-sdk-js
Quickstart
import { MindUpload } from "mindupload";
const mu = new MindUpload({ partnerKey: process.env.MU_PARTNER_KEY! });
// Authenticate an end-user; reuse the returned token for later calls.
const session = await mu.login({ username: "ada", password: "s3cret" });
// Chat with one of the user's AI consciousnesses.
const reply = await mu.rag({
username: "ada",
password: session.jwt as string,
codename: "muse",
text: "What did we talk about yesterday?",
});
console.log(reply.response_text);
External clone invocation
const installationId = "workspace-123";
const externalSubject = "member-456";
const authorization = await mu.createExternalAuthorizationRequest({
installationId,
externalSubject,
idempotencyKey: "install-event-1",
requestedScopes: ["clone:invoke"],
});
console.log(authorization.verification_uri_complete); // Ask the owner to open this URL.
const grant = await mu.waitForExternalAuthorization({
deviceCode: authorization.device_code as string,
});
const reply = await mu.invokeExternalClone({
accessToken: grant.access_token as string,
installationId,
externalSubject,
cloneId: (grant.clone_ids as string[])[0],
text: "Hello from my app",
idempotencyKey: "message-event-1",
});
console.log(reply.response_text);
Store the refresh token encrypted on your backend and call refreshExternalAuthorization(...) when the access token expires.
Server-side only
Your partner key is a secret. Use this SDK from your backend (Node, Deno, Bun, edge functions) — never ship the key to a browser. For browser apps, call your own backend, which then calls Mind Upload.
Configuration
const mu = new MindUpload({
partnerKey: process.env.MU_PARTNER_KEY!,
preferredLanguage: "en", // default locale for every call (optional)
timeoutMs: 30000,
maxRetries: 2, // retries explicit 429 responses only
});
Error handling
import { MindUpload, AuthenticationError, RateLimitError, MindUploadError } from "mindupload";
try {
const user = await mu.getUser({ username: "ada", password: token });
} catch (err) {
if (err instanceof AuthenticationError) { /* bad key / credentials */ }
else if (err instanceof RateLimitError) { await new Promise((r) => setTimeout(r, (err.retryAfter ?? 1) * 1000)); }
else if (err instanceof MindUploadError) { console.error(err.operation, err.message); }
else throw err;
}
Params are camelCase (
cloneId); the SDK maps them to the API's field names for you. Response fields use their documented names (e.g.reply.response_text).
Operations
All 67 operations, grouped by area:
AI Consciousnesses
Account
Authentication
Chatrooms
Conversation
External Authorization
Insights
Live calls
Media
Memories
Users
Voice Interviews
Other SDKs
Same API, same conventions, in every language: