Platform Integrations
Build your own creator platform on top of Kyndred. Your users create companions through your UI; Kyndred powers the backend.
When you need this
- You're building a marketplace where creators make companions
- You have an existing product and want to add AI companions without sending users to kyndred.dev
- You want white-label companion creation on your own domain
How it works
Your platform has ONE Kyndred API key. All companions created through your platform are owned by your Kyndred account — usage rolls up to one bill.
To keep your users' companions separate, tag each companion with your own identifiers using the metadata field — then filter by those tags when listing. Kyndred never interprets metadata; it's opaque data for your platform to organize companions however you like.
Setup
Create an API key
From kyndred.dev/app/api-keys. Save it in your platform's server environment. Never expose it to clients.
Create companions with metadata
Tag each companion with whatever identifiers your platform uses:
// Your platform backend
async function createCompanionForUser(platformUser, form) {
const res = await fetch('https://kyndred.dev/api/companions', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.KYNDRED_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: form.name,
system_prompt: form.personality,
voice_id: form.voice_id,
metadata: {
user_id: platformUser.id, // your own user ID
workspace: platformUser.workspace, // whatever you need
plan: platformUser.plan,
},
}),
});
return res.json();
}Metadata can be any JSON object. Use whatever keys make sense for your platform.
List a specific user's companions
Filter by any metadata field using metadata.{key}={value} query params:
curl 'https://kyndred.dev/api/companions?metadata.user_id=alice_123' \
-H "Authorization: Bearer $KYNDRED_API_KEY"Returns only companions where user_id is alice_123. Combine multiple filters to narrow down: ?metadata.workspace=team-42&metadata.plan=pro.
Embed the companion in your product
Use the returned embed token with any standard embed option:
<iframe
src="https://kyndred.dev/embed/${companion.embed_tokens[0].token}"
allow="microphone"
style="width: 100%; height: 600px; border: none;">
</iframe>Show the voice catalog
Fetch the curated voice catalog in your UI for users to pick from:
const voices = await fetch('https://kyndred.dev/api/voices').then(r => r.json());
// [{ voice_id, name, description, preview_url, languages, tags }]Billing
Your API key is billed for all usage across all companions it creates. How you charge your own users is up to you — absorb it, pass it through, or mark it up.
Track per-key usage at GET /api/usage.
Voice architecture
Voice runs through a provider adapter — today ElevenLabs ConvAI, in the future our custom pipeline. The API surface doesn't change. Your platform picks a voice_id from the catalog; Kyndred handles the rest. See SDK Reference.