> ## Documentation Index
> Fetch the complete documentation index at: https://docs.avatcado.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Migrating from api.vatly.dev

> How to move from the legacy api.vatly.dev host to api.avatcado.com

# Migrating from api.vatly.dev

Avatcado was previously called Vatly. If your integration still points at `api.vatly.dev`, here is everything you need to know: nothing is broken, nothing is urgent, and switching takes one line.

## api.vatly.dev keeps working

`api.vatly.dev` is not shutting down on any fixed date. It remains fully operational until further notice and serves the exact same deployment as `api.avatcado.com`. There is no forced cutoff and no scheduled outage.

`api.vatly.dev` is deprecated, though: new documentation and examples target `api.avatcado.com`, so we recommend switching your base URL when it's convenient for you.

## Your API keys are unchanged

Nothing to rotate. Keys authenticate identically on both hosts:

* Keys minted before the rebrand use the `vtly_live_` / `vtly_test_` prefix and keep working permanently
* Keys minted after the rebrand use the `avat_live_` / `avat_test_` prefix
* Both prefixes are accepted on both hosts, forever. There is no forced key rotation

## Switch your base URL

Change the host, keep everything else: path, headers, and request/response shapes are identical.

<CodeGroup>
  ```bash Before theme={null}
  curl -H "Authorization: Bearer avat_live_your_api_key" \
    "https://api.vatly.dev/v1/validate?vat_number=NL123456789B01"
  ```

  ```bash After theme={null}
  curl -H "Authorization: Bearer avat_live_your_api_key" \
    "https://api.avatcado.com/v1/validate?vat_number=NL123456789B01"
  ```
</CodeGroup>

If your integration reads the base URL from an environment variable or config value (recommended), update that one value and redeploy. No other code change is needed.

## If you use an SDK

The legacy packages, `@vatly/node` on npm and `vatly` on PyPI, default to `api.vatly.dev` and no longer receive updates. They keep working for as long as the host does, so nothing breaks today.

When you are ready, switch to `@avatcado/node` or `avatcado`. They are the same client under the new name: same methods, same return shapes, and they default to `api.avatcado.com`. Your API key works unchanged.

| Legacy name | Current name |
| - | - |
| `Vatly` | `Avatcado` |
| `AsyncVatly` (Python) | `AsyncAvatcado` |
| `VatlyError` | `AvatcadoError` |
| `VatlyConfig` (Python) | `AvatcadoConfig` |

<CodeGroup>
  ```typescript Node.js before theme={null}
  // npm install @vatly/node
  import Vatly from "@vatly/node";

  const client = new Vatly("avat_live_your_api_key");
  const { data, error } = await client.vat.validate({ vatNumber: "NL123456789B01" });
  ```

  ```typescript Node.js after theme={null}
  // npm install @avatcado/node
  import Avatcado from "@avatcado/node";

  const client = new Avatcado("avat_live_your_api_key");
  const { data, error } = await client.vat.validate({ vatNumber: "NL123456789B01" });
  ```

  ```python Python before theme={null}
  # pip install vatly
  from vatly import Vatly

  client = Vatly("avat_live_your_api_key")
  result = client.vat.validate("NL123456789B01")
  ```

  ```python Python after theme={null}
  # pip install avatcado
  from avatcado import Avatcado

  client = Avatcado("avat_live_your_api_key")
  result = client.vat.validate("NL123456789B01")
  ```
</CodeGroup>

If you only want the new host without changing packages yet, both legacy packages accept a base URL override. Switching packages is the better fix, since only the new ones receive updates.

## How to tell you're still on the legacy host

Every response served from `api.vatly.dev` carries two extra headers, so automated tooling can detect the deprecation without reading this page:

```
Deprecation: @1782864000
Link: <https://docs.avatcado.com/migration>; rel="deprecation"
```

* **`Deprecation`** ([RFC 9745](https://www.rfc-editor.org/rfc/rfc9745)): a structured-field Date value. `@1782864000` is 1 July 2026 00:00:00 UTC, the date `api.vatly.dev` was formally marked deprecated
* **`Link`** with `rel="deprecation"`: points back to this page

<Note>
  There is no `Sunset` header ([RFC 8594](https://www.rfc-editor.org/rfc/rfc8594)) yet. `Sunset` announces a shutdown date, and none is scheduled. One will be added only if and when a real shutdown date exists.
</Note>

Requests to `api.avatcado.com` never carry these headers.

## Webhooks: legacy headers still sent too

If you verify webhook signatures using the `X-Vatly-*` headers, no action is required. Avatcado dual-emits both header sets with identical values on every webhook delivery:

| Canonical | Legacy (still sent) |
| - | - |
| `X-Avatcado-Signature` | `X-Vatly-Signature` |
| `X-Avatcado-Timestamp` | `X-Vatly-Timestamp` |
| `X-Avatcado-Event` | `X-Vatly-Event` |
| `X-Avatcado-Delivery-Id` | `X-Vatly-Delivery-Id` |

New integrations should verify against the `X-Avatcado-*` headers. See [Webhooks](/webhooks) for the full signature verification guide.

## At a glance

| | api.vatly.dev | api.avatcado.com |
| - | - | - |
| Operational | Yes | Yes |
| Shutdown date | None scheduled | N/A |
| `avat_` keys | Accepted | Accepted |
| `vtly_` keys | Accepted | Accepted |
| `Deprecation` / `Link` headers | Sent | Not sent |
| Webhook headers | `X-Avatcado-*` and `X-Vatly-*` | `X-Avatcado-*` and `X-Vatly-*` |
| SDK default host | `@vatly/node`, `vatly` (legacy, no updates) | `@avatcado/node`, `avatcado` (current) |

Questions? Contact [hello@avatcado.com](mailto:hello@avatcado.com).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.