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/v1/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.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.
Official clients
| Language | Package | Status | Latest |
|---|---|---|---|
| Node / TypeScript | @hytribe/sdk | GA | v1.4.0 |
| Python | hytribe | GA | v1.3.2 |
| Go | github.com/hytribe/go-sdk | Beta | v0.9.1 |
| Ruby | hytribe-rb | Community | v0.6.0 |
Install snippet and a versioned quickstart for each language — every SDK covers the same three endpoints so you can port a proof of concept between stacks without rewriting logic.
# npm
npm install @hytribe/sdk
# bun
bun add @hytribe/sdk
# pnpm
pnpm add @hytribe/sdkimport { Hytribe } from "@hytribe/sdk";
// v1.4.0 · Node 18+, ESM & CJS
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();
// 4 · Subscribe to webhooks (verify HMAC signature)
hy.webhooks.on("tribe.formed", (evt) => console.log(evt.tribe_id));No SDK? The API is a plain REST surface — every response is JSON, every write accepts an Idempotency-Key, and every list endpoint is cursor-paginated.
Versioning, changelog and status
- Versioning. URL-versioned (
/v1). Backwards-incompatible changes ship under a new version; minimum 12 months' notice before deprecation. - 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.