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.
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-reported
A provider-owned usage meter or amount. It remains unavailable until an authoritative provider API, scope, identity, and lag are integrated.
Invoice-reconciled
A finalized billing export or invoice matched back to a sandbox. It remains separate from both estimates and operational telemetry.
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.
curl -fsS \ -H "Authorization: Bearer $WILDFLOWER_API_KEY" \ "$WILDFLOWER_URL/v1/sandboxes/$SANDBOX_ID/usage"{ "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.
curl -fsS \ -H "Authorization: Bearer $WILDFLOWER_API_KEY" \ "$WILDFLOWER_URL/v1/provider-observability"| Provider | Best signal | Wildflower state | Granularity / lag | What is missing |
|---|---|---|---|---|
| AWS AgentCoreLive auth not verified | Provider Telemetry | Additional Credentials Required | Sessionup to 60 minutes for resource telemetry | AgentCore exposes usage telemetry, not an authoritative per-session invoice amount through the sandbox lifecycle API.
|
| BlaxelLive auth not verified | Provider Billing Api | Additional Scope Required | Resourcea few minutes or longer under load | The provider has a resource-centric Billing Explorer API, but Wildflower requires a separately verified billing scope before querying it.
|
| ASCII BoxLive auth not verified | No Documented Api | Estimate Only | Noneunknown | Only the published fixed-VM rate is available to Wildflower.
|
| Cloudflare SandboxLive auth not verified | Provider Analytics Api | Additional Credentials Required | Instanceanalytics pipeline delay | Cloudflare exposes per-instance usage metrics, but the current bridge contract does not expose the required analytics identity or credential.
|
| E2BLive auth not verified | Dashboard Only | Estimate Only | Accountnot documented as a per-sandbox API contract | Wildflower can estimate published rates but cannot retrieve an authoritative per-sandbox amount.
|
| Novita Agent SandboxLive auth not verified | Dashboard Export | Estimate Only | Accountnot documented as a per-sandbox API contract | Wildflower has published CPU and memory rates but no authoritative per-sandbox billing response.
|
| DaytonaLive auth not verified | Dashboard Only | Estimate Only | Sandboxbilling settlement may lag | Per-sandbox billing details exist in the provider UI but are not returned through the current adapter API.
|
| ModalLive auth not verified | Aggregate Billing Report | Unsupported Per Sandbox | Workspace Hour Or Dayseveral minutes | Modal does not provide the per-sandbox provider-reported cost needed by Wildflower's common usage contract.
|
| RunloopLive auth not verified | No Documented Api | Estimate Only | Noneunknown | Only published resource rates are available to Wildflower.
|
| Smol MachinesLive auth not verified | Per Machine Metered Usage And Cost | Provider Signal Not Integrated | Machineprovider-defined | Smol documents per-machine metered cost, but Wildflower has not integrated and live-verified that signal; comparable public unit rates are not published.
|
| Fly.io SpritesLive auth not verified | No Documented Api | Estimate Only | Noneunknown | Sprites bills actual consumption, so Wildflower's normalized wall-time estimate is intentionally low-confidence.
|
| Vercel SandboxLive auth not verified | Account Usage Report | Unsupported Per Sandbox | Team Or Accountprovider reporting delay | Wildflower cannot attribute the provider's account-level usage report to one sandbox without an authoritative mapping.
|
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.”
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.
# 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 with
provider_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 also
unsafe; 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
corepack pnpm providers:canary -- \ --confirm-live \ --max-estimated-cost-usd 0.10 \ --providers e2b,daytonaThe 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
| Clock | Boundary | Use it for |
|---|---|---|
| Client wall | Complete HTTP request observed by the benchmark controller. | What an application experienced, including network and queueing. |
| Wildflower app | Server-Timing: app, excluding provider wait. | Wildflower control-plane overhead. |
| Provider adapter | Server-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
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 \ --publishableProtocol 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.
- Download the provider benchmark protocol
- Download the result schema
- Download provider observability coverage
- Download provider-neutral billing fixtures
- Download the observability vocabulary
- Download the cost snapshot v2 schema
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.
