# Environments

Teller provides three distinct environments for different stages of your integration: sandbox for UI testing, development for real-world testing, and production for live applications.

## Overview

Each environment serves a specific purpose in your integration journey. Choosing the right environment ensures you can test effectively while managing costs and access appropriately.

| Environment     | Data           | Cost | Enrollment Limit | Use Case                               |
| --------------- | -------------- | ---- | ---------------- | -------------------------------------- |
| **Sandbox**     | Simulated      | Free | Unlimited        | UI testing, flow development           |
| **Development** | Real bank data | Free | 100 enrollments  | Integration testing with real accounts |
| **Production**  | Real bank data | Paid | Unlimited        | Live applications                      |

## Sandbox

The sandbox environment uses simulated data and never connects to real financial institutions. It is ideal for:

-   Building and testing your UI integration
-   Simulating enrollment flows including MFA scenarios
-   Testing error handling without affecting real accounts

> **Note**
>
> Use `username` / `password` for successful enrollments, or `otp` / `password` to test MFA flows. See the [Sandbox guide](/docs/guides/sandbox) for all test credentials.

To use the sandbox environment, initialize [Teller Connect](/docs/guides/connect) with:

```javascript
TellerConnect.setup({
  applicationId: "app_xxxxxx",
  environment: "sandbox",
  // ...
});
```

## Development

The development environment connects to real financial institutions and returns real bank data. This is critical for validating your integration before going live.

> **Note**
>
> Development uses **real bank data**, not simulated data. When you or your testers connect accounts, you are accessing actual financial information.

### Key characteristics

-   **100 enrollment limit** — An enrollment represents one bank login, which may include multiple accounts (e.g., checking, savings, and credit card under the same login)
-   **Free to use** — No charges for the development environment
-   **Real institution connectivity** — Test against actual bank authentication flows, MFA requirements, and data formats
-   **Rate limits apply** — Same [rate limits](/docs/api#rate-limits) as production

### When to use development

Use the development environment when you need to:

-   Verify your application handles real transaction data correctly
-   Test against specific institutions your users will connect
-   Validate your webhook handlers with real enrollment events
-   Confirm your UI works with actual account structures

To use the development environment:

```javascript
TellerConnect.setup({
  applicationId: "app_xxxxxx",
  environment: "development",
  // ...
});
```

> **Note**
>
> API requests in development require your [client certificate](/docs/api/authentication), just like production.

## Production

The production environment is for live applications serving real end-users. Access to production requires completing Teller's Know Your Business (KYB) verification process.

### Requirements

To access production, you must complete KYB verification, which includes:

-   Company URL and product demonstration
-   Beneficial owner information
-   Business documentation

Contact Teller to begin the production access process.

### Transitioning to production

When moving from development to production:

1.  Update your Teller Connect configuration to use `environment: "production"`
2.  Ensure your webhook endpoints are production-ready
3.  Verify your certificate is valid and securely stored

```javascript
TellerConnect.setup({
  applicationId: "app_xxxxxx",
  environment: "production",
  // ...
});
```

## Choosing the right environment

**Start with sandbox** to build your UI and test enrollment flows without needing real credentials.

**Move to development** once your UI is working and you need to validate against real bank data. Use your own bank accounts or those of your team to test the full integration.

**Request production access** when you are ready to serve real end-users with a tested, working integration.

## Common questions

### Do enrollments in development count toward production?

No. Development and production are completely separate. Enrollments created in development do not transfer to production, and the 100-enrollment limit applies only to development.

### Can I reset my development enrollment count?

Deleting an enrollment does not restore your enrollment count. The limit represents total enrollments created, not active enrollments.

### What happens when I hit the development limit?

You will not be able to create new enrollments in development. Request production access when your integration is ready.