Skip to main content

Products

A Product is the top-level container in Bedrock. It represents a single AI-powered application and holds all the configuration needed for your agents to run.

What’s in a Product?

FieldDescription
nameHuman-readable name for your product
system_promptDefault instructions inherited by all agents
default_modelDefault LLM model for new agents (e.g., claude-sonnet-4)
openai_api_keyYour OpenAI API key (write-only)
anthropic_api_keyYour Anthropic API key (write-only)
tool_call_secretSecret sent to webhook tools for verification
adaptersList of adapters (tool integrations) available to agents

Creating a Product

curl -X POST https://api.bedrock.orinlabs.org/api/products/products/ \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Customer Support Bot",
    "system_prompt": "You are a helpful customer support agent for Acme Corp.",
    "default_model": "claude-sonnet-4",
    "anthropic_api_key": "sk-ant-..."
  }'
Response:
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "name": "Customer Support Bot",
  "system_prompt": "You are a helpful customer support agent for Acme Corp.",
  "default_model": "claude-sonnet-4",
  "tool_call_secret": "",
  "created_at": "2024-01-15T10:30:00Z"
}
LLM provider keys (openai_api_key, anthropic_api_key) are write-only for security. They cannot be read back via the API.

LLM Provider Configuration

Bedrock uses your own LLM provider keys. This means:
  • You control costs directly with your provider
  • You can use any model available on your account
  • Usage shows up in your provider’s dashboard
Configure at least one provider key to run agents:
curl -X PATCH https://api.bedrock.orinlabs.org/api/products/products/PRODUCT_ID/ \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "openai_api_key": "sk-...",
    "anthropic_api_key": "sk-ant-..."
  }'

System Prompt

The product’s system_prompt is inherited by all agents in the product. It defines the baseline behavior and personality.
{
  "system_prompt": "You are an AI assistant for Acme Corp.\n\nKey responsibilities:\n- Answer customer questions about our products\n- Help troubleshoot common issues\n- Escalate complex problems to human support\n\nTone: Professional but friendly. Never make up information."
}
Agents can override this with their own system_prompt for specialized behavior.

Assigning Adapters

Adapters provide tools to your agents. Assign default adapters to get started quickly:
curl -X POST https://api.bedrock.orinlabs.org/api/products/products/PRODUCT_ID/assign_default_adapters/ \
  -H "Authorization: Bearer YOUR_API_KEY"
This assigns the built-in adapters: Contacts, SMS, Email, Notifications, and Projects. See Adapters for details on configuring adapters.

API Keys

Each product can have multiple API keys for different environments or services:
# Create a new API key
curl -X POST https://api.bedrock.orinlabs.org/api/products/api-keys/ \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Production",
    "product": "PRODUCT_ID"
  }'
Save API keys immediately - they’re only shown once at creation time.

Product Hierarchy

Organization
└── Product
    ├── API Keys (authentication)
    ├── Adapters (tool integrations)
    │   └── Adapter Configs (per-adapter settings)
    └── Agents
        ├── Memory (conversation history)
        └── State (contacts, tasks, documents)

Usage Tracking

Track LLM usage across all agents in a product:
curl -X GET "https://api.bedrock.orinlabs.org/api/products/products/PRODUCT_ID/usage/?start_date=2024-01-01T00:00:00Z" \
  -H "Authorization: Bearer YOUR_API_KEY"
Response:
{
  "product_id": "550e8400-...",
  "product_name": "Customer Support Bot",
  "input_tokens": 125000,
  "output_tokens": 45000,
  "cached_tokens": 80000,
  "total_cost_usd": 2.45,
  "llm_calls": 500,
  "agent_count": 3
}

Best Practices

One Product per App

Create separate products for separate applications or environments.

Descriptive System Prompts

Write clear system prompts that define expected behavior.

Separate API Keys

Use different API keys for dev, staging, and production.

Configure Tool Secret

Set tool_call_secret if using webhook-based tools.