Skip to main content

Partner Integration API Keys

Partners assigned to one or more domains can generate server-to-server API keys from Aventora Admin without platform-wide administrator access. Keys are scoped to a single domain and its billing account, and are intended for integration use (billing, provisioning lookups, and engagement) — not for platform administration.

Where to manage keys​

  1. Sign in to Aventora Admin as a partner_admin user.

  2. Select the assigned domain (if you manage more than one).

  3. Open Integration Keys in the sidebar, or navigate to:

    /domains/{domain}/integration-keys

You will see two sections:

Key typeScopeTypical use
Engagement HubBound to the domain admin's Hub billing account_idCredits, billing plan, usage, /start, /integration/start
Domain-ChatbotBound to the domain slugToken generation, queries, domain metadata, billing-context lookups

The API key secret is shown once at creation. Store it securely; it cannot be retrieved later.

Hub partner integration keys​

Permissions​

Hub keys created from the partner view use the partner_integration profile:

  • call_management — start engagements (POST /start, POST /integration/start)
  • account_management — read balance, usage, billing plan for the bound account
  • billing_management — top up credits, update billing plan on the bound account

They do not include:

  • admin or * (no cross-account or platform-wide access)
  • api_key_management (cannot create or revoke other keys via API)
  • Account registration (POST /accounts/register is blocked)
  • Free billing plans (requires super-admin JWT)

Create (admin UI)​

Partners create keys in the Admin UI. The server calls Hub:

POST /api-keys/partner-integration
Authorization: Bearer {HUB_API_KEY}
Content-Type: application/json

{
"name": "Acme billing integration",
"account_id": "{hub_account_uuid}",
"partner_id": "{partner_id}",
"description": "Partner integration key for acme"
}

Response (secret shown once):

{
"success": true,
"api_key": "…plaintext…",
"key_info": {
"key_id": "…",
"name": "Acme billing integration",
"account_id": "…",
"permissions": {
"permissions": ["call_management", "account_management", "billing_management"],
"key_profile": "partner_integration"
}
}
}

Example: read account balance​

GET /accounts/me
Authorization: Bearer {partner_integration_key}

The account is resolved automatically from the key; do not pass a different account_id.

Example: add credits​

POST /accounts/credits/add
Authorization: Bearer {partner_integration_key}
Content-Type: application/json

{
"account_id": "{same_account_as_key}",
"amount": 100,
"description": "Partner top-up"
}

When using an account-bound key, use the account tied to the key.

Example: start an engagement​

POST /integration/start
Authorization: Bearer {partner_integration_key}
Content-Type: application/json

{
"phone_number": "+15551234567",
"domain_name": "acme",
"instruction": "Follow up on billing inquiry"
}

domain_name must match the domain whose billing account the key is bound to.

List and revoke​

Partners only see and revoke keys they created (filtered by partner_id attribution).

GET /api-keys?account_id={uuid}&key_profile=partner_integration&created_by_partner_id={partner_id}
Authorization: Bearer {HUB_API_KEY}
DELETE /api-keys/{key_id}?created_by_partner_id={partner_id}
Authorization: Bearer {HUB_API_KEY}

Domain-Chatbot partner integration keys​

Permissions​

Keys are standard domain-scoped integration keys (is_admin=false). They can access Domain-Chatbot APIs for that domain (for example token generation and queries). They cannot:

  • Provision new domains (POST /regenerate-index/provision-domain)
  • Create platform-wide admin keys
  • Access other domains

Partner API (domain-chatbot)​

Authenticated as partner_admin with access to the domain:

GET /api/partners/domains/{domain}/api-keys
Authorization: Bearer {partner_admin_jwt}
POST /api/partners/domains/{domain}/api-keys
Authorization: Bearer {partner_admin_jwt}
Content-Type: application/json

{
"name": "Acme DC integration",
"description": "Optional description",
"expires_in_days": 365
}
DELETE /api/partners/domains/{domain}/api-keys/{key_id}
Authorization: Bearer {partner_admin_jwt}

Partners only see keys where partner_id matches their organization.

Example: billing context lookup​

GET /api/partners/domains/acme/billing-context
Authorization: Bearer {domain_scoped_api_key}

Use the domain-scoped key only for domains that match the key's domain field.

Admin API bridge​

Aventora Admin exposes partner-scoped routes (JWT + domain access check):

MethodPathAction
GET/api/partner/domains/{domain}/integration-keys/hubintegration-keys.read
POST/api/partner/domains/{domain}/integration-keys/hubintegration-keys.create
DELETE/api/partner/domains/{domain}/integration-keys/hub/{id}integration-keys.revoke
GET/api/partner/domains/{domain}/integration-keys/domain-chatbotintegration-keys.read
POST/api/partner/domains/{domain}/integration-keys/domain-chatbotintegration-keys.create
DELETE/api/partner/domains/{domain}/integration-keys/domain-chatbot/{id}integration-keys.revoke

These routes resolve the domain's Hub billing account via the domain admin's external_user_id (same pattern as partner billing).

Rollout​

Partner integration keys follow the same feature flags as Partner Management. With flags disabled, authorization actions are not enforced and behavior matches the pre-partner baseline.

Changelog​

DateChange
2026-07-06Partner Integration Keys: per-domain UI in Admin, Hub partner_integration key profile, Domain-Chatbot partner API key CRUD with partner_id attribution.

See also: