Localities & Regions

Check if a customer's location is covered before they check out. Use the same region and comuna data you see in your panel to validate addresses.

How it works

Chile has 16 regions, each with multiple comunas. When syncing an order, you identify the destination comuna in the destination_locality field - the same locations shown in your panel dropdowns.

Region (e.g., "Metropolitana de Santiago")
  └── Locality (e.g., "Santiago")
  └── Locality (e.g., "Providencia")
  └── Locality (e.g., "Las Condes")
  ...

Regions

Regions are the top-level geographic divisions. Each region has:

FieldTypeDescription
idintegerUnique region identifier
namestringRegion name
slugstringURL-friendly identifier
localities_countintegerNumber of comunas in this region

Example Regions

NameSlug
Arica y Parinacotaarica-y-parinacota
Tarapacátarapaca
Antofagastaantofagasta
Atacamaatacama
Coquimbocoquimbo
Valparaísovalparaiso
Metropolitanametropolitana-de-santiago
O'Higginsohiggins
Maulemaule
Ñublenuble
Biobíobiobio
La Araucaníala-araucania
Los Ríoslos-rios
Los Lagoslos-lagos
Aysénaysen
Magallanesmagallanes

Comunas

Comunas (localities) are the delivery areas within each region. Each has:

FieldTypeDescription
idintegerUnique locality identifier
namestringLocality name
slugstringURL-friendly identifier
typestringurban, rural or both
region_idintegerThe region it belongs to
aliasesarrayAlternative spellings that are also matched when you send a name

Name or id — both work

destination_locality on POST /orders/create (and on POST /rates/quote) accepts either form:

  • The name (or an alias). Matching ignores case and accents, so "Nunoa" resolves to Ñuñoa. If nothing matches you get a 404 with Locality not found: ….
  • The numeric id, sent as a string: "2", not 2. Ids come from GET /localities or from a previous quote's locality_id. Prefer this once you have mapped your addresses — it can't be misread.

By name

{
  "destination_address": "Calle Principal 123",
  "destination_locality": "Providencia"
}

By id

{
  "destination_address": "Calle Principal 123",
  "destination_locality": "2"
}

Check coverage before you create

Your account delivers to a configured set of comunas. An order to a comuna outside that set is rejected with a 422 (Merchant … has no coverage for locality: …) - after the customer has already checked out, if you don't validate earlier.

Call POST /rates/quote with the destination and weight while the customer is still in your checkout. It runs the same locality resolution and coverage check as order creation and returns the price and transit time, so you can show the shipping cost and block uncovered addresses up front.

Was this page helpful?