Customer stories

Don’t trust what we say — trust what our customers say.

“I'm a hobbyist and wanted to find a good, European sovereignty respecting place that was still easy for me to use and work with. Danube Data is pleasant, doesn't upsell and is clearly run by people who know their business. I 100% recommend them.”
Lucille Demoy

Copy-paste quickstart

Paste one of these instructions into a terminal-capable agent. The CLI path acts directly; the Terraform path stops for review.

Tokens stay in environment variables. Neither prompt asks the agent to print or persist a credential.
Install the current DanubeData CLI:
npm install -g @danubedata/cli

Use the scoped API token already present in DANUBE_TOKEN. Never print it or write it to a file.

Create this small stack, keeping --json on every command:
danube database create --name agent-db --provider postgresql --datacenter fsn1 --profile <available-profile> --database-name app --json
danube cache create --name agent-cache --provider valkey --datacenter fsn1 --profile <available-profile> --json
danube storage buckets create --name agent-assets --region fsn1 --versioning --json

After every command, parse { success, data, error, meta }. If success is false, branch on error.code and error.retryable instead of parsing prose.

Database and cache creation return resource receipts before those services are ready. Poll both resources by repeating:
danube database get agent-db --json
danube cache get agent-cache --json

For each resource, read status_details.operation.terminal. If it is false, wait five seconds and poll again. Never infer completion from a status string; treat an unknown state as still running. When terminal is true, require operation.state to be succeeded before using the resource. If it failed, stop and report the structured error.

If another command returns a separate operation ID, run:
danube operations wait <operation-id> --json
Continue only when terminal: true.

Only after the database and cache operations have succeeded, print their connection endpoints and the bucket endpoint. Treat credentials as secrets and do not persist them.

Built for a loop, not a demo

The agent-operable part is the contract between commands, failures, and documentation. These are the receipts.

A CLI your agent can’t get stuck in

Non-interactive runs never prompt. Every command can return the same JSON envelope, and branchable exit codes distinguish missing input, authentication, not-found, API, and confirmation failures.

  • --json on success and failure
  • Exit 2 for missing required input
  • Exit 5 when confirmation is required
  • --idempotency-key on danube rapids apply

An API that says when it’s done

Long-running work exposes an operation with an explicit terminal boolean. The agent follows the server’s poll interval instead of guessing whether a status string means done.

  • Explicit operation.terminal
  • Server-controlled poll interval
  • Retryable flag on failures
  • Scoped token abilities

Docs your agent already read

The machine contract is published in model-sized indexes, Markdown and JSON documentation, an OpenAPI specification, and maintained Infrastructure as Code providers.

  • llms.txt and llms-full.txt
  • Every docs page as .md or .json
  • OpenAPI 3.1 document
  • Terraform and Pulumi providers
least_privilege

Scoped tokens & safety

Give the agent only the resource abilities it needs. Keep credentials in environment variables, and keep irreversible decisions behind an explicit gate.

  • Per-resource token abilities limit what a credential can read or change.
  • Confirmation-sensitive CLI commands fail with exit code 5 until explicit --force or --yes confirmation is provided where supported.
  • Managed EU infrastructure, hourly billing, logs, and metrics remain visible to the person accountable for the change.
declarative safety gateapproval required
01

Agent writes the desired state

Configuration is reviewable, versionable, and reproducible.

02

terraform plan shows the diff

The agent stops. You see additions, changes, and removals before they happen.

03

You approve, then it applies

Human review is part of the mechanism, not a promise around it.

Diagnostics an agent can act on

When the happy path breaks, the next action is still a command with structured output.

See every CLI command
preflight
Check whether a Rapids image can be pulled before a deployment starts.
probe
Verify the deployed endpoint from outside the platform, including HTTP and TLS.
diagnose
Correlate status, revisions, events, and logs into ranked findings with remediation.
operations wait
Follow a returned operation until its explicit terminal state, at the server’s pace.

Questions agents — and their operators — ask

The controls and contracts behind agent-operated infrastructure.

  • Any agent that can use a terminal can work with DanubeData, including Claude Code, Cursor, Codex, and in-house agents. Give it a scoped token and direct it to the danube CLI or the Terraform provider.

Your agent already has a terminal.

Give it infrastructure with a contract it can read — and a review gate you control.