Self-managed Agent Playbooks API examples
Create a playbook, mint publisher and reader agent keys, verify agent access, and hand connection details to a developer.
Create a playbook, issue publisher and reader agent keys, and verify application access with curl or the Iris command-line interface (CLI).
Before you begin, deploy the chart and forward the APIs, then load the administrative credentials. Keep response files private:
umask 077
The local HTTP addresses use the Kubernetes port-forwards. For application deployment, give developers the data-plane endpoint your platform exposes.
Create a playbook
List the embedding models configured for this deployment:
curl --fail-with-body -sS \
"$IRIS_AGENT_PLAYBOOKS_SERVICE_URL/iris/v1/agent-playbooks/models" \
-H "Authorization: Bearer $IRIS_AGENT_PLAYBOOKS_SERVICE_TOKEN" \
| jq '.items[] | select(.purpose == "EMBEDDING")'
Create the playbook with one of the returned identities:
jq -n \
--arg provider '<provider>' \
--arg model '<model>' \
--argjson dimensions '<dimensions>' \
'{name: "support", embedding: {provider: $provider, model: $model, dimensions: $dimensions}}' \
> playbook-request.json
curl --fail-with-body -sS \
-X POST "$IRIS_AGENT_PLAYBOOKS_SERVICE_URL/iris/v1/agent-playbooks/playbooks" \
-H "Authorization: Bearer $IRIS_AGENT_PLAYBOOKS_SERVICE_TOKEN" \
-H 'Content-Type: application/json' \
--data-binary @playbook-request.json > playbook.json
export IRIS_AGENT_PLAYBOOKS_PLAYBOOK_ID="$(jq -er '.playbookId' playbook.json)"
Playbook IDs start with pb_. Read the playbook's state:
curl --fail-with-body -sS \
"$IRIS_AGENT_PLAYBOOKS_SERVICE_URL/iris/v1/agent-playbooks/playbooks/$IRIS_AGENT_PLAYBOOKS_PLAYBOOK_ID" \
-H "Authorization: Bearer $IRIS_AGENT_PLAYBOOKS_SERVICE_TOKEN" \
| jq '{playbookId, state, embedding, discovery}'
Continue when state is READY. If it is PROVISIONING, repeat the read. If it is FAILED, check service health and logs before you retry. Creating a playbook with a name already in use returns 409.
To list playbooks, send GET /iris/v1/agent-playbooks/playbooks. The response holds items and, when more follow, a nextCursor to pass back as cursor.
Create agent keys
Create a publisher grant for this playbook:
jq -n --arg id "$IRIS_AGENT_PLAYBOOKS_PLAYBOOK_ID" '{
name: "support-publisher",
grants: [{
tenant: "default",
product: "playbook",
resourceType: "playbook",
resourceId: $id,
actions: ["write", "publish"]
}]
}' > publisher-grant.json
Use the deployment's tenantId as tenant. Issue the key through the Identity Service:
curl --fail-with-body -sS \
-X POST "$IRIS_IDENTITY_URL/v1/api-keys" \
-H "Authorization: Bearer $IRIS_IDENTITY_TOKEN" \
-H 'Content-Type: application/json' \
--data-binary @publisher-grant.json > publisher-key.json
export IRIS_AGENT_PLAYBOOKS_API_KEY="$(jq -er '.token' publisher-key.json)"
Issue a separate reader key for the same playbook:
jq '.name = "support-reader" | .grants[0].actions = ["read"]' publisher-grant.json \
| curl --fail-with-body -sS \
-X POST "$IRIS_IDENTITY_URL/v1/api-keys" \
-H "Authorization: Bearer $IRIS_IDENTITY_TOKEN" \
-H 'Content-Type: application/json' \
--data-binary @- > reader-key.json
Save both tokens in your secret manager and keep their keyId values. The Identity Service returns a token only when it creates or rotates a key. Minting fails if the playbook doesn't exist or the grant names another tenant.
Verify application access
curl --fail-with-body -sS \
"$IRIS_AGENT_PLAYBOOKS_URL/iris/data/v1/agent-playbooks/playbooks/$IRIS_AGENT_PLAYBOOKS_PLAYBOOK_ID/health" \
-H "Authorization: Bearer $IRIS_AGENT_PLAYBOOKS_API_KEY"
The response reports READY for the playbook, its metadata and content Redis, the embedding provider, and the license.
Hand off to a developer
Give the content team the data-plane endpoint, the playbook ID, and the publisher key for the developer quickstart. They set these variables:
IRIS_AGENT_PLAYBOOKS_URL='<data-plane-endpoint>'
IRIS_AGENT_PLAYBOOKS_PLAYBOOK_ID='<playbook-id>'
IRIS_AGENT_PLAYBOOKS_API_KEY='<playbook-api-key>'
Give runtime agents the reader key instead, for agent integration over REST or MCP. Remove the local key-response files after you save both tokens.
Use the Iris CLI
The Iris CLI reads the same variables. Install it with Python 3.11 or later:
python -m pip install 'redis-iris>=1.0.0'
Create a playbook and mint a read-only key for it in one step, writing the connection values to .env:
iris agent-playbooks service create --name support \
--embedding-provider openai \
--embedding-model '<model>' \
--embedding-dimensions '<dimensions>' \
--key-actions read \
--write-env .env
--embedding-provider accepts openai or noop, so the CLI can create playbooks only for a connection named openai. The CLI sends FAQ and skill minimum scores of 0.3 unless you pass --faq-min-score and --skill-min-score; calibrate them against your own scores. Add --dry-run to print the request without sending it.
Mint a content key with read, write, and publish for an existing playbook, then check every hop from the control plane to a data read:
iris agent-playbooks service key "$IRIS_AGENT_PLAYBOOKS_PLAYBOOK_ID" --role content --write .env
iris agent-playbooks service check "$IRIS_AGENT_PLAYBOOKS_PLAYBOOK_ID" --env-file .env
Inspect a playbook with iris agent-playbooks service show <playbook-id>, and list, rotate, or revoke keys with iris identity keys. Keys the CLI mints expire after 90 days unless you pass --expires.
For retrieval settings, see Playbook settings.