Browse Documentation

Concepts / provider evidence

Useful estimates, explicit gaps, reproducible comparisons.

Provider pricing, measured usage, and final invoice cost are different facts. Wildflower keeps them separate in the API, analytics schema, and benchmark output so a convenient estimate cannot quietly become a billing claim.

Available now

List-price estimate

Versioned normalized price pinned when the sandbox is created and prorated over Wildflower-observed wall time. Useful for comparisons and anomaly detection; confidence is low.

Provider evidence

Provider-reported

A provider-owned usage meter or amount. It remains unavailable until an authoritative provider API, scope, identity, and lag are integrated.

Financial truth

Invoice-reconciled

A finalized billing export or invoice matched back to a sandbox. It remains separate from both estimates and operational telemetry.

Never use the estimate as an invoice

Provider billing minimums, actual shape and CPU use, idle policy, storage, network, credits, subscriptions, discounts, tax, lag, and adjustments can all create discrepancies. Wildflower does not use the estimate for collection, balances, or hard quota enforcement.

Read cost fidelity from the API

Usage remains available after sandbox deletion because the estimate uses the project-scoped registry and captured pricing evidence, not another provider lifecycle request. A later catalog refresh cannot rewrite a new sandbox’s historical estimate. Older rows without a creation snapshot explicitly report current_catalog_fallback.

terminal
curl -fsS \  -H "Authorization: Bearer $WILDFLOWER_API_KEY" \  "$WILDFLOWER_URL/v1/sandboxes/$SANDBOX_ID/usage"
response.json
{  "schemaVersion": "wildflower.sandbox-usage.v2",  "status": "estimated",  "confidence": "low",  "listPriceEstimateUsd": "0.041400",  "providerReported": {    "status": "unavailable",    "amountUsd": null,    "reason": "No authoritative per-sandbox amount is integrated."  },  "invoiceReconciled": {    "status": "unavailable",    "amountUsd": null,    "reason": "No finalized invoice amount is reconciled."  },  "priceSource": {    "basis": "sandbox_creation_snapshot",    "capturedAt": "2026-07-28T00:00:00Z",    "url": "https://e2b.dev/pricing",    "digest": "<sha256>"  }}

Provider billing-signal coverage

This table is synchronized from the API repository. “Unavailable” can mean the provider has no documented signal, the signal is aggregate-only, or a distinct billing credential and identity are required. Those cases are not collapsed into one optimistic boolean.

terminal
curl -fsS \  -H "Authorization: Bearer $WILDFLOWER_API_KEY" \  "$WILDFLOWER_URL/v1/provider-observability"
ProviderBest signalWildflower stateGranularity / lagWhat is missing
AWS AgentCoreLive auth not verifiedProvider TelemetryAdditional Credentials RequiredSessionup to 60 minutes for resource telemetryAgentCore exposes usage telemetry, not an authoritative per-session invoice amount through the sandbox lifecycle API.
  • The current bridge credential does not grant Wildflower CloudWatch access.
  • AWS states that observability telemetry can differ from authoritative billing.
BlaxelLive auth not verifiedProvider Billing ApiAdditional Scope RequiredResourcea few minutes or longer under loadThe provider has a resource-centric Billing Explorer API, but Wildflower requires a separately verified billing scope before querying it.
  • Wildflower does not assume a sandbox lifecycle token has account billing access.
  • Billing data is delayed and is unsuitable for hard real-time enforcement.
ASCII BoxLive auth not verifiedNo Documented ApiEstimate OnlyNoneunknownOnly the published fixed-VM rate is available to Wildflower.
  • No public per-box usage or cost API is documented.
  • The lifecycle response does not include metered usage or cost.
Cloudflare SandboxLive auth not verifiedProvider Analytics ApiAdditional Credentials RequiredInstanceanalytics pipeline delayCloudflare exposes per-instance usage metrics, but the current bridge contract does not expose the required analytics identity or credential.
  • The current bridge profile stores neither an account identifier nor an Analytics API token.
  • GraphQL usage values estimate billing and are not an invoice.
E2BLive auth not verifiedDashboard OnlyEstimate OnlyAccountnot documented as a per-sandbox API contractWildflower can estimate published rates but cannot retrieve an authoritative per-sandbox amount.
  • E2B documents dashboard usage and cost but no per-sandbox billing API used by Wildflower.
  • Lifecycle responses do not include metered usage or cost.
Novita Agent SandboxLive auth not verifiedDashboard ExportEstimate OnlyAccountnot documented as a per-sandbox API contractWildflower has published CPU and memory rates but no authoritative per-sandbox billing response.
  • Billing detail is documented for the console and export flow, not as a per-sandbox API integrated by Wildflower.
  • Lifecycle responses do not include metered usage or cost.
DaytonaLive auth not verifiedDashboard OnlyEstimate OnlySandboxbilling settlement may lagPer-sandbox billing details exist in the provider UI but are not returned through the current adapter API.
  • Daytona documents per-sandbox CPU seconds, RAM GB-seconds, disk, and cost in its billing UI, but Wildflower does not have a documented API response for those values.
  • Lifecycle responses do not include metered usage or cost.
ModalLive auth not verifiedAggregate Billing ReportUnsupported Per SandboxWorkspace Hour Or Dayseveral minutesModal does not provide the per-sandbox provider-reported cost needed by Wildflower's common usage contract.
  • Modal's programmatic billing reports are workspace aggregates, not an authoritative per-sandbox record.
  • Reports may exclude credits, reservations, and other final invoice adjustments.
  • The current Modal bridge does not expose billing-report access.
RunloopLive auth not verifiedNo Documented ApiEstimate OnlyNoneunknownOnly published resource rates are available to Wildflower.
  • No public per-devbox usage or cost API is documented for Wildflower to integrate.
  • Lifecycle responses do not include metered usage or cost.
Smol MachinesLive auth not verifiedPer Machine Metered Usage And CostProvider Signal Not IntegratedMachineprovider-definedSmol documents per-machine metered cost, but Wildflower has not integrated and live-verified that signal; comparable public unit rates are not published.
  • Wildflower has not yet integrated Smol's documented per-machine metered usage and cost signal.
  • The lifecycle adapter response does not prove that every credential can read the metered cost fields.
  • Smol does not publish comparable CPU or memory unit rates, so a normalized list-price estimate is also unavailable.
Fly.io SpritesLive auth not verifiedNo Documented ApiEstimate OnlyNoneunknownSprites bills actual consumption, so Wildflower's normalized wall-time estimate is intentionally low-confidence.
  • No public per-Sprite billing API is documented.
  • Actual CPU and memory consumption cannot be reconstructed from lifecycle wall time.
Vercel SandboxLive auth not verifiedAccount Usage ReportUnsupported Per SandboxTeam Or Accountprovider reporting delayWildflower cannot attribute the provider's account-level usage report to one sandbox without an authoritative mapping.
  • Vercel's documented usage reporting is team/account scoped rather than an authoritative per-sandbox API response.
  • The current access token may not include usage permissions.
Modal is explicitly aggregate-only

Modal’s documented programmatic reports aggregate a workspace by hour or day, can omit final invoice adjustments, and are not exposed by the current bridge. They do not provide the authoritative per-sandbox amount required by Wildflower’s common contract, so Modal is markedunsupported_per_sandbox, not “supported.”

Unavailable means unavailable

Smol currently has neither an integrated provider cost signal nor a comparable normalized CPU-and-memory rate, so Wildflower returns no estimate and the bounded canary refuses to guess a budget. Local billing fixtures exercise pagination, duplicate/conflicting records, missing scope, aggregate-only reports, lag, currency, and malformed amounts; they do not claim that any provider integration is live.

Partial credentials degrade by operation

Connecting a key does not prove it can create, execute, delete, or read billing data. The safe profile test makes no provider request and leaves a new profile unverified. Deep verification is explicit because it mutates provider state and may cost money.

terminal
# Creates, executes in, and deletes a provider sandbox.# This can incur provider charges.wildflower provider verify e2b
  • Verified create, get, exec, and delete with missing optional usage:degraded; working operations remain available.
  • A known failed operation is rejected locally withprovider_operation_unavailable, a reason, and remediation.
  • Cleanup not proven: unsafe; future creates are blocked and the provider-native orphan ID and a reconciliation operation ID are returned.
  • A create with an unknown outcome and no routing ID is alsounsafe; automated cleanup is impossible, so the reconciliation operation ID is the durable investigation handle.
  • Successful readiness evidence expires after 24 hours. Replacing or disconnecting a key while verification runs cannot be overwritten by the stale result.
  • A runtime authentication failure invalidates only the affected operation. Transport and temporary provider failures do not erase credential evidence.

Run a bounded live canary first

terminal
corepack pnpm providers:canary -- \  --confirm-live \  --max-estimated-cost-usd 0.10 \  --providers e2b,daytona

The canary requires fresh deep-verification evidence, a comparable normalized price, explicit live confirmation, and an estimated-cost ceiling before any network mutation. It uses stored profiles, attempts cleanup after every post-create failure, and writes evidence without credentials, sandbox IDs, provider-native IDs, or command output. The ceiling is an estimate, not a provider guarantee.

Four latency boundaries, not one vague speed number

ClockBoundaryUse it for
Client wallComplete HTTP request observed by the benchmark controller.What an application experienced, including network and queueing.
Wildflower appServer-Timing: app, excluding provider wait.Wildflower control-plane overhead.
Provider adapterServer-Timing: provider around the adapter call.Provider API plus adapter-boundary time.
Inside sandbox/proc/uptime immediately around the workload, with a validated workload marker and declared 10 ms resolution.Workload execution only; mismatched or unsupported evidence remains unavailable and never borrows another clock.

Run the neutral provider benchmark

terminal
export WILDFLOWER_URL="https://wildflower.computer"export WILDFLOWER_API_KEY="<project-key>"corepack pnpm providers:bench -- \  --providers e2b,daytona,modal \  --samples 100 \  --warmup-samples 3 \  --workloads noop,shell_cpu,filesystem_cache,filesystem_durable \  --region us-east \  --seed published-comparison-1 \  --publishable

Protocol 2 fixes noop, a portable shell loop namedshell_cpu (not a hardware-normalized “single-core” score), cached filesystem work, and a separate fsync filesystem workload. Warm runs use a new sandbox per provider and workload, record three unmeasured warmups, and clean that workload before moving on. Provider order is seeded and interleaved; timeouts plus HTTP, workload, and cleanup failures remain in the artifact.

Statistics fail closed when the sample count cannot support them: p50 requires 2 measurements, p95 20, p99 100, the p50 bootstrap interval 20, and the p95 interval 100. Publication mode also requires a named region, fresh readiness, a clean source equal to local origin/main, and a commit-shaped API build revision.

The provider-default cohort is available. The normalized-resource cohort is deliberately unavailable until every provider can be assigned equivalent declared vCPU, memory, architecture, and image contents. No cross-workload composite score or overall winner is produced.

Telemetry delivery is observable too

Create, delete, and usage-read boundaries emitwildflower.telemetry.sandbox-cost-snapshot.v2 under the canonicalwildflower.sandbox.cost_snapshot.captured event name. Every event has a UUIDv7 ID and an immutable price-source basis, so equal-millisecond rows resolve to one complete deterministic snapshot instead of mixing fields. Public/metrics and/healthz expose only process-wide attempt, sink-rejection, and ClickHouse dropped-row counters. They contain no project, sandbox, provider, request, or credential dimensions.