Idempotency
Idempotency ensures that replaying a request multiple times has the same effect as sending it once. This is critical for network reliability.
Which Endpoints Require It
The Idempotency-Key header is required on:
POST /agents— create a new agentPOST /calls— create a new call
All other endpoints (GET, DELETE, etc.) do not use idempotency keys.
The Header
Pass a unique key for each logical operation:
curl -X POST https://api.dialogbrain.com/api/v1/agents \
-H "X-API-Key: db_live_YOUR_KEY" \
-H "Idempotency-Key: my-agent-creation-12345" \
-H "Content-Type: application/json" \
-d '{"name": "Booking assistant", "prompt_text": "You confirm bookings."}'
Missing Key → 400 Bad Request
If you forget the header:
{
"detail": "Idempotency-Key header is required"
}
Status: 400 Bad Request
Behavior During Retry
Same Key + Same Body → Original Response
If you send the same request twice:
# First request
curl -X POST https://api.dialogbrain.com/api/v1/agents \
-H "X-API-Key: db_live_YOUR_KEY" \
-H "Idempotency-Key: create-agent-1" \
-d '{"name": "Booking assistant", "prompt_text": "You confirm bookings."}'
# Response (201 Created):
# {"id": 42, "name": "Booking assistant", ...}
# Second request with same key and body
curl -X POST https://api.dialogbrain.com/api/v1/agents \
-H "X-API-Key: db_live_YOUR_KEY" \
-H "Idempotency-Key: create-agent-1" \
-d '{"name": "Booking assistant", "prompt_text": "You confirm bookings."}'
# Response (201 Created, same agent):
# {"id": 42, "name": "Booking assistant", ...}
The second request returns the same agent without creating a duplicate.
Same Key + Different Body → 409 Conflict
If you retry with the same key but different request body:
curl -X POST https://api.dialogbrain.com/api/v1/agents \
-H "X-API-Key: db_live_YOUR_KEY" \
-H "Idempotency-Key: create-agent-1" \
-d '{"name": "Different name", "prompt_text": "Something else."}'
# Response (409 Conflict):
{
"detail": "Idempotency key already used with a different request body"
}
This prevents accidental misuse of the key.
Same Key In-Flight → 409 Conflict with Retry-After
If a request with the same key is currently in progress:
{
"detail": "Request with this idempotency key is already in progress"
}
Status: 409 Conflict
Header: Retry-After: 2 (wait at least 2 seconds before retrying)
Key Expiration
Idempotency keys are valid for 24 hours from the time of the first request. After 24 hours, the key is discarded and can be reused for a new operation.
Example: if you create an agent with key create-agent-1 on Monday, you can safely reuse create-agent-1 on Tuesday to create a different agent.
Using the Python SDK
The SDK automatically generates and manages idempotency keys. Pass idempotency_key= to explicitly set one:
from dialogbrain import DialogBrainClient
async with DialogBrainClient(api_key="db_live_YOUR_KEY") as client:
# SDK auto-generates a UUID for idempotency
agent = await client.agents.create(
name="Booking assistant",
prompt_text="You confirm bookings."
)
# Or provide your own key
agent = await client.agents.create(
name="Booking assistant",
prompt_text="You confirm bookings.",
idempotency_key="my-specific-key-123"
)
The sync client works the same way:
from dialogbrain import SyncDialogBrainClient
with SyncDialogBrainClient(api_key="db_live_YOUR_KEY") as client:
agent = client.agents.create(
name="Booking assistant",
prompt_text="You confirm bookings.",
idempotency_key="my-specific-key-123"
)
See also: Errors