Wire it once. It runs itself.
Hytribe is a REST API that turns a member list into small, stable tribes. Base URL api.hytribe.xyz. Authenticated with a per-community API key. A typical operator is live in an afternoon.
From install to your first tribes
- Get keys. Register a community and receive a sandbox key (
ht_test_…) and, on go-live, a production key (ht_live_…). - Set tribe size. Keep the 3–5 default or tune with one
PATCH /communities/settingscall — study pods at 3–4, masterminds at 5–7. - Sync members. On Slack/Discord, joins and profile updates are picked up automatically. On your own platform, fire
POST /membersfrom your signup and profile events and backfill your existing roster once. - Run the first match. Trigger
/hytribe matchorPOST /match. The engine forms tribes, queues anyone it couldn't place strongly yet, and returns a coverage report. - Let it run. Anton introduces each tribe, nudges quiet ones and surfaces at-risk ones. Re-run matching on any cadence.
# 1 · Register a community — returns your API key
curl -X POST https://api.hytribe.xyz/communities \
-H "Content-Type: application/json" \
-d '{ "name": "Indie Hackers NYC", "platform": "custom" }'
# 2 · Sync a member (fire from your signup / profile-update)
curl -X POST https://api.hytribe.xyz/members \
-H "X-API-Key: ht_live_9f2c…" \
-d '{ "platform_user_id": "U012AB",
"profile_text": "founder, climbing, AI" }'
# 3 · Run matching — returns tribes
curl -X POST https://api.hytribe.xyz/match \
-H "X-API-Key: ht_live_9f2c…"{
"tribes": [
{ "id": "trb_01", "members": ["U012AB","U023CD","U087QR","U118TT"] },
{ "id": "trb_02", "members": ["U033EF","U041GH","U059IJ"] }
],
"compatibility_score": 0.94,
"queued": [],
"processing_time": "132ms"
}API playground
Send authenticated example calls against the Hytribe sandbox and preview responses inline — no signup required. All calls hit synthetic data at sandbox.hytribe.xyz.
ht_test_9f2c_demo. Swap in your sandbox key for real traffic.curl -X POST https://sandbox.hytribe.xyz/match \
-H "X-API-Key: ht_test_9f2c_demo" \
-H "Content-Type: application/json"
-d '{ "min_tribe_size": 3, "max_tribe_size": 5 }'API keys and environments
All requests are authenticated with a per-community API key in the X-API-Key header over HTTPS. A key is scoped to a single community and can only read or write that community's data. Keys are stored hashed at rest and can be revoked immediately.
| Environment | Base URL | Key prefix | Notes |
|---|---|---|---|
| Sandbox | sandbox.hytribe.xyz | ht_test_ | Isolated database. Outbound messages and email suppressed. |
| Production | api.hytribe.xyz | ht_live_ | Live infrastructure. TLS 1.2+. |
Endpoints
/communitiesRegister a community and receive your API key./communities/{id}Fetch community details./communities/settingsSet tribe size (min_tribe_size / max_tribe_size — defaults 3 and 5)./membersUpsert a member profile — idempotent on platform_user_id; enriches and embeds in the background./membersList active members. Supports pagination./members/{platform_user_id}Soft-deactivate a member. For erasure, use the erasure endpoint./members/{platform_user_id}/erasePermanently delete member record, onboarding responses, derived profile and vector embedding./matchTrigger tribe formation; returns tribes with engine_used and embedding_coverage./match/tribesList active tribes./match/statusCheck embedding coverage and engine readiness./slack/installStart Slack OAuth./slack/oauth/callbackComplete install; register slash commands./slack/eventsHandle joins and profile changes./slack/commands/hytribe match · status · help./discord/installStart Discord OAuth./discord/oauth/callbackComplete install; register the /hytribe command./discord/interactions/hytribe match · sync · status.Matching is the live REST surface today. Rituals already run in Slack, Discord and Telegram deployments — the HTTP endpoints that let you drive rituals from your own product are still being built. Aggregate cohort Insights endpoints are in development too. Both ship with pilot onboarding.
Outbound events
Subscribe to events per community. Payloads are signed with HMAC-SHA256; verify the X-Hytribe-Signature header before processing.
| Event | When | Payload |
|---|---|---|
| match.completed | A match run finishes | engine_used, embedding_coverage, tribes[] |
| tribe.formed | A new tribe ships | tribe_id, members[], compatibility_score |
| tribe.health.changed | Daily health score changes | tribe_id, previous, current, signals |
| member.enriched | Profile enrichment completes | platform_user_id, interests, goals |
Rate limits, idempotency and errors
- · 60 rps per community on read endpoints.
- · 20 rps per community on write endpoints.
- ·
/matchis asynchronous; only 1 concurrent run per community. - · 429 responses include
Retry-After.
- ·
POST /membersis idempotent onplatform_user_id. - · Send an
Idempotency-Keyheader on write requests to safely retry. - · Duplicate keys within 24h return the original response.
- · Cursor-based:
?cursor=…&limit=100(max 200). - · Next cursor returned in
meta.next_cursor.
- ·
400validation ·401auth ·403scope - ·
404not found ·409conflict ·429rate limit - ·
5xxserver — safe to retry with backoff. - · Every error includes
error.codeanderror.message.
Clients
Hytribe is a plain REST surface — JSON in, JSON out, three calls to a working integration. Most teams wire it directly and skip a client library entirely.
Two-line install
If you'd rather not hand-roll requests, our Python and JavaScript clients are a one-command install:
pip install hytribe
npm install @hytribe/sdk| Language | Package | Status |
|---|---|---|
| Python | hytribe | Pre-release · 0.0.1 |
| JavaScript / TypeScript | @hytribe/sdk | Pre-release · 0.0.1 |
Both are thin wrappers over the same three endpoints, published so early integrators have something to install. The REST API is the contract; the client surface will change before then, so pin an exact version.
npm install @hytribe/sdkimport { Hytribe } from "@hytribe/sdk";
// 0.0.1 pre-release — pin an exact version
const hy = new Hytribe({ apiKey: process.env.HYTRIBE_API_KEY! });
// 1 · Register a community (once)
const community = await hy.communities.create({
name: "Indie Hackers NYC",
platform: "custom",
});
// 2 · Sync a member — idempotent on platform_user_id
await hy.members.upsert({
platform_user_id: "U012AB",
profile_text: "founder, climbing, AI",
});
// 3 · Run a match — returns tribes + coverage report
const { tribes, embedding_coverage } = await hy.match.run();Other languages
Go, Rust, C++ and other backend languages come next — we build and maintain them as enterprise clients sign up and tell us which language their backend actually runs on. Tell us during onboarding and we'll build, test and maintain a proper client for it as part of your pilot integration. In the meantime the REST API is directly callable from any language over plain HTTP.
Versioning, changelog and status
- Versioning: not yet. The API is young enough that we're not versioning URLs today — paths are unversioned (
POST /match, not/v1/match). When breaking changes are introduced, existing integrations keep working against dated behaviour, and we'll announce the migration path in advance. - Changelog. Published monthly. Breaking changes announced 30 days in advance to security and engineering contacts.
- Status. Public status page at
status.hytribe.xyzwith subscribe-by-email. - Sandbox parity. Sandbox tracks production within 24 hours of any API change.
Get sandbox keys and a paired integration call
Sandbox keys within an hour. A Hytribe engineer joins your first match to tune tribe size, scopes and webhooks.