Overview
Acuris is a commercial address validation, geocoding, reverse geocoding,
and autocomplete API at https://api.acuris-geo.com. This skill teaches
agents how to wire it correctly into TypeScript / JavaScript code using
the published SDK packages and how to migrate from other AV vendors.
Two npm packages cover the full integration surface:
| Package |
What it is |
@acuris-geo/av-sdk |
Platform-agnostic TypeScript SDK. Zero runtime dependencies. Works on Node 18+, modern browsers (server-only role), edge runtimes with fetch. |
@acuris-geo/centra-checkout |
React component library: <AcurisAddressInput> (typeahead), <AcurisAddressValidator> (headless), checkout-shaped hooks. |
Use the SDK directly for backend or non-React frontends. Use the
component package when you want a drop-in React UI; it calls your API
proxy routes, which call the SDK on the server.
When to use this skill
Use this skill when the user is:
- Building an address input UI (autocomplete in a form, checkout step,
sign-up flow).
- Validating an address on form submit before persisting it.
- Forward-geocoding addresses to lat/lng (shipping zones, distance,
service-area checks).
- Reverse-geocoding coordinates to the nearest known address.
- Cleaning a bulk address dataset for data-quality work.
- Migrating off another AV vendor (Informatica AddressDoctor / Loqate /
Experian QAS / Melissa / Smarty) — see the migration references.
Do NOT use this skill for:
- Routing, directions, isochrones, places search, or general POI lookup.
Acuris is address-only; those belong to Google Maps, Mapbox, or
Amazon Location.
- Rendering maps. The Acuris SDK returns lat/lng but doesn't ship a
map renderer — pair the coordinates with MapLibre / Leaflet / Google
Maps as the user prefers.
API at a glance
Four endpoints. All live on https://api.acuris-geo.com. Auth is a
single header — X-Acuris-Key: <ACURIS_API_KEY>.
| Operation |
SDK function |
HTTP |
| Validate |
validateAddress(client, input, opts) |
POST /validate |
| Forward geocode |
geocodeAddress(client, input, opts) |
GET /geocode (or string → /validate) |
| Reverse geocode |
reverseGeocode(client, {lat,lng}, opts) |
GET /reverse |
| Autocomplete |
suggestAddress(client, q, opts) |
GET /suggest |
Country must be ISO-3 alpha, lowercase ("usa", "deu", "gbr"). If
you have ISO-2, lowercase-it and map ("us" → "usa", "de" → "deu")
before calling.
Detailed request/response shapes, error hierarchy, and retry semantics
live in references/api-reference.md.
Quick start
# Pin to current published versions — the packages are pre-1.0
# and `^1.x` ranges will not resolve.
npm install @acuris-geo/av-sdk@^0.1.2
# (optional, for React storefronts — 0.1.2+ for visible dropdown defaults)
npm install @acuris-geo/centra-checkout@^0.1.2
import { AcurisClient, validateAddress } from "@acuris-geo/av-sdk";
const client = new AcurisClient({ apiKey: process.env.ACURIS_API_KEY });
const result = await validateAddress(client, {
country: "deu",
street: "Friedrichstraße",
house_number: "43",
city: "Berlin",
postcode: "10117",
});
result.accuracy_type; // "rooftop" | "parcel" | "street_interpolated" | ...
result.confidence; // 0..1
result.standardized?.formatted_address;
result.lat; result.lng;
If ACURIS_API_KEY is set in the environment, you can omit the apiKey
option entirely.
Defaults
When the user hasn't specified otherwise, prefer these:
API key in environment. Read from process.env.ACURIS_API_KEY.
Never inline a key, never expose it to the browser. For local
evaluation, obtain a free dev key in one call:
curl -X POST https://api.acuris-geo.com/dev-key \
-H 'Content-Type: application/json' \
-d '{"email":"you@example.com"}'
# → {"api_key":"<token>","validation_credits":100,
# "geocode_credits":100,"expires_at":"...","tier":"dev",...}
export ACURIS_API_KEY=<api_key>
The dev key is capped at 100 validations + 100 geocodes over 7 days
(rate-limited 1 issuance per email per day, 1 per IP per day). It
works on every endpoint — /validate, /geocode, /reverse,
/suggest. For more headroom, run the full 28-day trial at
https://api.acuris-geo.com/register (1000 validations + 1000
geocodes). For production, see https://acuris-geo.com/acuris-pricing/.
Server-side calls. The SDK is for Node / edge / server runtimes.
In a browser app, route through your own backend (Next.js API route,
Express handler, Cloudflare Worker — see
references/nextjs-proxy.md).
Component library for React UIs. Reach for
@acuris-geo/centra-checkout (<AcurisAddressInput> for typeahead,
<AcurisAddressValidator> for form-submit validation) instead of
hand-rolling a fetch loop.
Retries on transient failures. The SDK retries 5xx, 429, network
errors, and timeouts automatically (3 attempts, exponential backoff).
Don't add a retry layer on top.
One client per process. new AcurisClient(...) is cheap to create
but a long-lived instance keeps keep-alive sockets warm and avoids
re-reading env vars.
Common mistakes
These are the bugs we see most often in customer code or generated code.
Avoid them.
Sending the API key from the browser. The SDK works in any
fetch-enabled runtime, but apiKey is a server-side credential.
Browsers must go through a proxy route. The @acuris-geo/centra-checkout
components expect an endpoints object pointing at your own URLs,
not the Acuris API directly.
ISO-2 country codes. The API rejects "US" and "de". Use ISO-3
lowercase: "usa", "deu", "gbr", "fra", "fin". If you only
have ISO-2, map it at the boundary.
Authorization: Bearer … instead of the X-Acuris-Key header.
The SDK sets the right header automatically; if you're hand-rolling
HTTP for any reason, the header name matters.
Treating accuracy_type as a closed enum. New tiers are added
over time (street_interpolated, street_center, locality_centroid,
…). Always handle the documented values explicitly and pass through
unknown values as opaque rather than throwing.
Catching every error the same way. The SDK throws typed
subclasses (AcurisAuthError, AcurisRateLimitError,
AcurisValidationError, AcurisNotFoundError, AcurisServerError,
AcurisTimeoutError, AcurisNetworkError). 4xx is your code's bug;
5xx and rate limits are runtime; auth errors mean the deploy is
misconfigured. They deserve different handling.
Forgetting country on /suggest and /reverse. Unlike
/validate, these endpoints require an explicit country option
(they have no input from which to infer one).
Hand-parsing the freeform string on the way out. The SDK returns
a standardized object with formatted_address. Display that, don't
reassemble from individual fields — locale-specific ordering is
baked in.
Persisting Acuris's raw response without snapshotting the request
inputs. If you store result.standardized, also store what the user
typed. Otherwise you can't tell later whether a confidence drop is
the user's fault or Acuris's.
Building a "structured-fields form" when the user asked for
autocomplete. Autocomplete is one input + dropdown + pick — the
suggestion already carries the parsed fields, so you don't render
them as separate boxes. If the user asked for "autocomplete," ship
just the <AcurisAddressInput> and a status line; the street /
house-number / postcode / city sub-fields belong in the
validate-on-submit recipe, not the autocomplete one. See
references/autocomplete.md — the
"What autocomplete is and is not" section at the top covers this.
Omitting the United Kingdom (gbr) from country pickers.
Earlier versions of this skill said Acuris lacked a Royal Mail PAF
(Postcode Address File) licence and told you to leave UK out
everywhere. That is outdated: UK coverage is now PAF-backed and a
flagship dataset — /validate and /suggest fully support gbr
(street-based autocomplete; standardized carries udprn, uprn
and traditional county), and POST /postcode-lookup returns every
delivery point at a UK postcode. Include gbr in demos and country
pickers. PAF usage terms apply:
https://api.acuris-geo.com/legal/paf-terms.
Listing a country in an autocomplete picker that doesn't have
/suggest wired. This is the most common source of an
embarrassing demo. /suggest (autocomplete) and /validate /
/geocode / /reverse cover different country sets. Validation
and geocoding work against 200+ ISO-3 codes; autocomplete requires
per-country NORM columns + indexes (a separate engineering step)
and currently runs for only 7 countries:
// The ONLY countries with /suggest wired:
const AUTOCOMPLETE_COUNTRIES = [
{ code: "usa", label: "United States" },
{ code: "gbr", label: "United Kingdom" }, // Royal Mail PAF (street-based)
{ code: "deu", label: "Germany" },
{ code: "nld", label: "Netherlands" },
{ code: "fin", label: "Finland" },
{ code: "swe", label: "Sweden" },
{ code: "jpn", label: "Japan" },
];
Listing fra, esp, ita, etc. in an autocomplete picker is
actively worse than omitting them — the user types and nothing
happens, which reads as "the product is broken." /suggest returns
[] silently for those countries.
The broader country picker for validation / geocoding / reverse
geocoding demos is fine to include them:
// Safe for /validate, /geocode, /reverse (NOT for /suggest):
const VALIDATION_COUNTRIES = [
// Autocomplete-enabled subset:
{ code: "usa", label: "United States" },
{ code: "gbr", label: "United Kingdom" },
{ code: "deu", label: "Germany" },
{ code: "nld", label: "Netherlands" },
{ code: "fin", label: "Finland" },
{ code: "swe", label: "Sweden" },
{ code: "jpn", label: "Japan" },
// Validation/geocoding-only (NOT autocomplete):
{ code: "fra", label: "France" },
{ code: "esp", label: "Spain" },
{ code: "ita", label: "Italy" },
{ code: "nor", label: "Norway" },
{ code: "dnk", label: "Denmark" },
{ code: "aut", label: "Austria" },
{ code: "che", label: "Switzerland" },
{ code: "bel", label: "Belgium" },
{ code: "prt", label: "Portugal" },
{ code: "aus", label: "Australia" },
{ code: "nzl", label: "New Zealand" },
{ code: "sgp", label: "Singapore" },
{ code: "bra", label: "Brazil" },
{ code: "mex", label: "Mexico" },
{ code: "can", label: "Canada" },
];
Rules of thumb:
- If the UI uses
<AcurisAddressInput> (typeahead): use
AUTOCOMPLETE_COUNTRIES (the 7).
- If the UI uses
<AcurisAddressValidator> or any structured form
that hits /validate / /geocode / /reverse: either list is
fine.
- Mixed (autocomplete + validation in the same form, same country
picker): use
AUTOCOMPLETE_COUNTRIES. The validation set is a
superset; user can still validate any of those 7.
The autocomplete-enabled set grows as new countries get NORM
columns. If this list looks stale, ask before extending it.
Implementation patterns
The implementation recipes are in references/. Load whichever ones
match the task:
Migrations
Acuris's commercial wedge — these are the recipes for porting code off
incumbent vendors. Each recipe maps the legacy API to the Acuris
equivalent with a runnable example.
Migrations are written against vendor documentation, not against the
user's actual integration. Treat them as a starting scaffold — review
the mapping for your specific configuration before shipping.
Pricing and limits
The live API is paid per request. The test key test lets developers
exercise endpoints during evaluation without burning credits. Pricing
is published at https://acuris-geo.com/acuris-pricing/. The SDK
respects the server's rate limits (HTTP 429 with retry_after); the
default retry policy backs off and retries up to 3 times before
re-throwing AcurisRateLimitError.
Additional resources
1---2name: acuris-address3description: Acuris Address Validation & Geocoding APIs. Use when the user is building address autocomplete in a checkout or sign-up form, validating addresses on submit, forward geocoding to lat/lng for shipping or distance calculations, reverse geocoding from coordinates, batch-cleaning address data, integrating address validation into a React, Next.js, Node, or Centra storefront, or migrating from libAddressDoctor (Informatica), Loqate, Experian QAS, Melissa, or Smarty to Acuris.4license: MIT5---67## Overview89Acuris is a commercial address validation, geocoding, reverse geocoding,10and autocomplete API at `https://api.acuris-geo.com`. This skill teaches11agents how to wire it correctly into TypeScript / JavaScript code using12the published SDK packages and how to migrate from other AV vendors.1314Two npm packages cover the full integration surface:1516| Package | What it is |17| ---------------------------- | ----------------------------------------------------------- |18| `@acuris-geo/av-sdk` | Platform-agnostic TypeScript SDK. Zero runtime dependencies. Works on Node 18+, modern browsers (server-only role), edge runtimes with `fetch`. |19| `@acuris-geo/centra-checkout` | React component library: `<AcurisAddressInput>` (typeahead), `<AcurisAddressValidator>` (headless), checkout-shaped hooks. |2021Use the SDK directly for backend or non-React frontends. Use the22component package when you want a drop-in React UI; it calls *your* API23proxy routes, which call the SDK on the server.2425## When to use this skill2627Use this skill when the user is:2829- Building an address input UI (autocomplete in a form, checkout step,30 sign-up flow).31- Validating an address on form submit before persisting it.32- Forward-geocoding addresses to lat/lng (shipping zones, distance,33 service-area checks).34- Reverse-geocoding coordinates to the nearest known address.35- Cleaning a bulk address dataset for data-quality work.36- Migrating off another AV vendor (Informatica AddressDoctor / Loqate /37 Experian QAS / Melissa / Smarty) — see the migration references.3839**Do NOT** use this skill for:4041- Routing, directions, isochrones, places search, or general POI lookup.42 Acuris is address-only; those belong to Google Maps, Mapbox, or43 Amazon Location.44- Rendering maps. The Acuris SDK returns lat/lng but doesn't ship a45 map renderer — pair the coordinates with MapLibre / Leaflet / Google46 Maps as the user prefers.4748## API at a glance4950Four endpoints. All live on `https://api.acuris-geo.com`. Auth is a51single header — `X-Acuris-Key: <ACURIS_API_KEY>`.5253| Operation | SDK function | HTTP |54| ----------------- | ----------------------------------------- | ------------------------------------- |55| Validate | `validateAddress(client, input, opts)` | `POST /validate` |56| Forward geocode | `geocodeAddress(client, input, opts)` | `GET /geocode` (or string → `/validate`) |57| Reverse geocode | `reverseGeocode(client, {lat,lng}, opts)` | `GET /reverse` |58| Autocomplete | `suggestAddress(client, q, opts)` | `GET /suggest` |5960Country must be ISO-3 alpha, lowercase (`"usa"`, `"deu"`, `"gbr"`). If61you have ISO-2, lowercase-it and map (`"us"` → `"usa"`, `"de"` → `"deu"`)62before calling.6364Detailed request/response shapes, error hierarchy, and retry semantics65live in [`references/api-reference.md`](./references/api-reference.md).6667## Quick start6869```bash70# Pin to current published versions — the packages are pre-1.071# and `^1.x` ranges will not resolve.72npm install @acuris-geo/av-sdk@^0.1.273# (optional, for React storefronts — 0.1.2+ for visible dropdown defaults)74npm install @acuris-geo/centra-checkout@^0.1.275```7677```ts78import { AcurisClient, validateAddress } from "@acuris-geo/av-sdk";7980const client = new AcurisClient({ apiKey: process.env.ACURIS_API_KEY });8182const result = await validateAddress(client, {83 country: "deu",84 street: "Friedrichstraße",85 house_number: "43",86 city: "Berlin",87 postcode: "10117",88});8990result.accuracy_type; // "rooftop" | "parcel" | "street_interpolated" | ...91result.confidence; // 0..192result.standardized?.formatted_address;93result.lat; result.lng;94```9596If `ACURIS_API_KEY` is set in the environment, you can omit the `apiKey`97option entirely.9899## Defaults100101When the user hasn't specified otherwise, prefer these:102103- **API key in environment.** Read from `process.env.ACURIS_API_KEY`.104 Never inline a key, never expose it to the browser. For local105 evaluation, obtain a free dev key in one call:106107 ```bash108 curl -X POST https://api.acuris-geo.com/dev-key \109 -H 'Content-Type: application/json' \110 -d '{"email":"you@example.com"}'111 # → {"api_key":"<token>","validation_credits":100,112 # "geocode_credits":100,"expires_at":"...","tier":"dev",...}113 export ACURIS_API_KEY=<api_key>114 ```115116 The dev key is capped at 100 validations + 100 geocodes over 7 days117 (rate-limited 1 issuance per email per day, 1 per IP per day). It118 works on every endpoint — `/validate`, `/geocode`, `/reverse`,119 `/suggest`. For more headroom, run the full 28-day trial at120 `https://api.acuris-geo.com/register` (1000 validations + 1000121 geocodes). For production, see `https://acuris-geo.com/acuris-pricing/`.122- **Server-side calls.** The SDK is for Node / edge / server runtimes.123 In a browser app, route through your own backend (Next.js API route,124 Express handler, Cloudflare Worker — see125 [`references/nextjs-proxy.md`](./references/nextjs-proxy.md)).126- **Component library for React UIs.** Reach for127 `@acuris-geo/centra-checkout` (`<AcurisAddressInput>` for typeahead,128 `<AcurisAddressValidator>` for form-submit validation) instead of129 hand-rolling a fetch loop.130- **Retries on transient failures.** The SDK retries 5xx, 429, network131 errors, and timeouts automatically (3 attempts, exponential backoff).132 Don't add a retry layer on top.133- **One client per process.** `new AcurisClient(...)` is cheap to create134 but a long-lived instance keeps keep-alive sockets warm and avoids135 re-reading env vars.136137## Common mistakes138139These are the bugs we see most often in customer code or generated code.140Avoid them.1411421. **Sending the API key from the browser.** The SDK works in any143 `fetch`-enabled runtime, but `apiKey` is a server-side credential.144 Browsers must go through a proxy route. The `@acuris-geo/centra-checkout`145 components expect an `endpoints` object pointing at your own URLs,146 not the Acuris API directly.1471482. **ISO-2 country codes.** The API rejects `"US"` and `"de"`. Use ISO-3149 lowercase: `"usa"`, `"deu"`, `"gbr"`, `"fra"`, `"fin"`. If you only150 have ISO-2, map it at the boundary.1511523. **`Authorization: Bearer …`** instead of the `X-Acuris-Key` header.153 The SDK sets the right header automatically; if you're hand-rolling154 HTTP for any reason, the header name matters.1551564. **Treating `accuracy_type` as a closed enum.** New tiers are added157 over time (`street_interpolated`, `street_center`, `locality_centroid`,158 …). Always handle the documented values explicitly and pass through159 unknown values as opaque rather than throwing.1601615. **Catching every error the same way.** The SDK throws typed162 subclasses (`AcurisAuthError`, `AcurisRateLimitError`,163 `AcurisValidationError`, `AcurisNotFoundError`, `AcurisServerError`,164 `AcurisTimeoutError`, `AcurisNetworkError`). 4xx is your code's bug;165 5xx and rate limits are runtime; auth errors mean the deploy is166 misconfigured. They deserve different handling.1671686. **Forgetting `country` on `/suggest` and `/reverse`.** Unlike169 `/validate`, these endpoints require an explicit country option170 (they have no input from which to infer one).1711727. **Hand-parsing the freeform string on the way out.** The SDK returns173 a `standardized` object with `formatted_address`. Display that, don't174 reassemble from individual fields — locale-specific ordering is175 baked in.1761778. **Persisting Acuris's raw response without snapshotting the request178 inputs.** If you store `result.standardized`, also store what the user179 typed. Otherwise you can't tell later whether a confidence drop is180 the user's fault or Acuris's.1811829. **Building a "structured-fields form" when the user asked for183 autocomplete.** Autocomplete is one input + dropdown + pick — the184 suggestion already carries the parsed fields, so you don't render185 them as separate boxes. If the user asked for "autocomplete," ship186 just the `<AcurisAddressInput>` and a status line; the street /187 house-number / postcode / city sub-fields belong in the188 validate-on-submit recipe, not the autocomplete one. See189 [`references/autocomplete.md`](./references/autocomplete.md) — the190 "What autocomplete is and is not" section at the top covers this.19119210. **Omitting the United Kingdom (`gbr`) from country pickers.**193 Earlier versions of this skill said Acuris lacked a Royal Mail PAF194 (Postcode Address File) licence and told you to leave UK out195 everywhere. That is outdated: UK coverage is now PAF-backed and a196 flagship dataset — `/validate` and `/suggest` fully support `gbr`197 (street-based autocomplete; `standardized` carries `udprn`, `uprn`198 and traditional `county`), and `POST /postcode-lookup` returns every199 delivery point at a UK postcode. Include `gbr` in demos and country200 pickers. PAF usage terms apply:201 https://api.acuris-geo.com/legal/paf-terms.20220311. **Listing a country in an autocomplete picker that doesn't have204 `/suggest` wired.** This is the most common source of an205 embarrassing demo. **`/suggest` (autocomplete) and `/validate` /206 `/geocode` / `/reverse` cover different country sets.** Validation207 and geocoding work against 200+ ISO-3 codes; autocomplete requires208 per-country NORM columns + indexes (a separate engineering step)209 and currently runs for only 7 countries:210211 ```ts212 // The ONLY countries with /suggest wired:213 const AUTOCOMPLETE_COUNTRIES = [214 { code: "usa", label: "United States" },215 { code: "gbr", label: "United Kingdom" }, // Royal Mail PAF (street-based)216 { code: "deu", label: "Germany" },217 { code: "nld", label: "Netherlands" },218 { code: "fin", label: "Finland" },219 { code: "swe", label: "Sweden" },220 { code: "jpn", label: "Japan" },221 ];222 ```223224 Listing `fra`, `esp`, `ita`, etc. in an **autocomplete** picker is225 actively worse than omitting them — the user types and nothing226 happens, which reads as "the product is broken." `/suggest` returns227 `[]` silently for those countries.228229 The broader country picker for **validation / geocoding / reverse230 geocoding** demos is fine to include them:231232 ```ts233 // Safe for /validate, /geocode, /reverse (NOT for /suggest):234 const VALIDATION_COUNTRIES = [235 // Autocomplete-enabled subset:236 { code: "usa", label: "United States" },237 { code: "gbr", label: "United Kingdom" },238 { code: "deu", label: "Germany" },239 { code: "nld", label: "Netherlands" },240 { code: "fin", label: "Finland" },241 { code: "swe", label: "Sweden" },242 { code: "jpn", label: "Japan" },243 // Validation/geocoding-only (NOT autocomplete):244 { code: "fra", label: "France" },245 { code: "esp", label: "Spain" },246 { code: "ita", label: "Italy" },247 { code: "nor", label: "Norway" },248 { code: "dnk", label: "Denmark" },249 { code: "aut", label: "Austria" },250 { code: "che", label: "Switzerland" },251 { code: "bel", label: "Belgium" },252 { code: "prt", label: "Portugal" },253 { code: "aus", label: "Australia" },254 { code: "nzl", label: "New Zealand" },255 { code: "sgp", label: "Singapore" },256 { code: "bra", label: "Brazil" },257 { code: "mex", label: "Mexico" },258 { code: "can", label: "Canada" },259 ];260 ```261262 **Rules of thumb:**263 - If the UI uses `<AcurisAddressInput>` (typeahead): use264 `AUTOCOMPLETE_COUNTRIES` (the 7).265 - If the UI uses `<AcurisAddressValidator>` or any structured form266 that hits `/validate` / `/geocode` / `/reverse`: either list is267 fine.268 - Mixed (autocomplete + validation in the same form, same country269 picker): use `AUTOCOMPLETE_COUNTRIES`. The validation set is a270 superset; user can still validate any of those 7.271272 The autocomplete-enabled set grows as new countries get NORM273 columns. If this list looks stale, ask before extending it.274275## Implementation patterns276277The implementation recipes are in `references/`. Load whichever ones278match the task:279280- [Address autocomplete in a checkout form (React)](./references/autocomplete.md)281- [Validate on form submit](./references/validate-on-submit.md)282- [Forward geocoding for shipping / distance](./references/geocode.md)283- [Reverse geocoding from coordinates](./references/reverse-geocode.md)284- [Batch validation for data-quality cleanup](./references/batch-validation.md)285- [Next.js API proxy routes](./references/nextjs-proxy.md)286- [Plain Node server usage](./references/node-server.md)287- [Centra storefront integration](./references/centra-storefront.md)288289## Migrations290291Acuris's commercial wedge — these are the recipes for porting code off292incumbent vendors. Each recipe maps the legacy API to the Acuris293equivalent with a runnable example.294295- [Informatica AddressDoctor (libAddressDoctor)](./references/migrate-informatica.md)296- [Loqate Capture / Verify](./references/migrate-loqate.md)297- [Experian QAS Pro / Pro Web](./references/migrate-experian-qas.md)298- [Melissa Personator / Address Verify](./references/migrate-melissa.md)299- [Smarty (US Street API, US Autocomplete API, International)](./references/migrate-smarty.md)300301> Migrations are written against vendor documentation, not against the302> user's actual integration. Treat them as a starting scaffold — review303> the mapping for your specific configuration before shipping.304305## Pricing and limits306307The live API is paid per request. The test key `test` lets developers308exercise endpoints during evaluation without burning credits. Pricing309is published at <https://acuris-geo.com/acuris-pricing/>. The SDK310respects the server's rate limits (HTTP 429 with `retry_after`); the311default retry policy backs off and retries up to 3 times before312re-throwing `AcurisRateLimitError`.313314## Additional resources315316- SDK source: <https://github.com/Acuris-GmbH/acuris-centra-connector/tree/main/packages/acuris-av-sdk>317- React components: <https://github.com/Acuris-GmbH/acuris-centra-connector/tree/main/packages/acuris-centra-checkout>318- Pricing & free tier: <https://acuris-geo.com/acuris-pricing/>319- Live status / changelog: <https://acuris-geo.com/>