Partner API
Partner Literacy Suite API
Public guide for technology partners · Last updated August 29, 2026
Show — media catalog and short-lived delivery URLs. Ask — plan-grounded Binny Q&A with citations (requires chat_v1 entitlement).
Literacy Complete — Binny Chat API
Plan-grounded Q&A for mapped employers uses the same Bearer keys and externalEmployerId model as media. Full endpoint documentation is in sections 6–7 below. Requires chat_v1 on your API key — contact support to enable your design-partner sandbox.
How to get started
Request a sandbox from /integrations. BenefitsInteractive issues a test key, maps your externalEmployerId values, and provides your base URL. This page is the public contract only — it does not contain credentials.
1. Overview
BenefitsInteractive is the benefits literacy layer on top of HR, payroll, and enrollment systems. Partners embed approved media and optional plan-grounded Q&A in their own UX. BI remains the system of record for creation, approval, publishing, and delivery authorization.
Show (media) — controlled delivery means:
- Catalog responses contain metadata only (no playback URLs).
- Delivery responses mint an expiring URL when the partner is ready to play or download.
- Partners never receive durable CDN URLs in catalog responses.
Ask (Binny chat) — plan-grounded Q&A means:
- Answers are grounded in the employer's uploaded benefits documents with citations.
- Partners pass an opaque
externalUserId; BI stores only a hashed identifier for metering. - Employees must accept an educational disclaimer in your UI before the first question (
disclaimerAccepted: true).
This API does not:
- Process enrollment transactions or carrier feeds
- Sync employee identity (SCIM, SSO passthrough)
- Accept writeback (completions, analytics into BI)
- Allow asset authoring or publishing
- Answer generic HR or handbook questions (benefits corpus only)
2. Authentication
Every request must include:
Authorization: Bearer bi_live_<secret> Content-Type: application/json
| Environment | Key prefix |
|---|---|
| Production | bi_live_ |
| Sandbox | bi_test_ |
Capabilities (per partner / API key)
| Capability | Enables |
|---|---|
media_v1 | Video + audio catalog and delivery |
media_v2 | Slides + infographic PDF delivery |
chat_v1 | Binny plan-grounded Q&A (sections 6–7) |
Secrets are shown once at issuance. Store them securely. Revoked or unknown keys return 401 with code invalid_api_key. Missing capability → 403 (forbidden).
3. Base URL & versioning
Production and sandbox base URLs are provided during onboarding (for example https://app.benefitsinteractive.com).
v1 routes are prefixed with /api/integrations/v1 (media and chat). Breaking changes increment the path version. Optional JSON fields may be added without a version bump.
v2 (/api/integrations/v2) adds slides and infographic PDF delivery; v1 remains video + audio only.
4. Media endpoints
4.1 List media for an employer
GET /api/integrations/v1/groups/{externalEmployerId}/mediaPath: externalEmployerId — your employer id (mapped at onboarding).
Query: limit (default 25, max 50), cursor, kinds (default video,audio), locale (optional BCP 47).
{
"externalEmployerId": "acme-corp-2026",
"groupId": "WC0126",
"items": [
{
"learningResourceId": 1042,
"kind": "video",
"title": "Your 2026 Medical Plan Overview",
"subtitle": "Plain-language walkthrough",
"category": "Medical",
"locale": null,
"updatedAt": "2026-06-15T18:22:11.000Z",
"videoProjectId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"audioVariants": []
}
],
"nextCursor": null
}Catalog items never include deliveryUrl or long-lived CDN URLs.
4.2 Get a single media item
GET /api/integrations/v1/media/{learningResourceId}?externalEmployerId={externalEmployerId}externalEmployerId is required for entitlement checks.
4.3 Mint a delivery URL
POST /api/integrations/v1/media/{learningResourceId}/delivery{
"externalEmployerId": "acme-corp-2026",
"variant": "summary"
}For audio, variant is summary or deep. Omit variant for video.
{
"learningResourceId": 1042,
"kind": "video",
"variant": null,
"deliveryUrl": "https://example.cdn/embed/…",
"expiresAt": "2026-07-07T01:20:00.000Z",
"contentType": "text/html",
"deliveryMode": "embed"
}- Default TTL is 300 seconds from mint time.
- Mint when the user starts playback — not when listing the catalog.
- Do not persist
deliveryUrl; storelearningResourceId+externalEmployerIdinstead. - If expired, mint again with a new POST.
5. Media kinds
| kind | Delivery |
|---|---|
video | Short-lived embed URL |
audio | Short-lived download / stream URL |
slides / infographic | v2 — short-lived PDF URL |
Only published, assigned media for the mapped employer is deliverable. Drafts are never exposed.
6. Binny Chat API
Requires chat_v1 on your partner record and API key. Answers are grounded in the employer's benefits document corpus — not open-web search.
6.1 Ask a question
POST /api/integrations/v1/groups/{externalEmployerId}/chat
Idempotency-Key: <uuid> (recommended)
X-Request-Id: <uuid> (optional){
"question": "What is my in-network deductible on the PPO?",
"externalUserId": "partner-worker-abc123opaque",
"disclaimerAccepted": true,
"disclaimerVersion": "v1",
"sessionId": "optional-uuid-for-multi-turn",
"chatHistory": [
{ "role": "user", "content": "Do we have an HSA?" },
{ "role": "assistant", "content": "Yes — the HDHP option includes an HSA..." }
]
}| Field | Production | Notes |
|---|---|---|
question | Required | Max 500 characters |
externalUserId | Required | Opaque worker id; hashed at rest (not stored raw) |
disclaimerAccepted | Required | Must be true — show disclaimer in your UI first |
chatHistory | Optional | Last 6 turns; roles user / assistant |
Sandbox (bi_test_): externalUserId may be omitted.
{
"answer": "Based on your 2026 medical plan documents, the PPO in-network deductible is $1,500 per person...",
"citations": [
{ "source": "2026 Medical SBC.pdf", "resourceId": 1042 }
],
"sessionId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"disclaimer": "Educational summary based on employer-provided plan documents. Not legal, tax, or medical advice."
}With Idempotency-Key, identical requests replay the cached response for 24 hours (X-Idempotency-Replay: true).
7. Chat limits & webhooks
7.1 Get limits and usage
GET /api/integrations/v1/groups/{externalEmployerId}/chat-limits{
"externalEmployerId": "acme-corp-2026",
"groupId": "WC0126",
"limits": {
"dailyQuestionCap": 500,
"monthlyQuestionCap": 10000,
"dailySpendUsdCap": 150,
"monthlySpendUsdCap": 2000
},
"usage": {
"today": { "questions": 42, "costUsd": 0.18 },
"monthToDate": { "questions": 1203, "costUsd": 4.92 }
}
}7.2 Update per-employer limits
PUT /api/integrations/v1/groups/{externalEmployerId}/chat-limits{
"dailyQuestionCap": 750,
"monthlyQuestionCap": 15000,
"dailySpendUsdCap": 200,
"monthlySpendUsdCap": 3000,
"oeUpliftUntil": "2026-11-30T23:59:59.000Z",
"oeDailyQuestionCap": 1500
}All fields optional; omitted fields are unchanged. Open Enrollment uplift fields are optional.
7.3 Webhooks (Growth+ tier)
When configured, BI sends HMAC-signed HTTPS POSTs for usage alerts: chat.usage_warning, chat.cap_reached, chat.cap_reset.
Verify header X-BI-Signature: t={unix},v1={hmac} over {timestamp}.{body} using your webhook secret.
8. Errors
{
"error": {
"code": "forbidden",
"message": "You do not have access to this employer."
}
}Prefer the stable code for programmatic handling.
| HTTP | code | When |
|---|---|---|
| 400 | invalid_request | Malformed JSON, missing fields, or invalid chat body |
| 401 | invalid_api_key | Missing, invalid, or revoked key |
| 403 | forbidden | Valid key but not entitled (e.g. missing chat_v1) |
| 404 | unknown_group / not_found / not_published | Unmapped employer or unavailable asset |
| 409 | unsupported_kind | Kind not enabled for partner |
| 429 | rate_limited | Too many requests or chat cap exceeded |
| 500 | internal_error | Unexpected server error |
9. Rate limits
Media (defaults per API key)
- Catalog + detail: 120 requests / minute
- Delivery mint: 60 requests / minute
Chat (layered — illustrative production defaults)
- User burst: 5 questions / minute
- Employer burst: 30 questions / minute
- API key burst: 60 questions / minute
- User daily: 75 questions / day
- Employer daily: 500 questions / day (overridable via chat-limits)
When limited, expect 429 with Retry-After. Limits may be adjusted at onboarding by tier.
10. Onboarding
- Request sandbox via /integrations.
- Receive test key + employer mappings for a pilot group.
- Implement media: catalog → detail → delivery → playback (v1).
- Request
chat_v1for Literacy Complete; implement chat + limits. - Complete security review (no durable CDN URLs; server-side API keys only).
- Go live with a production key and production mappings.
Support: support@benefitsinteractive.app