# Migrating from NopeCHA

> Switch from the NopeCHA recognition API to Solvecha by changing the base URL and the key. Paths, fields, answers and error codes stay the same.

Solvecha follows the request and response formats, the error codes and the endpoint paths of the NopeCHA recognition API. For most clients the switch is two changes.


1. **Change the base URL** from `https://api.nopecha.com` to `https://api.solvecha.com`.
2. **Use your Solvecha key** (`slv_...`) instead of your NopeCHA key.


```diff
- BASE = "https://api.nopecha.com"
- KEY = "YOUR_NOPECHA_KEY"
+ BASE = "https://api.solvecha.com"
+ KEY = "YOUR_API_KEY"
```

## What stays the same

| | NopeCHA | Solvecha |
|---|---|---|
| Create a job | `POST /v1/recognition/<type>` | Same path |
| Fetch the answer | `GET /v1/recognition/<type>?id=<id>` | Same path |
| Legacy paths | `POST /`, `GET /?id=`, `GET /status` | Same paths |
| Status | `GET /v1/status` | Same path and fields |
| Key | Header, `key` field or query | Same three ways |
| Error codes | `9`, `10`, `11`, `14`, `15`, `16` | Same codes and messages |

## Differences to know

- **Request bodies.** JSON and url-encoded form bodies work. Multipart does not.
- **Plan.** A key needs an active plan to solve. Without a plan the API answers error `16`.
- **Quota window.** The daily quota resets at 00:00 UTC. NopeCHA uses a rolling 24 hour window. `GET /v1/status` shows `lastreset`, `ttl` and `duration` for the UTC day.
- **Types.** Solvecha supports the five recognition types on the [captcha types](https://solvecha.com/docs/captcha-types/recaptcha.md) pages. Other NopeCHA products are not offered.
- **Fallback.** When our own models cannot answer a request, the engine passes the image and the task text to NopeCHA and returns its answer. The [Privacy Policy](https://solvecha.com/legal/privacy) describes this.
- **Browser extension.** If you use a browser extension, use the [Solvecha extension](https://solvecha.com/docs/browser-extension.md). It solves reCAPTCHA v2 image challenges.

## Test the switch

Call the status endpoint with your new key. It costs no quota.

```bash
curl "https://api.solvecha.com/v1/status" -H "Authorization: Bearer YOUR_API_KEY"
```

Then send one real job with your usual code. Check the quota with `GET /v1/status` afterwards: it drops by one for each answer you fetched.

For prices side by side, with sources, see the [compare page](https://solvecha.com/compare).
