---
title: Semva — API digital twins for testing agents
description: Sandboxed clones of the APIs your agents depend on, with seeded state, private URLs, and provider-compatible SDK behavior.
doc_version: private-beta
last_updated: 2026-08-27
---

<!-- markdownlint-disable-next-line MD025 -->
# Test your agents against APIs that behave like the real thing

Semva provides sandboxed clones of the APIs your agents depend on. Describe the
state you need in plain language, get a private URL and provider-shaped
credential, then run the vendor's own SDK against it.

## Sandboxes

Each sandbox provides:

- A private hostname whose state is isolated from every other run and team.
- Records seeded from a plain-language scenario or template.
- Credentials shaped like the real provider's keys.
- Editable state that persists writes made through the API.
- A request log containing method, body, status, and latency.

Because a sandbox is stored state rather than a dedicated container, it is
available immediately, has no cold start, and costs nothing while idle.

## Twin fidelity

Twins are hand-written for the providers agents rely on. They model
provider-specific state machines, pagination, idempotency, authentication,
errors, and other behavior. Each one is validated in CI with the provider's
official SDK.

## Available twins

- **Resend:** Email delivery lifecycles, scheduled sends, domains, API-key
  permissions, contacts, segments, broadcasts, pagination, and idempotency.

## Workflow

1. Pick a provider twin.
2. Describe the state the agent should encounter.
3. Receive a private hostname and provider-shaped credential.
4. Point the existing SDK at that base URL.
5. Run the agent and inspect every request and resulting state change.

## Agent interface

Provision and inspect sandboxes through the Semva web app. The MCP transport is
reserved at `https://mcp.semva.dev/mcp`, but it does not expose sandbox tools
yet.

A provider SDK only needs its base URL and key changed:

```python
import resend

resend.api_key = "re_semva_9f2a…"
resend.api_url = "https://resend-a1c93f.semva.run"

email = resend.Emails.send({
    "from": "onboarding@resend.dev",
    "to": "delivered@resend.dev",
    "subject": "Hello from the sandbox",
    "html": "<strong>It works.</strong>",
})
```

## Guarantees

A twin will not:

- Invent a response for a route it does not model.
- Return a generic 404 for an endpoint that exists but is unmodelled.
- Claim behavioural fidelity without passing the provider SDK in CI.
- Share state with another sandbox or another team.

## Glossary

- **API digital twin:** A stateful test double that reproduces an API's
  observable payloads and behavior.
- **Sandbox:** One isolated instance of a twin with its own hostname,
  credentials, records, and request log.
- **Twin:** A hand-built provider clone validated against the official SDK.
- **Scenario:** A plain-language description of the records and state a
  sandbox should contain.
- **Seeder:** The component that translates a scenario into sandbox records.
- **Provider-shaped credential:** A sandbox credential formatted like the
  provider key it replaces.
- **Not modelled:** An explicit response indicating that a known provider
  operation is outside a twin's fidelity.

## Access

Semva is in private beta with an open waitlist and is free for academic
researchers. [Join the Semva waitlist](https://tally.so/r/lbk9rV) to request
access.

## Sitemap

- [Homepage](/)
- [Agent guide](/AGENTS.md)
- [LLM index](/llms.txt)
- [Markdown sitemap](/sitemap.md)
- [XML sitemap](/sitemap.xml)
