Skip to main content

Developer Agent Management

IndusAI Developer APIs let external systems authenticate and manage the authenticated developer's own agent resources, including agent creation, configuration, prompt tooling, call outcomes, call input fields, and runtime service settings. Use the developer login endpoint to obtain a bearer token for the recommended integration flow. Some older endpoints continue to support API-key-based access and are marked as legacy.

Namespace split
  • Standard platform APIs: /api/agents/...
  • Developer-facing APIs in this section: /api/...
  • External developer docs are intentionally limited to self-service agent lifecycle and configuration APIs.
Onboarding flow
  • Login with POST /api/login.
  • Use Authorization: Bearer <token>.
  • Create and manage only your own agents.
  • Use legacy API-key endpoints only where explicitly marked.
Public developer scope

These docs do not include internal, admin, observability, or team-management endpoints. All documented Developer Agent Management APIs are scoped to the authenticated user only.

Standard Response Envelope

{
"status_code": 200,
"message": "human readable message",
"error": null,
"data": {}
}

Bearer Login Response

{
"status_code": 200,
"message": "Login successful",
"error": null,
"data": {
"access_token": "<jwt>",
"refresh_token": "<jwt>",
"token_type": "bearer"
}
}

Developer Authentication

Developer users should authenticate once with email and password, then send the returned access token as a bearer token on developer-facing APIs scoped to their own data.

POST/api/login

Developer Login

Authenticates a developer user using email and password and returns access and refresh tokens for bearer-token-based developer APIs.

PublicBearer TokenResponse Envelope
Behavior
  • No bearer token is required for this login request.
  • Credentials are verified before session creation.
  • Inactive users and unverified users are rejected.
  • All new Developer Agent Management endpoints should use this bearer token flow.

Inputs

NameTypeDefaultDescription
emailstringrequiredDeveloper account email.
passwordstringrequiredDeveloper account password.

Outputs

StatusTypeDescription
200 OKapplication/jsonReturns access_token, refresh_token, and token_type.
400 Bad Requestapplication/jsonIncorrect email/password, inactive user, or unverified user.

Request Body

{
"email": "developer@example.com",
"password": "your-password"
}

cURL

curl -X POST \
"https://developer.induslabs.io/api/login" \
-H "Content-Type: application/json" \
-d '{
"email": "developer@example.com",
"password": "your-password"
}'

Success Response

{
"status_code": 200,
"message": "Login successful",
"error": null,
"data": {
"access_token": "<jwt>",
"refresh_token": "<jwt>",
"token_type": "bearer"
}
}

Legacy Developer Agent Listing

This older API-key-based endpoint remains available for backward compatibility, but new integrations should move to bearer-token developer endpoints.

POST/api/agents

List Developer Agents (Legacy API Key Endpoint)

Returns all agents belonging to the user associated with the provided API key.

API KeyLegacyResponse Envelope
Warning

Legacy API-key endpoint. New integrations should use bearer-token-based developer APIs.

Behavior
  • The request body must include api_key.
  • The backend resolves the user from the secret/API key and fetches all agents for that user.
  • This endpoint is not bearer-token based.

Inputs

NameTypeDefaultDescription
api_keystringrequiredDeveloper API key provided in the JSON body.

Outputs

StatusTypeDescription
200 OKapplication/jsonReturns agents inside the standard response envelope.
400 Bad Requestapplication/jsonMissing api_key or invalid API key.
500 Internal Server Errorapplication/jsonUnexpected server error.

Request Body

{
"api_key": "your-api-key"
}

Success Response

{
"status_code": 200,
"message": "Agents fetched",
"error": null,
"data": {
"agents": [
{
"id": "...",
"agent_id": "AGT_XXXX",
"agent_name": "Sales Agent",
"agent_description": "Handles sales calls",
"user_id": "...",
"organization_id": "...",
"team": [],
"is_active": true,
"agent_type": "OUTBOUND",
"whatsapp_enabled": false,
"is_auto": true,
"team_size": 0,
"created_at": "...",
"updated_at": "...",
"agent_cost": 5.0,
"livekit_api_key": "...",
"livekit_host_url": "..."
}
]
}
}

Agents

These endpoints expose self-service agent CRUD under the developer namespace. They are documented only for the authenticated developer to manage their own agent resources.

POST/api/agents/create

Create Agent

Creates a new agent and its initial config, with optional first call outcome and call infield definitions.

Bearer TokenRaw Model Response
Warning

Creation uses `/create` because POST `/api/agents` is already reserved by a legacy endpoint.

Behavior
  • Creates the agent first, then creates a draft config and may publish it.
  • LiveKit credentials are assigned from system settings.
  • Initial call outcomes and call infields are optional.
  • Agent cost is calculated from user credit settings.
  • This is the recommended creation endpoint for bearer-token-based integrations.

Inputs

NameTypeDefaultDescription
AuthorizationheaderrequiredBearer <access_token> from /api/login.
agent_inobjectrequiredAgent definition including name, description, team, agent_type, and is_auto.
agent_configobjectrequiredInitial prompt and service configuration payload.
call_outcomeobjectoptionalOptional first outcome definition created alongside the agent.
call_infieldobjectoptionalOptional first input field definition created alongside the agent.

Outputs

StatusTypeDescription
200 OKapplication/jsonReturns the created agent object as a raw model response.
400 Bad Requestapplication/jsonDuplicate agent name.
403 Forbiddenapplication/jsonUnauthorized developer user.
500 Internal Server Errorapplication/jsonFailure while creating config, outcome, or infield.

Request Body

{
"agent_in": {
"agent_name": "Outbound Sales Agent",
"agent_description": "Handles outbound calls for product demos",
"team": [],
"agent_type": "OUTBOUND",
"is_auto": true
},
"agent_config": {
"system_prompt": "You are a helpful sales voice agent.",
"starting_instructions": "Greet the user and ask qualifying questions.",
"agent_type": "generic_alpha",
"guardrail_ids": [
"personality_v1",
"environment_v1",
"tone_v1",
"goal_v1",
"Guardrails_v1",
"ethical_v1",
"data_formatting_v1",
"disconnect_guardrail_v1"
],
"metadata_schema": [],
"examples": [],
"guidelines": [],
"llm_config": {
"provider": "groq",
"model": "openai/gpt-oss-120b",
"temperature": 0,
"max_tokens": 0,
"context_turns": 0
},
"notes": "Initial production config",
"tts_config": {
"voice_id": "Indus-hi-maya"
},
"stt_config": {
"provider": "deepgram",
"language": "hi"
},
"vad_config": {
"min_silence_duration": 0.3,
"min_speech_duration": 0.4,
"activation_threshold": 0.45
}
},
"call_outcome": {
"outcome_name": "lead_status",
"outcome_description": "Lead qualification result",
"outcome_type": "FIXED",
"outcome_enum": ["qualified", "not_qualified", "follow_up"],
"is_visible": true
},
"call_infield": {
"field_name": "customer_budget",
"field_type": "NUMBER",
"field_enum": null,
"is_visible": true
}
}

cURL

curl -X POST \
"https://developer.induslabs.io/api/agents/create" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access_token>" \
-d @create-agent.json

Created Agent

{
"id": "mongo-id",
"agent_id": "AGT_12345678",
"agent_name": "Support Agent",
"agent_description": "Handles support conversations",
"user_id": "user-id",
"organization_id": "org-id",
"team": [
{
"user_id": "user-id",
"role": "member",
"added_at": "2026-03-11T10:00:00Z"
}
],
"is_active": true,
"agent_type": "INBOUND",
"whatsapp_enabled": false,
"is_auto": true,
"team_size": 1,
"created_at": "2026-03-11T10:00:00Z",
"updated_at": "2026-03-11T10:00:00Z",
"agent_cost": 5.0,
"livekit_api_key": "optional",
"livekit_api_secret": "optional",
"livekit_host_url": "optional"
}
GET/api/agents/{agent_id}

Get Agent

Fetches a single agent by its public `agent_id` such as `AGT_12345678`.

Bearer TokenRaw Model Response
Behavior
  • A logged-in developer can access only their own agent data in the developer domain.
  • Returns full agent details.

Inputs

NameTypeDefaultDescription
AuthorizationheaderrequiredBearer <access_token>.
agent_idpath stringrequiredPublic agent identifier.

Outputs

StatusTypeDescription
200 OKapplication/jsonReturns a single agent object.
403 Forbiddenapplication/jsonNot authorized for this agent.
404 Not Foundapplication/jsonAgent not found.
PUT/api/agents/{agent_id}

Update Agent

Partially updates an existing agent owned by the authenticated developer.

Bearer TokenRaw Model Response
Behavior
  • Partial updates are supported.
  • Typical editable fields include agent_name, agent_description, is_active, whatsapp_enabled, is_auto, agent_cost, and optional LiveKit overrides.
  • Developer docs do not describe this as an organization-wide or admin-wide update API.

Inputs

NameTypeDefaultDescription
AuthorizationheaderrequiredBearer <access_token>.
agent_idpath stringrequiredPublic agent identifier.
bodyobjectrequiredAny editable subset of the agent payload.

Outputs

StatusTypeDescription
200 OKapplication/jsonReturns the updated agent object.
400 Bad Requestapplication/jsonFailed to update.
403 Forbiddenapplication/jsonNot authorized.
404 Not Foundapplication/jsonAgent not found.
DELETE/api/agents/{agent_id}

Delete Agent

Deletes an agent owned by the authenticated developer.

Bearer TokenRaw Model Response

Inputs

NameTypeDefaultDescription
AuthorizationheaderrequiredBearer <access_token>.
agent_idpath stringrequiredPublic agent identifier.

Outputs

StatusTypeDescription
200 OKapplication/jsonReturns `{ "message": "Agent deleted successfully" }`.
403 Forbiddenapplication/jsonNot authorized.
404 Not Foundapplication/jsonAgent not found.

Agent Configs

Config endpoints handle versioned prompts and service settings for the authenticated developer’s own agents. Draft and published versions are distinct, and publish operations can clone current outcomes and infields into the new current version.

POST/api/agents/{agent_id}/configs

Create Config Version

Creates a new config version for an agent as a draft, or publishes it immediately when `publish=true`.

Bearer TokenRaw Model Response
Behavior
  • This endpoint operates only on the authenticated developer’s own agent.
  • If a current config exists, the backend clones it and overlays the provided values.
  • Publishing also clones current call outcomes and call infields.

Inputs

NameTypeDefaultDescription
AuthorizationheaderrequiredBearer <access_token>.
agent_idpath stringrequiredAgent identifier.
publishquery booleanfalsePublish immediately when true.
bodyAgentConfigCreaterequiredSame shape as the config create payload used during agent creation.

Outputs

StatusTypeDescription
200 OKapplication/jsonReturns the created config version object.
GET/api/agents/{agent_id}/configs

List Config Versions

Lists config versions for an agent, optionally filtered by status.

Bearer TokenRaw Model Response
Behavior
  • Returns config history only for the authenticated developer’s own agent.

Inputs

NameTypeDefaultDescription
AuthorizationheaderrequiredBearer <access_token>.
agent_idpath stringrequiredAgent identifier.
status_filterquery stringoptional`draft`, `published`, or `archived`.
skipquery integer0Pagination offset.
limitquery integer100Page size.

Outputs

StatusTypeDescription
200 OKapplication/jsonReturns an array of config version objects.
GET/api/agents/{agent_id}/configs/current

Get Current Config

Returns the currently active published config for the agent.

Bearer TokenRaw Model Response

Inputs

NameTypeDefaultDescription
AuthorizationheaderrequiredBearer <access_token>.
agent_idpath stringrequiredAgent identifier.

Outputs

StatusTypeDescription
200 OKapplication/jsonReturns the current published config object.
404 Not Foundapplication/jsonNo current config found.
GET/api/agents/{agent_id}/configs/{version}

Get Config Version

Returns a specific config version for an agent.

Bearer TokenRaw Model Response

Inputs

NameTypeDefaultDescription
AuthorizationheaderrequiredBearer <access_token>.
agent_idpath stringrequiredAgent identifier.
versionpath integerrequiredConfig version number.

Outputs

StatusTypeDescription
200 OKapplication/jsonReturns the requested config version.
404 Not Foundapplication/jsonVersion not found.
PUT/api/agents/{agent_id}/configs/{version}

Update Draft Config

Updates an existing draft config version. Published configs must be copied into a new draft instead of being edited in place.

Bearer TokenRaw Model Response
Behavior
  • Only draft versions can be updated.

Inputs

NameTypeDefaultDescription
AuthorizationheaderrequiredBearer <access_token>.
agent_idpath stringrequiredAgent identifier.
versionpath integerrequiredDraft version number.
bodyobjectrequiredPartial config fields such as system_prompt, starting_instructions, metadata_schema, examples, guidelines, and notes.

Outputs

StatusTypeDescription
200 OKapplication/jsonReturns the updated draft config.
400 Bad Requestapplication/jsonVersion is not draft or update failed.
DELETE/api/agents/{agent_id}/configs/{version}

Delete Draft Config

Deletes a draft config version.

Bearer TokenRaw Model Response
Behavior
  • Only draft versions can be deleted.

Inputs

NameTypeDefaultDescription
AuthorizationheaderrequiredBearer <access_token>.
agent_idpath stringrequiredAgent identifier.
versionpath integerrequiredDraft version number.

Outputs

StatusTypeDescription
200 OKapplication/jsonDraft config deleted.
400 Bad Requestapplication/jsonVersion is not draft.
POST/api/agents/{agent_id}/configs/{version}/publish

Publish Config Version

Publishes a chosen config version and makes it current.

Bearer TokenRaw Model Response

Inputs

NameTypeDefaultDescription
AuthorizationheaderrequiredBearer <access_token>.
agent_idpath stringrequiredAgent identifier.
versionpath integerrequiredVersion to publish.

Outputs

StatusTypeDescription
200 OKapplication/jsonReturns the published config or publish result.
POST/api/agents/{agent_id}/configs/{version}/rollback

Rollback to Config Version

Rolls back the current agent config to a previous version.

Bearer TokenRaw Model Response

Inputs

NameTypeDefaultDescription
AuthorizationheaderrequiredBearer <access_token>.
agent_idpath stringrequiredAgent identifier.
versionpath integerrequiredPreviously published version to restore.

Outputs

StatusTypeDescription
200 OKapplication/jsonRollback completed.
POST/api/agents/{agent_id}/configs/enhance

Enhance Prompt Configuration

Uses prompt enhancement logic to improve the provided prompts and metadata instructions.

Bearer TokenRaw Model Response
Behavior
  • The request body follows the config create shape but enhancement primarily uses system_prompt, starting_instructions, and metadata_schema.

Inputs

NameTypeDefaultDescription
AuthorizationheaderrequiredBearer <access_token>.
agent_idpath stringrequiredAgent identifier.
bodyAgentConfigCreaterequiredPrompt payload to enhance.

Outputs

StatusTypeDescription
200 OKapplication/jsonReturns enhanced prompt text and suggestions.
POST/api/agents/{agent_id}/configs/render

Render Prompt Templates

Renders prompt templates using metadata values against either a selected version or the current config.

Bearer TokenRaw Model Response
Behavior
  • If `version` is provided, that version is used; otherwise the current config is used.
  • Optional backend parameters include version, system_prompt, and starting_instructions.

Inputs

NameTypeDefaultDescription
AuthorizationheaderrequiredBearer <access_token>.
agent_idpath stringrequiredAgent identifier.
bodyobjectrequiredRaw metadata key/value object used for interpolation.

Outputs

StatusTypeDescription
200 OKapplication/jsonReturns rendered prompt text and validation errors.

Request Body

{
"customer_name": "Rahul",
"city": "Mumbai"
}

cURL

curl -X POST \
"https://developer.induslabs.io/api/agents/AGT_12345678/configs/render" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access_token>" \
-d '{
"customer_name": "Rahul",
"city": "Mumbai"
}'

Success Response

{
"rendered_system_prompt": "...",
"rendered_starting_instructions": "...",
"errors": []
}
POST/api/agents/{agent_id}/configs/validate

Validate Metadata

Validates metadata values against the agent config metadata schema.

Bearer TokenRaw Model Response

Inputs

NameTypeDefaultDescription
AuthorizationheaderrequiredBearer <access_token>.
agent_idpath stringrequiredAgent identifier.
bodyobjectrequiredMetadata values to validate.

Outputs

StatusTypeDescription
200 OKapplication/jsonReturns `{ valid, errors }`.

Request Body

{
"customer_name": "Rahul",
"city": "Mumbai"
}

Validation Response

{
"valid": true,
"errors": []
}

Call Outcomes

Call outcomes define structured data collected after conversations for the authenticated developer’s own agents.

POST/api/agents/{agent_id}/call_outcomes

Create Call Outcome

Creates a call outcome definition for the agent.

Bearer TokenResponse Envelope
Behavior
  • Supported outcome_type values: TEXT, DATE, BOOLEAN, FIXED, NUMBER.

Inputs

NameTypeDefaultDescription
AuthorizationheaderrequiredBearer <access_token>.
agent_idpath stringrequiredAgent identifier.
outcome_namestringrequiredUnique outcome name.
outcome_descriptionstringrequiredHuman-readable description.
outcome_typestringrequiredTEXT, DATE, BOOLEAN, FIXED, or NUMBER.
outcome_enumarrayoptionalEnum choices when outcome_type is FIXED.
is_visiblebooleanrequiredControls UI visibility.

Outputs

StatusTypeDescription
201 Createdapplication/jsonReturns the created outcome wrapped in the standard response envelope.
GET/api/agents/{agent_id}/call_outcomes

List Call Outcomes

Lists all call outcome definitions for the agent.

Bearer TokenResponse Envelope

Inputs

NameTypeDefaultDescription
AuthorizationheaderrequiredBearer <access_token>.
agent_idpath stringrequiredAgent identifier.

Outputs

StatusTypeDescription
200 OKapplication/jsonReturns outcomes in the standard response envelope.
PATCH/api/agents/{agent_id}/call_outcomes/{outcome_name}

Update Call Outcome

Updates a call outcome definition by outcome name.

Bearer TokenResponse Envelope

Inputs

NameTypeDefaultDescription
AuthorizationheaderrequiredBearer <access_token>.
agent_idpath stringrequiredAgent identifier.
outcome_namepath stringrequiredOutcome to update.
bodyobjectrequiredPartial outcome definition updates.

Outputs

StatusTypeDescription
200 OKapplication/jsonUpdated outcome in response envelope.
DELETE/api/agents/{agent_id}/call_outcomes/{outcome_name}

Delete Call Outcome

Deletes a call outcome definition by name.

Bearer TokenResponse Envelope

Inputs

NameTypeDefaultDescription
AuthorizationheaderrequiredBearer <access_token>.
agent_idpath stringrequiredAgent identifier.
outcome_namepath stringrequiredOutcome to delete.

Outputs

StatusTypeDescription
200 OKapplication/jsonDelete result in response envelope.

Call Infields

Call infields define structured input fields attached to the authenticated developer’s own agents.

POST/api/agents/{agent_id}/call_infields

Create Call Infield

Creates an input field definition for the agent.

Bearer TokenResponse Envelope
Behavior
  • Supported field_type values: TEXT, DATE, BOOLEAN, FIXED, NUMBER.

Inputs

NameTypeDefaultDescription
AuthorizationheaderrequiredBearer <access_token>.
agent_idpath stringrequiredAgent identifier.
field_namestringrequiredUnique field name.
field_typestringrequiredTEXT, DATE, BOOLEAN, FIXED, or NUMBER.
field_enumarrayoptionalEnum choices when field_type is FIXED.
is_visiblebooleanrequiredControls UI visibility.

Outputs

StatusTypeDescription
201 Createdapplication/jsonCreated field wrapped in the standard response envelope.
GET/api/agents/{agent_id}/call_infields

List Call Infields

Lists configured call input fields for the agent.

Bearer TokenResponse Envelope

Inputs

NameTypeDefaultDescription
AuthorizationheaderrequiredBearer <access_token>.
agent_idpath stringrequiredAgent identifier.

Outputs

StatusTypeDescription
200 OKapplication/jsonReturns call input fields in the response envelope.
PATCH/api/agents/{agent_id}/call_infields/{field_name}

Update Call Infield

Updates a call input field definition by field name.

Bearer TokenResponse Envelope

Inputs

NameTypeDefaultDescription
AuthorizationheaderrequiredBearer <access_token>.
agent_idpath stringrequiredAgent identifier.
field_namepath stringrequiredField to update.
bodyobjectrequiredPartial field definition updates.

Outputs

StatusTypeDescription
200 OKapplication/jsonUpdated field in response envelope.
DELETE/api/agents/{agent_id}/call_infields/{field_name}

Delete Call Infield

Deletes a call input field definition by name.

Bearer TokenResponse Envelope

Inputs

NameTypeDefaultDescription
AuthorizationheaderrequiredBearer <access_token>.
agent_idpath stringrequiredAgent identifier.
field_namepath stringrequiredField to delete.

Outputs

StatusTypeDescription
200 OKapplication/jsonDelete result in response envelope.

Service Config

This endpoint updates one service-specific section of the current config for the authenticated developer’s own agent without replacing the entire config document.

PUT/api/agents/{agent_id}/config/{service_type}

Update Service Config Section

Updates exactly one of `tts_config`, `stt_config`, `vad_config`, or `llm_config` on the current config.

Bearer TokenRaw Model Response
Behavior
  • Owner-only endpoint.
  • The backend loads the current config, validates the payload against the selected service type, updates only that section, and persists the result.

Inputs

NameTypeDefaultDescription
AuthorizationheaderrequiredOwner bearer token.
agent_idpath stringrequiredAgent identifier.
service_typepath stringrequiredOne of tts_config, stt_config, vad_config, llm_config.
bodyobjectrequiredPayload shape depends on the chosen service_type.

Outputs

StatusTypeDescription
200 OKapplication/jsonReturns the updated config or current config representation.
400 Bad Requestapplication/jsonInvalid payload or failed update.
403 Forbiddenapplication/jsonNot authorized.
404 Not Foundapplication/jsonNo current config found.

Common Models

These models appear repeatedly across the developer agent management surface.

Agent Object

{
"id": "mongo-id",
"agent_id": "AGT_12345678",
"agent_name": "Support Agent",
"agent_description": "Handles support conversations",
"user_id": "user-id",
"organization_id": "org-id",
"team": [
{
"user_id": "user-id",
"role": "member",
"added_at": "2026-03-11T10:00:00Z"
}
],
"is_active": true,
"agent_type": "INBOUND",
"whatsapp_enabled": false,
"is_auto": true,
"team_size": 1,
"created_at": "2026-03-11T10:00:00Z",
"updated_at": "2026-03-11T10:00:00Z",
"agent_cost": 5.0,
"livekit_api_key": "optional",
"livekit_api_secret": "optional",
"livekit_host_url": "optional"
}

Agent Config Object

{
"_id": "mongo-id",
"agent_id": "AGT_12345678",
"system_prompt": "You are a helpful agent.",
"starting_instructions": "Greet the user.",
"agent_type": "generic_alpha",
"guardrail_ids": ["personality_v1", "environment_v1"],
"metadata_schema": [
{
"name": "customer_name",
"type": "string",
"required": true,
"description": "Customer name",
"default": null,
"enum_values": null
}
],
"examples": [
{
"role": "user",
"content": "Hello"
}
],
"guidelines": ["Be concise"],
"call_outcomes": [],
"call_infields": [],
"notes": "Initial config",
"tts_config": {
"voice_id": "Indus-hi-maya"
},
"llm_config": {
"provider": "groq",
"model": "openai/gpt-oss-120b",
"temperature": 0,
"max_tokens": 0,
"context_turns": 0
},
"stt_config": {
"provider": "deepgram",
"language": "hi"
},
"vad_config": {
"min_silence_duration": 0.3,
"min_speech_duration": 0.4,
"activation_threshold": 0.45
},
"version": 1,
"status": "published",
"is_current": true,
"created_at": "...",
"updated_at": "...",
"created_by": "user-id",
"updated_by": "user-id"
}