1) Get your API key 2) Subscribe on Oracle Cloud Marketplace 3) Deploy in your tenancy
```
This allows it to act as a creation form for the standard Contact object. This in turn means that you can set values against the
Contact records properties within the page. For the first and last name fields, this is achieved by binding the field to the
FirstName and LastName fields of the controller:
```apex theme={null}
```
However, for the address lookups controls this is a little more involved. You can’t map directly from JS to the values, so instead
you expose the properties you want to set via a selection of hidden inputs:
```apex theme={null}
```
You can then declare a callback function for each of the address lookups on the page. These fill take the address output of the lookup,
and push it into the record fields defined above:
```apex theme={null}
```
Finally, you can add a command button that will call the Save function on the standard controller:
```apex theme={null}
```
The response to this button press off a standard controller is to redirect to the record, so that flow is taken care of.
### Using the page in place of the standard New view
With a Visualforce page in place that uses the Address Capture components, you now need to override the default behaviour of the
New button on the contact listing page.
This is achieved through the Object Manager, so navigate to Setup and search for Object Manager. Once there, select **Contact** from the list.
Next select **Button, Links and Actions** from the left-hand menu, then edit the **New** action – you should be able to select the new
page from the **Visualforce** page dropdown field:
Click **Save**, and from now on the New action on the contact listing page will open your new page, and you can create contacts with
verified addresses.
# Custom Field Mappings
Source: https://docs.loqate.com/integrations/shopify-custom-field-mappings
Configure how Loqate address data maps to Shopify checkout fields, with support for templates, conditional logic, and country-specific overrides.
Custom field mappings give you full control over how address data from Loqate is mapped into Shopify's checkout fields.
By default, the Loqate app uses built-in logic to populate fields such as Address Line 1, Address Line 2, City, and so on.
Custom field mappings allow you to override this behaviour when the default mapping doesn't suit your needs.
Custom field mappings are optional. If you don't configure any, the app continues to use its built-in mapping logic.
You only need this feature if you want to change how address components are assigned to Shopify fields.
## When to use custom field mappings
Common scenarios where custom field mappings are useful:
* **Combining address components** — for example, merging a building name and street into a single Address Line 1 field
* **Country-specific formatting** — some countries have address structures that don't map neatly to Shopify's standard fields
* **Conditional logic** — including or excluding address components based on whether they have values, to avoid empty separators or trailing commas
* **Field transforms** — converting field values to uppercase or truncating long values
## Accessing custom field mappings
1. Open the Loqate app in your Shopify Admin
2. Go to the **Advanced Settings** page
3. Click the **Custom Field Mappings** link
This opens the field mappings editor, where you can configure default mappings and country-specific overrides.
***
## How it works
The field mappings editor has two main sections:
### Default mapping
The default mapping applies to all countries unless overridden by a country-specific mapping. For each Shopify target
field, you choose how to populate it — either by selecting a single source field from a dropdown, or by writing a custom
template for more complex formatting.
You can configure separate mappings for **Capture** (type-ahead address lookup) and **Verify** (post-checkout address
verification), because these two services return different sets of address fields.
### Country overrides
Country overrides let you define mappings that apply only to addresses in a specific country. When a country override
exists, it is used instead of the default mapping for that country. This is useful when certain countries have unique
address formats that require different field assignments.
To add a country override, select the country from the dropdown and click **Add**. You can then configure Capture
and Verify mappings for that country independently.
***
## Shopify target fields
These are the Shopify checkout fields you can map to:
| Field | Description |
| -------------- | --------------------------- |
| `address1` | Address Line 1 |
| `address2` | Address Line 2 |
| `company` | Company name |
| `city` | City / Town |
| `zip` | Postal / ZIP code |
| `countryCode` | Country code (ISO 2-letter) |
| `provinceCode` | Province / State code |
***
## Simple field mapping
For straightforward one-to-one mappings, select the source field from the **Source Field** dropdown. This maps a single
Loqate field directly to the Shopify target field. For example, mapping `line1` to `address1` will populate Shopify's
Address Line 1 with the value of the Loqate `line1` field.
***
## Custom templates
For more complex mappings, select **Custom template** from the Source Field dropdown to enter a template string.
Templates use a Handlebars-style syntax that lets you combine fields, add conditional logic, and apply transforms.
### Basic syntax
Insert a field value using double curly braces:
```
{{line1}}
```
Combine multiple fields with literal text between them:
```
{{buildingName}}, {{street}}
```
### Conditional blocks
Use `{{#if}}` to include content only when a field has a value. This prevents empty separators or trailing commas
when optional fields are absent:
```
{{line1}}{{#if line3}}, {{line3}}{{/if}}
```
In this example, if `line3` has a value the output is `123 Main St, Apt 4B`. If `line3` is empty, the output is
simply `123 Main St` — without the trailing comma.
You can also use `{{else}}` for fallback content:
```
{{#if buildingName}}{{buildingName}}{{else}}{{line1}}{{/if}}
```
### Transforms
Apply transforms using the pipe (`|`) character:
| Transform | Description | Example |
| ------------- | ------------------------ | ------------------------------------ |
| `upper` | Convert to uppercase | `{{city \| upper}}` |
| `lower` | Convert to lowercase | `{{city \| lower}}` |
| `truncate N` | Truncate to N characters | `{{line1 \| truncate 30}}` |
| `replace A B` | Replace A with B | `{{line1 \| replace "St" "Street"}}` |
***
## Source fields
The available source fields differ depending on whether you are configuring a **Capture** or **Verify** mapping,
because the two services return different address data structures.
Capture source fields come from the Loqate Address Capture (Retrieve) API response.
**Address lines:** `line1`, `line2`, `line3`, `line4`, `line5`
**Organisation:** `company`, `department`
**Building / premise:** `subBuilding`, `buildingName`, `buildingNumber`
**Street:** `street`, `secondaryStreet`, `block`, `neighbourhood`
**Geographic hierarchy:** `district`, `city`, `adminAreaName`, `adminAreaCode`, `province`, `provinceName`, `provinceCode`
**Postal:** `postalCode`, `pOBoxNumber`
**Country:** `countryName`, `countryIso2`, `countryIso3`
**Other:** `domesticId`, `language`, `languageAlternatives`, `sortingNumber1`, `sortingNumber2`, `barcode`,
`field1` through `field20`
Verify source fields come from the Loqate Address Verify API response.
**Delivery address lines:** `deliveryAddress`, `deliveryAddress1` through `deliveryAddress8`
**Address lines:** `address`, `address1` through `address8`
**Organisation:** `organization`, `organizationName`, `organizationType`
**Geographic hierarchy:** `superAdministrativeArea`, `administrativeArea`, `administrativeAreaIso2`,
`administrativeAreaName`, `administrativeAreaType`, `subAdministrativeArea`, `locality`, `localityName`,
`localityType`, `dependentLocality`, `dependentLocalityName`, `doubleDependentLocality`
**Thoroughfare:** `thoroughfare`, `thoroughfareName`, `thoroughfareType`, `thoroughfarePreDirection`,
`thoroughfarePostDirection`, `dependentThoroughfare`, `dependentThoroughfareName`
**Building / premise:** `building`, `buildingName`, `buildingType`, `premise`, `premiseNumber`, `premiseType`,
`premiseExtra`, `subBuilding`, `subBuildingName`, `subBuildingNumber`, `subBuildingType`, `subBuildingFloor`
**Postal:** `postalCode`, `postalCodePrimary`, `postalCodeSecondary`, `postBox`, `postBoxNumber`, `postBoxType`
**Country:** `country`, `countryName`, `iSO3166-2`, `iso3166_3`, `iso3166_n`
**Other:** `sequence`, `contact`, `department`, `floorNumber`, `floorType`, `lotNumber`, `route`, `routeNumber`, `routeType`
***
## Examples
### Combine building name and street into Address Line 1
**Capture mapping for `address1`:**
```
{{buildingName}}{{#if street}}, {{street}}{{/if}}
```
**Result:** `Chester Business Park, Wrexham Road` or just `Wrexham Road` if there is no building name.
### Country-specific formatting for Japan
Create a country override for **JP** and set the Verify mapping for `address1`:
```
{{thoroughfare}} {{subBuilding}}
```
### Uppercase city names
**Capture mapping for `city`:**
```
{{city | upper}}
```
**Result:** `LONDON` instead of `London`
### Fallback when a field might be empty
**Capture mapping for `address2`:**
```
{{#if line2}}{{line2}}{{else}}{{#if line3}}{{line3}}{{/if}}{{/if}}
```
Uses `line2` if available, otherwise falls back to `line3`.
***
## Validation
The app validates your templates when you save. Common validation errors include:
* **Invalid field names** — only recognised source fields (listed above) can be referenced in templates
* **Malformed template syntax** — unclosed `{{#if}}` blocks or mismatched braces
* **Template too long** — templates have a maximum length to prevent unexpected behaviour
If validation fails, you'll see an error message describing the issue. Fix the template and save again.
***
## Tips
* Start simple. Use one-to-one field mappings where possible and only use custom templates when you need conditional
logic or field combination.
* Test with real addresses. After saving your mappings, run through the checkout with addresses from the countries
you've configured to verify the output looks correct.
* Country overrides take precedence. If both a default mapping and a country override exist for a given country,
the country override is used and the default is ignored entirely for that country.
* Capture and Verify are independent. You can configure custom mappings for Capture only, Verify only, or both.
Whichever service doesn't have a custom mapping will continue using the built-in logic.
***
Return to the Shopify Plus Integration Guide for full setup instructions.
# Verify Shopify Customer Data in Seconds
Source: https://docs.loqate.com/integrations/shopify-overview
Native Shopify Plus integration with Address Capture, Address Verify, and Email Validation. Improve checkout data quality.
Works with:
Shopify Plus Checkout
Supported Loqate Services:
- Address Capture
- Address Verify
- Email Verification
Integrate in 3 steps
## About this app
Add enterprise-grade address validation to your Shopify checkout with type-ahead address lookup, post-checkout verification, and email validation. Built on Shopify's Checkout Extensibility framework, the Loqate integration reduces delivery failures and improves data quality without requiring technical knowledge.
## Completely Modular Validation Suite
### Type-Ahead Address Lookup
Active by default once configured, Address Capture adds intelligent type-ahead functionality to both delivery and billing address fields. Customers start typing their address and select from a list of verified suggestions, dramatically reducing input time and errors.
**Key Features:**
* Works in both delivery and billing address sections
* Respects your Shopify shipping country settings
* Reduces checkout time by up to 60%
* Supports 245+ countries and territories
The countries in your **Country/Region** dropdown are controlled by your Shopify store's shipping settings. Only countries you ship to will appear in the list.
[Learn more about Address Capture](/our-services/address-capture/overview)
### Post-Checkout Address Verification
Address Verify adds an intelligent verification layer on the Thank You page, checking delivery addresses through correction, standardization, and enhancement processes. If improvements are found, customers can approve or decline the suggested changes.
**Key Features:**
* Runs post-checkout on the Thank You page
* Compatible with wallets (Apple Pay, Google Pay)
* Works with logged-in customer addresses
* Updates delivery address in your Shopify orders automatically
* Three possible outcomes: verified, alternative found, or not validated
[Learn more about Address Verify](/our-services/address-verify/overview)
### Real-Time Email Address Verification
Email Validation ensures customers enter valid email addresses before completing checkout. Invalid addresses trigger an inline notification, preventing customers from proceeding until a valid email is provided. Valid entries pass through seamlessly without interruption.
**Key Features:**
* Real-time validation as customers type
* Inline error messaging for invalid addresses
* No visual impact for valid addresses
* Reduces bounce rates and improves deliverability
* Catches common typos and formatting errors
Invalid email addresses may include non-existent domains, syntax errors, disposable addresses, or known invalid patterns. See the [Email Validation API documentation](/api-reference/email-validation/individual) to learn more about the service.
See how the Loqate Shopify Plus Integration looks in practice
Check out the Loqate Shopify Plus Integration Guide
## Integrate in 3 steps
1) Get your API key 2) Install Shopify App 3) Configure Services
Get API Key and then Install Shopify App
Install the Loqate Shopify app and start validating addresses in minutes.
## Additional Resources
[Video Tutorial](/integrations/shopify-plus-overview#setup-video)
## Pricing
Flexible plans starting with a 45-day free trial. Choose the plan that fits your business needs.
## Frequently Asked Questions
Installation takes less than 5 minutes through the Shopify App Store. You don't need any technical knowledge—just install the app, add your API key, and configure which services to enable. Address Capture activates automatically on both delivery and billing address fields.
Yes, all three services (Address Capture, Address Verify, and Email Validation) can be enabled or disabled independently. Address Capture is enabled by default, but you have complete control over which services to use based on your business needs.
Yes. Address Verify runs post-checkout on the Thank You page, making it fully compatible with wallet payments (Apple Pay, Google Pay) and addresses from logged-in customer accounts. This is why we recommend the post-checkout approach rather than checkout page verification.
Yes, we support 245+ countries and territories worldwide. The app automatically respects your Shopify store's shipping country settings, so only the countries you ship to will appear in the country dropdown. Address suggestions and validation adapt to each country's specific address format. [Custom field mappings](/integrations/shopify-custom-field-mappings) can be used to overwrite the defaults.
If an address is too low quality to validate, customers see a notification that "Your shipping address could not be validated," but their order still processes normally. This ensures you never lose a sale due to validation issues while still improving overall address quality.
No. Our validation APIs are optimized for speed with sub-100ms response times. Address Capture actually speeds up checkout by reducing typing, and Address Verify runs post-checkout so it never interrupts the purchase flow. The app typically improves completion rates by reducing form errors.
Still have questions or need support? Send us an email
## Shopify App Details
Developer
GB GROUP PLC
Website
128 Queen Victoria Street, London, ENG, EC4V 4BJ, GB
Data access
This app needs access to the following data to work on your store. Learn why in the developer's privacy policy.
View personal data:
Customers, store owner
View and edit store data:
Orders, Online Store
See details
# Shopify Plus Integration Guide
Source: https://docs.loqate.com/integrations/shopify-plus-overview
Install Loqate in Shopify Plus checkout in minutes. Enable Address Capture, Address Verify, and Email Validation with simple configuration steps.
In this guide we will provide all of the information you need to get up and running using the Loqate Shopify Plus Integration.
If you're looking for the full details of what the Loqate Shopify Plus Integration does and what it looks like in practice,
you can find that here:
## Setup Video
***
## Prerequisites
Before you start installing and setting up the Loqate Shopify Plus Integration, you will need the following:
* A live Shopify Plus account
* A live Loqate account (available at [account.loqate.com](https://account.loqate.com/))
* A new Loqate API key (see the API keys section below for more information on this)
### API keys
You'll need a new Loqate API key, dedicated to this service. Our [Creating API Keys page](/loqate-basics/create-an-api-key)
explains how to do this. We recommend you create a generic API key, but any key will work.
**Note** You use Address Capture, Address Verify and Email Validation from a single API key.
For information about how to ensure your Loqate integration is as secure as possible, see our
[API Security page](/loqate-basics/api-security).
***
## Installation
There are a few quick steps to get the Loqate Shopify Plus Integration up and running:
* [Install and configure the Loqate app](#installing-and-configuring-the-loqate-app)
* [Enable Address Capture, Address Verify and Email Validation](#enabling-loqate-services)
* [Recommended - include company name](#recommended-include-company-name)
As well as those key actions, there are also some additional steps that you can follow if required:
* [Use without Address Capture (not recommended)](#optional-use-without-address-capture-not-recommended)
* [Advanced Settings (optional)](#optional-advanced-settings)
Follow these steps in order, and you'll get up and running quickly and easily. If you need help you can
contact [LoqateSupport@GBG.com](mailto:LoqateSupport@GBG.com).
### Installing and configuring the Loqate app
First, install [the Loqate app](https://apps.shopify.com/loqate) from the Shopify App Store
(see the [Shopify app installation instructions](https://help.shopify.com/en/manual/apps/installing-apps) for more details).
Once that is done:
* You should automatically be taken to the Admin section for your new Loqate app
* If not, go to [accounts.shopify.com](https://accounts.shopify.com/), select the **Your store** option, then select the
**Loqate** app on the left-hand side of the screen to open it
* Copy and paste your Loqate API key into the API Key field on this screen, then click the **Save** button:
With that done, you can add one or more of the Loqate services to your store using the steps below.
### Enabling Loqate services
With the app installed, the Standard Address Capture is automatically available. We however
recommend adding the Custom Capture Search Input as it offers an improved experience when
searching sub-building addresses.
First, you need to add the **Loqate-Checkout** app block to your store on the Checkout page.
(see [https://www.shopify.com/enterprise/blog/customize-shopify-checkout](https://www.shopify.com/enterprise/blog/customize-shopify-checkout)).
App blocks allow you to customise the look and functionality of your checkout layout. This block is required in order to
use the Custom Capture Search Input on the Checkout page. Here's how to add this block:
1. In the Admin section of your Shopify Plus account, go to Settings > Checkout. From here you can either edit your existing checkout,
or create a new draft of your checkout layout
2. Next, select the Apps icon (the bottom icon) in the left-hand menu of the checkout editor, then search for 'Loqate'
3. Select the **loqate-checkout** app, then click the plus button and select **Checkout** from the drop-down list - this adds the
app block to the Checkout page
4. Next the [Standard Address Capture search must be disabled.](/integrations/shopify-plus-overview#optional-use-without-address-capture-not-recommended)
This will not turn off Capture entirely. Capture will now only run in the app block added using the instructions above. If the standard search is left enabled,
Capture address searches will happen in two places on the checkout page (in the custom search input as well as the address text input)
5. With that done, make sure to save the changes to your checkout, then exit the editor. If you created a new checkout draft,
you can click the **Publish** button to make it live.
Only stores which are not password protected will successfully allow app
blocks to be added. If the site is password protected, please disable this
before adding.
The final step is to enable the Custom Capture Search Input in the Loqate app's Admin page. First go to the advanced settings in the Loqate App on Shopify.
From there enable the Custom Capture Search Input option and save. Please test and check that on checkout a new address search
input has been added above the address form and addresses become available when searching addresses there. It's best practice to test these changes in a lower environment before going to production if possible.
If continuing with the Classic Capture Search which places the address dropdown in the default address text input there is, however, an additional step to make sure Address Capture
is added to your checkout. Here are the steps to follow:
* In the Admin section of your Shopify Plus account, go to **Settings > Checkout**. From here you can either edit your existing
checkout, or create a new draft of your checkout layout.
* To edit your existing checkout click the **Customize** button, or to create a new draft checkout click the **Duplicate** button
followed by **Customize** on the new version.
* Once you're editing your checkout, go to the Settings menu (the cog icon on the left-hand side), scroll down to the
**Address autocompletion** section and select the **Loqate** option to set Loqate as your provider:
* Make sure you save the changes to your checkout, then exit the editor. If you created a new checkout draft,
you can click the **Publish** button to make it live.
Address Capture will now be available on your checkout. If you also want to enable Address Verify and/or Email Validation,
carry on through the Address Verify and Email Validation tabs.
There are a few steps required to enable Address Verify functionality on your checkout:
First, you need to add the **Loqate-Checkout** app block to your store
(see [https://www.shopify.com/enterprise/blog/customize-shopify-checkout](https://www.shopify.com/enterprise/blog/customize-shopify-checkout)).
App blocks allow you to customise the look and functionality of your checkout layout and process, and this block is required in order to
use Address Verify on the Thank You page. Here's how to add this block:
* In the Admin section of your Shopify Plus account, go to Settings > Checkout. From here you can either edit your existing checkout,
or create a new draft of your checkout layout (see the Address Capture section above for more details)
* Next, select the Apps icon (the bottom icon) in the left-hand menu of the checkout editor, then search for 'Loqate'
* Select the **loqate-checkout** app, then click the plus button and select **Thank you** from the drop-down list - this adds the
app block to the Thank You page
* With that done, make sure you save the changes to your checkout, then exit the editor. If you created a new checkout draft,
you can click the **Publish** button to make it live.
Only stores which are not password protected will successfully allow app blocks to be added. If the site is password protected, please disable this before adding.
The next step is to disable the default address verification by Shopify. If this is left enabled, additional suggestions may be
displayed against individual address fields, which can cause confusion for customers.
* Still in Settings > Checkout, scroll down to the **Address collection preferences** section:
* Make sure the **Validate shipping address** option is unticked, then click the Save button
The final step is to enable Address Verify in the Loqate app's Admin page.
Once you've entered your key into the API Key field in the Loqate app's Admin page, the Address Verify section below will become editable:
* Scroll down to the Address Verify section and select the **Enable address verification for post checkout** option
* NOTE: to use the post checkout option, please ensure your store is not
[password protected](https://help.shopify.com/en/manual/online-store/themes/password-page)
* If you also want to enable Address Verify on the checkout page you can select the **Enable address verification for checkout**
option too — this is not recommended because it consumes Verify transactions during checkout (including abandoned checkouts). See the note below.
* Click the **Save** button, and Address Verify will now be available.
**Address Verify on the checkout page ("Enable address verification for checkout")**
Use this option with caution. When Address Verify runs on the checkout page (rather than after checkout), the customer's address is verified while they are still completing their order.
This has a few important implications:
* It uses Verify transactions during checkout. Every address that reaches the verification step is checked against Loqate Verify and counts towards your usage — including checkouts that customers later abandon before placing an order. The post checkout option only verifies the address once the order has actually been placed, so it typically results in fewer Verify requests and more predictable usage.
* It does not work with express / wallet payments. Apple Pay, Google Pay, Shop Pay, PayPal and similar express checkouts bypass the standard address form, so Address Verify cannot run for those orders and the customer will not be prompted to correct their address.
* It adds a step to the checkout flow. Because verification happens before the order is placed, customers may be asked to confirm or correct their address as part of completing checkout.
For most stores we recommend the **Enable address verification for post checkout** option, which verifies the address after the order is placed and avoids the points above. Only enable verification on the checkout page if you specifically need the address corrected before the order is created and you understand the additional Verify usage this can incur.
The steps to enable Email Validation in your checkout are similar to those for Address Verify.
First, add the **Loqate-Checkout** app block to your store(if it hasn't already been added by the Capture installation) - It needs to be added to the **Checkout** section.
* In the Admin section of your Shopify Plus account, go to Settings > Checkout. From here you can either edit your existing checkout,
or create a new draft of your checkout layout (see the Address Capture section above for more details)
* Select the Apps icon (the bottom icon) in the left-hand menu of the checkout editor, then search for 'Loqate'
* Select the **loqate-checkout** app, then click the plus button and select **Checkout** from the drop-down list
Once that's done, you just need to select the **Enable email validation** option from the 'Email Validation' section on the Loqate
app's Admin page:
Once that's selected, click the **Save** button and move on to the next section.
***
### Recommended - Include company name
By default, Shopify is set to not include a **Company name** address field. As such, if an address includes a company name
(for example if a customer orders a delivery to their place of work) it won't be included in the address that's populated in Shopify.
We recommend setting Shopify to include Company name as an optional address field, so that it will be populated any time an address
does include a company name. Here's how to change that setting:
* Go to the site Settings page for your Shopify store
* Select the **Checkout** option from the left-hand menu
* Scroll down to the **Customer information** section
* Set Company name to **Optional**, then click the Save button
With that done, you should now see an optional Company address field in the checkout:
***
### Optional - Use without Address Capture (not recommended)
We recommend always using Address Capture, as this helps reduce the chances of mistakes caused by manual address entry,
ensuring addresses can be trusted as correct and giving the best customer experience. It is, however, possible to use just
Address Verification or just Email Validation if you don't want any kind of address autocompletion functionality.
If you want to use Address Verification and/or Email Validation on their own, follow the full installation and setup process as above,
then you can manually disable Address Capture. Here's how to do that:
* First, make sure that you've enabled at least one of Address Verification and/or Email Validation (see the [Enabling Loqate services](#enabling-loqate-services)
section earlier)
* Then, go to Settings > checkout and click the **Customize** option for your checkout
* Click on the **Settings** icon on the left-hand side, then scroll down to the **Address autocompletion** section
* Untick the **Use address autocompletion** option, then save the change to your Checkout configuration
This will have disabled the Address Capture functionality, while leaving Address Verify and/or Email Validation running.
***
### Optional - Advanced Settings
The Advanced Settings page is located in the Admin section of your Loqate app, and includes the following optional settings.
With this selected, Address Capture will always attempt to use any English results to set the delivery address, even with non-latin
results. Note that for this setting to work, the 'Display a Custom Loqate Capture Search Input on the checkout page' option
must be **enabled**.
For example, here's a Japanese address searched for using Kanji characters:
And here's the result populated using the English version of the address:
This is useful for when carriers have difficulty processing non-latin addresses.
With this enabled, customers can manually amend their addresses post-checkout, if what they initially entered can't be verified.
For example, if a customer hasn't entered their building number or apartment number they can go back and add it in.
Under these circumstances, after an order has been confirmed the customer will be presented with a list of possible addresses to
choose from:
If the customer selects one of the suggested addresses, they will then see a notification acknowledging the address they've selected
and giving them the option to update their shipping address:
Sometimes it can be possible for a customer to enter an address with the wrong country, which as standard will be flagged as an
unverified address.
Selecting this option enables Address Verify to be automatically called for a second time whenever an address is returned as unverified.
For the second call, Address Verify will run using enhanced country verification, providing another opportunity to verify the address
with the correct country.
For this to function Address Verify must be enabled on the **Thank you** page. This functionality will incur additional charges for
additional verification.
Custom field mappings allow you to control how Loqate address data is mapped into Shopify's checkout fields. By default, the app uses
built-in logic to populate fields like Address Line 1, Address Line 2, City, and so on. With custom field mappings, you can override
this behaviour — either globally or on a per-country basis — to handle address formats that don't fit the default mapping.
This is useful when you need to combine multiple address components into a single Shopify field, apply conditional logic based on
whether certain fields have values, or handle country-specific formatting requirements.
To configure custom field mappings, click the **Custom Field Mappings** link on the Advanced Settings page. For full details on how
to set up and use this feature, see the dedicated guide:
Learn how to configure custom field mappings with template syntax, country overrides, and examples.
***
## Troubleshooting
The Loqate Shopify Integration requires a Shopify Plus account. If you don't use Shopify Plus, you won't see all of the necessary
options and won't be able to use this integration.
Ensure that the API key is correct on the Admin page.
Ensure that your API key is correct on the Admin page, and that you have sufficient credit on your Loqate account.
If you no longer want to use the Loqate Shopify Plus integration, you can uninstall it from your Shopify Plus store.
**Please note:** if you uninstall the Loqate app and then want to start using it again at a later date, you will need to go through the
full installation process again.
To uninstall the Loqate app, go to the Admin page of the app within your Shopify account and click on the three dots at the top-right of
the screen. You will see an option to uninstall there:
When you click **Uninstall**, you'll be prompted to choose a reason for uninstalling:
Select one or more reasons, then click the **Uninstall** button. This will uninstall the app and return you to the 'Installed Apps'
section of your Admin page.
***
If you haven't already, check out our 'About the Loqate Shopify Plus
Integration' article for examples of the Loqate Shopify Plus Integration in
use.
# Welcome to GBG Loqate Docs
Source: https://docs.loqate.com/introduction
Find all the guides and resources you need to build with Loqate
Learn how to get started with Loqate's services
Explore our comprehensive API documentation and endpoints
Native integrations with leading e-commerce platforms and CRMs
Try Loqate for free with a 45-day trial
Explore Products
Speed up a user's address entry with our address capture service
Review and clean up existing address data with our verification service
Real-time email address verification and validation
Validate and verify phone numbers across global networks
Real-time verification of bank account details and routing numbers
See all location and data validation solutions
Get Started
From an API call to successful delivery in 3 steps
Step 1
Create an API Key
Get your API key from the dashboard to make requests.
Get started here
Step 2
Make your first call
Send your first API request to validate an address or email.
View API Reference
Step 3
Parse the response
Handle the response data to improve your user experience.
Response Guide
Supported Integrations
Native integrations with leading e-commerce platforms and CRMs
Shopify Plus
Native integration for Shopify Plus stores
Adobe Commerce
Magento and Adobe Commerce integration
BigCommerce
BigCommerce platform integration
Microsoft Dynamics 365
Dynamics 365 CRM integration
Salesforce Commerce Cloud
Salesforce Commerce Cloud integration
commercetools
commercetools headless commerce platform
Salesforce CRM
Salesforce CRM integration
Shopware
Shopware e-commerce platform
Reapit
Reapit property software integration
Don't see your platform? Request an Integration
Help and Support
Get the assistance you need from our expert team
Access documentation, guides, and technical support resources
Connect with our team for Sales or Support
Security & Compliance
Enterprise-grade security and compliance standards you can trust
International security management standard
Engineering Thoughts and Resources
Find out about use cases and Loqate features
Join our developer community
Step-by-step coding tutorials and best practice guides
Step-by-step video guides
Frequently Asked Questions
Everything you need to know about our services and APIs
Capture is a user-present address capture service, designed to ensure accuracy and standardization at the point of entry by guiding users to select validated addresses in real time. In contrast, Verify is a data cleansing service that processes and corrects address data already held within a system, ensuring it conforms to postal and formatting standards. Verify can operate in both user-present scenarios e.g. validating input within a form and non-user-present contexts e.g. bulk cleansing of existing datasets or automated background validation.
Our APIs are designed to handle high-volume requests with automatic scaling. Rate limits vary by plan, starting from 1,000 requests per month on our free tier to unlimited requests on enterprise plans.
We are fully GDPR compliant and follow strict data privacy standards. We use 256-bit encryption, implement zero data retention policies, and provide data processing agreements for enterprise customers.
We support 245+ countries and territories worldwide with comprehensive address format coverage including postal codes, administrative areas, and locality information.
Yes, we provide webhook support for bulk processing operations and real-time status updates. You can configure webhooks to receive notifications when bulk jobs complete or encounter errors.
Our validation accuracy exceeds 99% for most countries. We provide detailed error codes and messages to help you handle edge cases and provide meaningful feedback to your users.
Still have questions? Send us an email
# Local API
Source: https://docs.loqate.com/local-apis/introduction
Loqate's local APIs provide native libraries on a wide variety of platforms to allow the use of fast, embedded functionality within a client environment.
The Loqate API is a multithreaded library able to make excellent use of multi-core CPUs and multiprocessor systems. Client applications interact with the Loqate server making calls to Loqate's Local API.
The Loqate Local API is installed in a single directory on the physical server. A /data subdirectory contains Loqate's Global Knowledge Repository (GKR). The Loqate Local API product is self-contained and does not require any third-party database to be installed. All required reference data is contained in the application itself. No complex installation nor configuration is required.
## API Documentation
## Transaction Recording Service
Being a random-access data-based application, the Loqate Engine will show higher performance with faster I/O systems and more memory available for caching. Better performance is achieved when the Global Knowledge Repository data files and the Loqate application are co-located in the same server.
It may be useful to mention that the use of the term "Loqate server" should be interpreted as being a software application instead of an application server such as, for example, the Apache server. The Loqate server does not include server-client capabilities related to load balancing, failover, nor wait for client requests on certain physical port number. High availability, load balancing, failover capabilities are expected to be handled by the physical server or network hosting the Loqate Engine.
# SERP Overview
Source: https://docs.loqate.com/local-apis/serp-overview
## What is SERP
The Address Accuracy Software Evaluation and Recognition Program (SERP) ensures the best postage rates for your mailing list.
### Platform Availability
SERP is currently only available on the following platforms:
### Release Cycle
Please note, SERP dataset expiration dates are set by the postal authority. Please ensure that you have the latest library and data installed to avoid loss of service through these products.
### How To Run SERP
There are two ways to run the SERP certified certification in the Loqate Engine:
**Option 1: Direct SERP Process**
Invoke the SERP certification process for Canada directly by adding the process "SERP" to the process-list.
In batch mode, run lqtbatch with the process set as "serp":
```bash theme={null}
lqtbatch -p serp -r SERP
```
This will generate a SERP address accuracy report.
**Option 2: Via Verify Process**
Invoke the certification process by calling the "verify" process while setting the server-option `CertifiedCountryList` to "CAN" – this will internally invoke the SERP process for Canadian addresses in your dataset. As we extend our certification process support to other countries, you will be able to specify the countries for which you want to run the certified process (as opposed to the Loqate "verify" process) through comma-separated list of country code values for the `CertifiedCountryList` option.
### Input Requirement
**Important note:** SERP process requires the input addresses to be in the following format as input. The input headers must also match Loqate address fields, found on the support site [here](/field-descriptions/addfields/).
* Address1 (required)
* Address2 (optional)
* Locality (optional)
* AdministrativeArea (optional)
* PostalCode (optional)
* Country (required)
### Output Component Fields
The following page includes detailed information regarding the SERP Fields:
* [SERP Fields](/field-descriptions/serp-fields/)
### Sample Outputs
#### Example 1
**Input address:** `550 BURRARD ST RM 1230 VANCOUVER BC V6C2K2`
**Result Codes:**
| Field | Output |
| ---------------- | ------ |
| **SerpStatusEx** | V |
| **Questionable** | Empty |
**Components:**
| Address Field | Output |
| ---------------------------- | --------- |
| **PremiseNumber** | 550 |
| **ThoroughfareName** | BURRARD |
| **ThoroughfareTrailingType** | ST |
| **SubBuildingType** | RM |
| **SubBuildingNumber** | 1230 |
| **Locality** | VANCOUVER |
| **AdministrativeArea** | BC |
| **PostalCodePrimary** | V6C2K2 |
#### Example 2
**Input address:** `PO BOX 1200 SUCC POINTE-CLAIRE POINTE-CLAIRE QC H9R4R6`
**Result Codes:**
| Field | Output |
| ---------------- | ------ |
| **SerpStatusEx** | V |
| **Questionable** | Empty |
**Components:**
| Address Field | Output |
| ------------------------------------- | ------------- |
| **PostBoxType** | 1200 |
| **DeliveryInstallationType** | SUCC |
| **DeliveryInstallationQualifierName** | POINTE-CLAIRE |
| **Locality** | POINT-CLAIRE |
| **AdministrativeArea** | QC |
| **PostalCodePrimary** | H9R4R6 |
#### Example 3
**Input address:** `GD STN MAIN PARKSVILLE BC V9P2G2`
**Result Codes:**
| Field | Output |
| ---------------- | ------ |
| **SerpStatusEx** | V |
| **Questionable** | Empty |
**Components:**
| Address Field | Output |
| ------------------------------------- | ---------- |
| **GeneralDelivery** | GD |
| **DeliveryInstallationType** | STN |
| **DeliveryInstallationQualifierName** | MAIN |
| **Locality** | PARKSVILLE |
| **AdministrativeArea** | BC |
| **PostalCodePrimary** | V9P2G2 |
#### Example 4
**Input address:** `RR 1 LOT 89 CONC 3 MARYSTOWN NL A0E2M0`
**Result Codes:**
| Field | Output |
| ---------------- | ------ |
| **SerpStatusEx** | V |
| **Questionable** | Empty |
**Components:**
| Address Field | Output |
| ---------------------- | ----------- |
| **RouteType** | RR |
| **RouteNumber** | 1 |
| **AdditionalContent** | LOT 89 CONC |
| **Locality** | MARYSTOWN |
| **AdministrativeArea** | NL |
| **PostalCodePrimary** | A0E2M0 |
# Consuming Premium Data Sets
Source: https://docs.loqate.com/location-solutions/premium-data-sets/consuming-premium-data-sets
There are a series of extra datasets available via our Address Capture services.
Currently we have Business Data, AddressBase Premium, AddressBase Islands and Geo+ (Loqates premium UK address dataset) available.
As these datasets are covered by separate terms and agreements they will need to be activated on your account for you, please get in touch if you are interested in taking advantage of any of our premium datasets.
There are a few approaches you can take in consuming these extra datasets, and which one is appropriate depends on how you want to integrate with the service.
## Direct Via the API
### Find
Your extra dataset can be activated by us as a setting on the key itself. This means that the selected API key will always return data from the selected dataset. Alternatively, you can use any API key from your account and specify the dataset required via a parameter on the request.
**Note:** If a premium dataset is requested using an API key from an account that does not have that dataset enabled, the request will fail.
If the dataset has not been enabled on the key itself, you will need to add the datasets parameter to the Find request. The following example requests the Business dataset be used for this Find request:
`https://api.addressy.com/Capture/Interactive/Find/v1.00/csv.ws?Key=AA11-AA11-AA11-AA11&Text=wr5 3da&Datasets=gb_db`
The Find request will then continue as normal using the Business data as its dataset. Once the user selects an address from the list you will pass the Id of that address into the retrieve request as per a normal flow.
### Retrieve
Each premium dataset contains certain extra fields that are available in addition to the standard fields provided by a Retrieve request. By default, if you use an Id from a premium dataset Find request, the Retrieve will still only return the standard set of fields. In order to retrieve these special fields, you will need to supply field format strings for them into the FieldFormat Parameters of a Retrieve request. These fields are in the style of FieldXFormat, with X being the number of that field. The requested field will then be returned in the corresponding response field, FieldX.
A normal field format will be in the style of `{FIELDNAME}`.
For example, in order to retrieve the Company number from the Business dataset you would use the following request:
`https://api.addressy.com/Capture/Interactive/Retrieve/v1.00/csv.ws?Key=AA11-AA11-AA11-AA11&Id=IDFROMFIND&Field1Format={CompanyNumber}`
This would return the the Company number in the returned property Field1.
The Retrieve request is limited to 20 Field Format fields by default. Should you require more fields than this you will need to specify a fields property along with your field formats that will set the number of extra fields to respond with, for example:
`https://api.addressy.com/Capture/Interactive/Retrieve/v1.00/csv.ws?Key=AA11-AA11-AA11-AA11&Id=IDFROMFIND&Field1Format={CompanyNumber}......................&Field21Format={TelephoneNumber}&Fields=21`
## Using the JavaScript SDK
If you are using our JavaScript SDK to make requests to the service, as outlined in our [advanced guide](/our-services/address-capture/sdk), you can enable premium datasets via the options object used in the construction of the control object, e.g.:
```
var options = {
key: 'AA11-AA11-AA11',
search: {
datasets: ['gb_db']
},
advancedFields: [
'{CompanyNumber}'
]
}
```
The same restrictions apply to the datasets as apply when directly integrating via API.
## Using the simple setup
If you are using our simple setup wizard to install your lookup control you can specify the field formats directly in the field mapping control using the field format syntax, `{FIELDFORMAT}`.
* **Business Data**
* "CompanyNumber",
* "TelephoneNumber",
* "UK2003Code",
* "SICCode",
* "SICDescription",
* "LineOfBusiness",
* "EmployeesAtCompany",
* "EmployeesAtSite",
* "LocationIndicator",
* "Sales",
* "YearStarted",
* "Executive1Function",
* "Executive1FirstName",
* "Executive1Surname",
* "Executive1Saluation",
* "Executive2Function",
* "Executive2FirstName",
* "Executive2Surname",
* "Executive2Saluation",
* "Executive3Function",
* "Executive3FirstName",
* "Executive3Surname",
* "Executive3Saluation",
* "Executive4Function",
* "Executive4FirstName",
* "Executive4Surname",
* "Executive4Saluation",
* "Executive5Function",
* "Executive5FirstName",
* "Executive5Surname",
* "Executive5Saluation",
* "Executive6Function",
* "Executive6FirstName",
* "Executive6Surname",
* "Executive6Saluation",
* "Executive7Function",
* "Executive7FirstName",
* "Executive7Surname",
* "Executive7Saluation",
* "Executive8Function",
* "Executive8FirstName",
* "Executive8Surname",
* "Executive8Saluation",
* **Geo+**
* "PropertyType",
* "UPRN",
* "UDPRN",
* "UMRRN",
* "Owning\_UDPRN",
* "InferredParentUPRN",
* "AddressKey",
* "OrganisationKey",
* "DPS",
* "LargeSmallUserFlag",
* "SmallOrganisationFlag",
* "NotYetBuiltFlag",
* "Eastings",
* "Northings",
* "Latitude",
* "Longitude",
* "UPRNDerivation",
* "GeoDerivation",
* "LinkedUDPRNs",
* "LinkedUMRRNs",
* "LinkedUPRNs",
# Property Intelligence Flat File for GB
Source: https://docs.loqate.com/location-solutions/premium-data-sets/property-intelligence-data-directory
The Property Intelligence database is designed to assist in the process of providing insurance quotes for customers in GB supplying property related metadata for residential properties.
[User Guide](https://github.com/loqate/release-docs/blob/main/prop-intel-release-notes/202606%20Property%20Intelligence%20User%20Guide.pdf)
The data dictionary contains details of the metadata elements provided with examples of the values provided and the volume of coverage.\
[Latest Data Dictionary](https://github.com/loqate/release-docs/blob/main/prop-intel-release-notes/202604%20Prop%20Intel%20Data%20Dictionary.pdf)
# Loqate Utilities Register Provides UK Meter Point Data
Source: https://docs.loqate.com/location-solutions/utilities-register/loqate-utilities-register
UK meter point data for gas and electricity suppliers. Retrieve MPxN information, REL details, and switching data by address.
The Utilities Register (UR) is a web service providing access to a property’s address and meter-point data needed to provide consumers with tariff estimates and for energy suppliers
to execute a switch through the Central Switching Service or CSS.
**Last updated: September 2025.** Market-wide Half Hourly Settlement (MHHS) enabled electricity supply points will commence rollout across the country from September 2025.
In line with this, the Utilities Register provides MHHS-related attributes for all electricity meter points, and these will become populated with data as and when these
meters are enabled for MHHS over the course of the next 18 months or so.
The Utilities Register provides you with the ability to add address and MPxN searching into your websites and server-side applications. The service returns both gas and electricity supply point data from a single request. Making use of Gas and Electricity Enquiry Services (GES and EES) provided by the Retail Energy Code Company (RECCo), the Utilities Register provides you with accurate data that’s updated by the industry on a daily basis.
The Utilities Register can be used to retrieve meter point and other information for a specific address. Where a complete address is not immediately available or the implementation benefits from interactive address input, the service can also be used for the purposes of postcode or partial address lookup, retrieving meter point information with a follow up request in this instance. Additionally, GBG’s service benefits from being able to verify and standardise unformatted or ‘free-format’ address strings into structured addresses, providing a far higher chance of a successful match when searching the GES and EES. This can be useful where a user is not present to select or validate an address. For example, when an energy supplier receives uploads of hundreds or thousands of addresses from Price Comparison Websites and brokers.
Critically, the Utilities Register also returns the Retail Energy Location (REL) details, required to execute a switch within the CSS.
**Note:** Loqate's Utilities Register is only available to UK customers. This guide is only relevant to customers who have set up Utilities Register with their account manager. If you haven't set up the service yet, please contact your account manager before accessing this guide.
[Download the guide](https://www.loqate.com/media/siekgpgr/loqate-utilities-register-user-guide-v3.pdf)
# We're Upgrading Your GBG Loqate Account
Source: https://docs.loqate.com/loqate-basics/account-migration
At GBG Loqate, we're committed to providing the best possible user experience for our customers. As part of our ongoing efforts to improve usability, we're introducing enhanced user management features within our SaaS platform.
## Why We're Making These Changes?
We've moved to a new authentication system that unlocks several benefits, including improved diagnostics and enhanced security features soon to be implemented such as multi-factor authentication (MFA) and passkeys.
One of the most frequently requested improvements is the ability for organisations to have multiple users on the same account. This allows teams to collaborate more effectively without relying on a single shared login.
New customers already have access to this functionality, and we're now rolling it out to our existing users.
## What Changes Will You See?
When you next log in, you'll see an invitation to upgrade your account. Simply follow the on screen instructions to create a new account using your existing credentials. All your current settings and data will be transferred automatically.
After upgrading, you'll be able to invite additional users to your organisation and manage access more easily. Simply click on your company name in the top right corner of our account section and select “Your Team”. From here you will be able to add and remove users to your organisation.
If you experience any issues, please contact our [support team](https://www.loqate.com/en-gb/contact/customer-support/), or reach out to us on [Slack](https://join.slack.com/t/loqate-workspace/shared_invite/zt-2xhkfmb38-3iIhtlRGO88k6dub4F4qzQ) for any questions.
Frequently Asked Questions
You should see an invitation when you log in. If you don't see the invitation, please contact support.
Yes. The invitation will continue to appear each time you log in with the same credentials until the full upgrade rollout is completed.
Admins can invite or remove users. Members can access the platform but cannot manage users. All other functionality is the same.
A **User** is someone who can log in to your Loqate Account. A **Contact** is simply an email address we use to send important account‑related information.
Your Loqate Account has always included *contacts*—these are used for notifications such as balance alerts, security alerts, invoices, and receipts.
*Users*, on the other hand, have login access to your Loqate Account and are managed in the **Organisation** area. You can find this by clicking your company name in the top‑right corner of the account screen and selecting **“Your Team”**.
You will continue to use the same [login page](https://auth.loqate.com/en/sign-in), however, after your account is converted, you must log in using your **email address**, not your Account Code and Password.
If you attempt to log in using the old Account Code and Password combination, it will no longer work.
After you have migrated one of your accounts, the **Switch Organisation** page will appear. This page lists the other organisations that you can migrate to our new system.
In the top‑right corner, you will find a button to **log out** of the current account.
After selecting this option, you will be able to log in and migrate your other accounts. If any of those accounts have not yet been migrated, see [Legacy Sign-In](/loqate-basics/legacy-login) for instructions on how to access them.
**Are you trying to log in with an Account Code?**
Once your account is converted, the Account Code and Password combination is disabled. You must log in using your **email address**.
**Have you been added to the Organisation?**
If your email address hasn’t been invited to the Organisation, you won’t be able to log in.\
Please contact the person who converted the account and ask them to confirm that you appear in the **Organisation** area (found by clicking your company name in the top‑right corner of the account screen and selecting **"Your Team"**).
**Are you trying to log in with the email address of a "Contact" on your Account?**
See the FAQ titled **"What is the difference between a Contact and a User?"** above.
**Can’t switch to an organisation?**
Maybe you are a member of an account that hasn't been migrated to the new system.
A tooltip will appear with some information that will tell you the current status so you can contact the Admin of that organisation to migrate it or invite you. If you need to sign in to an unmigrated account directly, see [Legacy Sign-In](/loqate-basics/legacy-login).
If you are still having problems logging in, please contact our [support team](https://www.loqate.com/en-gb/contact/customer-support/) who will be happy to help.
# AI Agent Docs Integration
Source: https://docs.loqate.com/loqate-basics/ai-agent-integration
Learn how to integrate AI agents with Loqate documentation using llms.txt, Skills or MCP.
Loqate publishes machine-readable documentation metadata that allows AI agents and developer tools to understand Loqate capabilities programmatically.
These integration points can be used by agent frameworks, MCP-compatible tools, IDE extensions, or custom automation.
## Available integration options
Depending on your tooling and integration model, use one or more of the following options.
### The `llms.txt` file
The `llms.txt` file is a structured documentation index.
It lists all the available documentation pages so agents can discover relevant content before answering questions.
See the `llms.txt` file at:
```url theme={null}
https://docs.loqate.com/llms.txt
```
### Skills CLI
The Skills CLI is a command-line tool that allows you to query the documentation and retrieve relevant information programmatically.
If your agent supports the [Skills CLI](https://www.npmjs.com/package/skills), then you can install the skill using:
```bash theme={null}
npx skills add https://docs.loqate.com/
```
During the installation, you'll be prompted to select an agent to install the skill for. Select the agent you want to integrate with Loqate documentation. If you don't see your agent listed, use the Search option to find it.
This command loads the Loqate documentation into the agent's context.
Start with a query like:
```bash theme={null}
based on the loqate .claude skill what is Loqate?
```
### MCP
When an AI application connects to the Loqate documentation Model Context Protocol (MCP) server, it can search the documentation and retrieve full page content directly, in response to your prompts.
Instead of relying on information from its training data or making a generic web search, your MCP server provides access to all indexed content on the documentation site.
Loqate exposes its documentation through a remote MCP server.
This enables MCP-compatible clients to query the documentation dynamically.
To connect, register the following URL as a remote MCP server in your client configuration:
```
https://docs.loqate.com/mcp
```
#### MCP tools
Your MCP server provides two tools that AI applications can use:
* **Search**: Searches across the Loqate documentation to find relevant content, returning snippets with titles and links. Use this when you need to discover information or find pages matching a query.
* **Get page**: Retrieves the full content of a specific documentation page by its path. Use this when you already know the page path, such as from search results, and need the complete content rather than a snippet.
AI applications determine when to use each tool based on the context of the conversation. For example, an AI application might first search your documentation to find relevant pages, then use the get page tool to retrieve the full content of the most relevant result.
#### Use MCP server
The Loqate documentation provides different options for using the MCP server:
Add the Loqate MCP server to Claude:
1. Navigate to the [Connectors](https://claude.ai/settings/connectors) page in the Claude settings.
2. Select **Add custom connector**.
3. Add the Loqate MCP server:
* **Name**: Loqate Docs
* **URL**: `https://docs.loqate.com/mcp`
4. Click **Add**.
Access the MCP server in your chat:
1. When using Claude, click the attachments button (the plus icon).
2. Navigate to **Connectors**, you'll see the Loqate docs MCP connector you just added automatically enabled.
3. Ask Claude a question about Loqate.
To use the Loqate MCP server with Claude Code, run the following command:
```bash theme={null}
claude mcp add --transport http loqate-docs https://docs.loqate.com/mcp
```
Test the connection by running:
```bash theme={null}
claude mcp list
```
To connect the Loqate MCP server to Cursor, follow these steps:
1. Use `Command` + `Shift` + `P` (`Ctrl` + `Shift` + `P` on Windows) to open the command palette.
2. Search for "Open MCP settings".
3. Select **Add custom MCP**. This opens the `mcp.json` file.
In `mcp.json`, add:
```json theme={null}
{
"mcpServers": {
"loqate-docs": {
"url": "https://docs.loqate.com/mcp"
}
}
}
```
In Cursor's chat, ask "What tools do you have available?" Cursor should show the Loqate MCP server as an available tool.
To connect the Loqate MCP server to VS Code, create a `.vscode/mcp.json` file and add:
```json theme={null}
{
"servers": {
"loqate-docs": {
"type": "http",
"url": "https://docs.loqate.com/mcp"
}
}
}
```
# Loqate API Security: Best Practices and Configuration
Source: https://docs.loqate.com/loqate-basics/api-security
Configure security options for Loqate API keys. Restrict by service, limit by IP or URL, and choose between client-side and server-side integration.
## Integration options
There are two ways of integrating with [Loqate's APIs](/api-reference/introduction/) - client-side and server-side - and it's worth considering the security implications of both when you're deciding how to integrate.
Both options provide access to the same services, and only require an API key.
* In a **client-side** integration all of the processing for an API in completed via a browser, on the end-user's device
* In a **server-side** integration all of the processing for an API is completed on a web server
A **server-side** integration is recommended to ensure the highest level of security, but the following sections explore the security implications of both options.
### Client-side integrations
Client-side integrations are quick and easy to set up, and don't requite a large amount of technical expertise, so they give you the ability to get up and running without too much time or effort. The downside to this approach, however, is that it doesn't allow you to implement any of your own monitoring, which means you have less control over and visibility on the journey your customers go on.
From a security perspective they are also more vulnerable than server-side integrations, as they don't hide your API keys, which means your keys are visible to anyone viewing the source code of your website. The previously-discussed security measures are in place to help, including allow-listing features that let you specify which domains and IP addresses can use your API keys, but if you're a high-profile business, a server-side integration is recommended.
If you do decide to use a client-side integration, make sure you use the available measures to be as secure as you can. For instance, use the key-specific limits/restrictions mentioned earlier to lock your API keys down as much as possible.
### Server-side integrations
Server-side integrations require more technical expertise and resources to set up, but offer you a greater degree of control over the user experience. Using this approach you have complete control over your monitoring, in terms of what your users are requesting and what they see in response.
This approach is also typically more secure, as it won't make any of your API keys visible, and as such this is always recommended as the best option.
No API integration is invulnerable however, so using as many of the provided security options as possible is still recommended even with a server-side integration.
## Security options
Loqate provides you with various security options, some of which can be applied across your whole account (and will therefore apply regardless of which services you're using) and others that can be applied to individual API keys (and therefore individual services). Applying as many of these as possible is recommended.
## Securing your account
There are several features available to you in the [Security section of your account](https://account.loqate.com/account#/Security), that apply across the whole of your account.
Some of these features are more or less suitable depending on the type of integration you use, whether it's client-side or server-side. For each one there's a note regarding which integration type it's most suited to.
### Restrict IP addresses
This tool is most suited to server-side integrations.
Use this feature to block one or more specific IP addresses, and ensure that they can't access any of your Loqate services.
If someone then tries to access one of your services via a restricted IP address, you'll receive an email notification which contains details of the error that was generated, as well as information about which service was affected, what the source IP was, etc. Here's an example:
### Account password
Make sure you use a strong password to prevent unauthorised access to your Loqate account.
## Securing your API keys
All Loqate services authenticate your requests using the API key relevant to that request or service. In order to ensure your keys' security, it's recommended that you:
* Restrict your keys to specific services (strongly recommended)
* Limit your keys by URLs or IP addresses
* Don't embed your keys anywhere that they could be extracted from
You can restrict and/or limit any key in the [Your Services page of the Account section](https://account.loqate.com/account#/Dashboard/).
Select the key you want to edit, then click on the **Limits** tab where you'll see these options:
### Limit by URL
This tool is suitable for both client-side and server-side integrations.
To help prevent fraudulent or accidental use of one of your keys across domains, add the URLs that you expect the requests to be coming from. Enter a URL address you wish to limit in the text box and then click the plus icon. You can add as many URLs as you like.
You will also need to specify any subdomains and combinations of URLs that might be used. i.e. `http://www.mysite.co.uk`, `http://www.mysite.com`, `https://mysite.co.uk`, etc.
### Limit by IP
This tool is most suited to client-side integrations.
Similar to the Daily Limit, this allows you to place request limits against a group of IP addresses, which should help manage your cashflow and cap individual usage. Enter an IP address you wish to limit in the text box and then click the plus icon. You can add as many IP addresses as you like.
### Limit by Service
This tool is suitable for both client-side and server-side integrations.
Making use of this option is strongly recommended, as it allows you to restrict each API key to one or more Loqate services, rather than allowing each key to be used for any service.
The default value for this option is blank, in which case that key can be used for any Loqate service. You can select more than one service to limit an API key to, for example if you use the same key for Address, Email and Phone Validation.
Each of those values represents a set of Loqate services. Here's how they're broken down:
* Address Capture
* [Capture Find](/api-reference/address-capture/find)
* [Capture Retrieve](/api-reference/address-capture/retrieve)
* [Geolocation](/api-reference/address-capture/geolocation)
* Legacy Capture products
* Address Verify
* [Verify (International Batch Cleanse)](/api-reference/address-verify/international-batch-cleanse)
* Legacy Verify products including AddressCleansing, CleansePlus/Batch, CleansePlus/Interactive and Cleansing/International
* [Bank Validation](/our-services/bank-validation/overview/)
* All Bank Validation APIs
* [Email Validation](/our-services/email-validation/overview/)
* All Email Validation APIs
* [Phone Validation](/our-services/phone-validation/overview/)
* All Phone Validation APIs
* Geocode
* DistancesAndDirections
* [Distance](/api-reference/geocode/distances-and-directions/distance)
* [Directions](/api-reference/geocode/distances-and-directions/directions)
* [Geocoding](/api-reference/geocode/geocoding/apis)
* All Geocoding APIs
* StoreFinder
* [Find](/api-reference/geocode/store-finder/findplacenames)
* [Retrieve](/api-reference/geocode/store-finder/retrievecoordinates)
* All GovernmentData APIs
* Legacy
* A variety of legacy products including PostcodeAnywhereNorthAmerica, PostcodeAnywhereInternational and PostcodeAnywhere/Interactive
This list includes all currently-supported Loqate products. If you can't see a product you're using on this list, it's likely a legacy product and will be included either under Capture or Verify (if it's an older version of them) or the specific Legacy option. Please check with the Loqate Support team if you'd like to clarify which option to choose.
**NOTE:** if you created an Address Verification service via your Account section (i.e. following the instructions in the [Tag Setup Guide](/our-services/tag-setup-guide)), choose the Address Capture option rather than Address Verification (as this refers to the Verify product instead).
Whichever approach you take to integrating with Loqate, make sure you consider the security implications and take steps to ensuring the security of your site. \
\
If you have any further questions about API security, please get in touch with the [Loqate support team](https://www.loqate.com/en-gb/contact/customer-support/).
# Developer Blog
Source: https://docs.loqate.com/loqate-basics/blog
# Create an API Key
Source: https://docs.loqate.com/loqate-basics/create-an-api-key
Step-by-step guide to creating and configuring Loqate API keys. Set up authentication, configure service limits, and test your first API request.
**All Loqate services require a valid and active API key for authentication.**
## Prerequisites
You need a valid Loqate account. [Sign up for a free trial](https://account.loqate.com/register/) to get started.
## Steps
1. Navigate to the **Setup** page in the Loqate Account section by clicking the **Add service +** button from the left-hand menu.
2. Select the **API Key** option to create a generic API key.
3. You'll be taken to the **Service Settings** page for your new key. Click **Save** to activate it.
4. Copy and save your API key immediately. You'll need it to authenticate all API requests.
## Using Your API Key
Include your API key in the `Key` parameter of your requests:
```http theme={null}
https://api.addressy.com/Capture/Interactive/Find/v1.10/json3.ws?Key=YOUR-API-KEY&Text=search
```
Replace `YOUR-API-KEY` with your actual key.
## Service Settings
Configure your key in the Service Settings page:
* **Configuration:** Edit the key name, toggle between active/inactive, or set to internal use only
* **Limits:** Set daily lookup limits and restrict the key to specific URLs, IPs, and/or services
For detailed security options, see the [API Security](https://docs.loqate.com/loqate-basics/api-security) page.
Generic API keys can enable additional datasets for expanded coverage.
## Try It Out
Test your API key with the [Address Capture Find Playground](/api-reference/address-capture/find?playground=open) to make your first request.
# Frequently Asked Questions
Source: https://docs.loqate.com/loqate-basics/faq
Answers to common Loqate questions: API key errors, account limits, Tag setup, security settings, and troubleshooting.
## Account Troubleshooting Questions
This error is generated whenever you try and do a lookup using a key that has been deleted, or has expired. Licence keys can be deleted through your account online; if you do this by mistake you’ll need to contact us to get them reinstated. With annual user licences available for the Royal Mail's Postcode Address File (PAF®) data, this error will be displayed if you have not renewed and the licence has expired; again please contact us.
Each per-click licence key has a setting that dictates the total credit it can consume from the account on a single calendar day. This is a security setting to help protect your credit from being consumed too quickly. It can be changed within the edit wizard of the licence key in question. If you are using a user licence key then the daily limit will be set at the time of purchase, in accordance with our fair usage policy.
Within your key settings you have the option to limit our service to only accept requests on that key that are coming from specified website addresses. This is a security feature to prevent your key from being used anywhere other than the site you intended. If you set this up and get this error message please check the URL is formatted correctly and is available. The website address will be detailed in the table in the email.
This means your account has run out of credit. An error message email will be generated when a user tries to do a lookup. The error will usually show the IP, or URL where the request originated and details of the service that was used. To fix this, log into your account and top up with credit.
The Free Service Limit Exceeded error occurs automatically when there are a significantly higher number of uncharged requests in comparison to charged. For example, when using the address validation service, a find (free) request should usually be followed by a retrieve (charged) request. This error is highlighting an imbalance in free and charged calls to the service. Check the usage on your account under Menu > Reporting to see if the service has been installed correctly. If the calls to the service are dramatically imbalanced please [get in touch](https://www.loqate.com/en-gb/contact/customer-support/#form) with our Support team.
Each of our services can have its own security settings. One of these is an allowed URL list, which restricts your service for use on specific web pages. This error message is highlighting that the security you have in place on your account is working as it should by blocking off any unknown URLs from accessing your service.
The URL in question can be found in the ‘Additional information’ section of the error message.
* If you recognise the URL you might like to add it to your list of allowed URLs.
* If you do not recognise the URL you can ignore this message with the understanding that your security settings are working as intended.
* Blank source URL? Blank URLs can be caused due to a number of reasons. This can be caused by internal coding, how the service is being used or (most commonly) by pop-up blockers used by customers which can occasionally remove the URL from the request. We block these URLs too because we can’t be certain of the source.
You can find these settings in your account under the security tab for each key.
In your account, there are a number of optional security settings, one of these being an ‘allowed IP list’. This error has occurred due to a request coming through to us from an IP not currently on this list. The IPs in question can be found in the “Additional information” section of your error message. If you recognise the IP address then you can add it to your list of allowed IPs. You can add IPs under 'Limit by IP' in your account; you'll find this under Menu > Your Services > Select the specific Key and select 'Limits'.
The surge protector detects when there is a notable or out of average surge in account usage. This protects against spam attacks, problems with code looping requests but above all will protect the account credit from being drained. An alert is automatically sent out when the surge protector is triggered and the service is disabled.
This setting is commonly triggered when you are load testing the service. While this is not a malicious act this spike in requests will knock out the accounts average usage. We recommend to turn off the surge protector while testing and turning it back on when the testing is completed.
If you know what triggered the surge, such testing or an unusually busy period, or have fixed the issue, and you'd like to activate your account again, please [get in touch](https://www.loqate.com/en-gb/contact/customer-support/#form) with our Support team.
This error occurs when the key submitted is malformed or incorrect. Keys should be in the format AA11-AA11-AA11-AA11 when submitted and should match one of the keys in your account. Please make sure that the key you are using in your request is correct.
Certain services within the ‘Management’ family of services require a ‘Management key’ to use. These can only be created by the support team at Loqate. If you believe you require a management key please [contact our Support team](https://www.loqate.com/en-gb/contact/customer-support/#form) directly and they would be more than happy to help.
## Payment Questions
The user-facing payment flow has not changed. Behind the scenes, we have moved to Stripe as our payment supplier to improve reliability and security. This also gives us better visibility into payment activity, helping us diagnose and resolve payment issues more quickly. If you need help with a specific checkout journey, please [get in touch](https://www.loqate.com/en-gb/contact/customer-support/#form) with our Support team.
To complete a payment, you need to accept the new Stripe terms. This ensures your purchase is processed against the latest applicable terms for the updated payment service. If you are unsure which terms apply to your account, please [get in touch](https://www.loqate.com/en-gb/contact/customer-support/#form) and we can confirm this for you.
You need to provide your company address when adding a card or making a purchase so we can complete billing and compliance checks. It also helps ensure invoices and account records are accurate and up to date. If you are not sure what address details to provide, please [contact our Support team](https://www.loqate.com/en-gb/contact/customer-support/#form).
If your account doesn't have enough credit to cover the full cost of a batch request, you'll receive an 'Account out of credit' or 'Not enough credit for request' error and no results will be returned. To run the batch, top up your credit to cover the full cost before resubmitting; see [Common errors](/api-reference/common-errors).
## Common Integration Questions
## Tag integrations
Yes, this is a great way to get the Loqate Tag working on your website quickly and easily.
If you are unfamiliar with Google Tag Manager, begin by reading [About Google Tag Manager](https://support.google.com/tagmanager/answer/2574305). To add the Loqate Tag to your container in Google Tag Manager:
* Click ‘Add a new tag’
* Select ‘Custom HTML Tag’
* Enter Loqate as the Tag name and paste the Loqate Tag code into the HTML field
* Select ‘Continue’ and then ‘Fire On’ > ‘All pages’ to ensure the Loqate Tag loads on all pages of your website.
* Click ‘Create Tag’ then ‘Publish’ at the top right corner.
Your Loqate Tag is now installed on your website and you are ready to continue setting up Loqate services, eg: Capture.
Yes, you will need to use a program to host the website locally, such as IIS (Windows) or Apache (Mac/Windows). You will need to create a new site in your hosting programme, and then map it to the file or folder containing the pages you want to set the Tag up on. In the site bindings set the port to 80, then run the website, the URL should look something like this: [http://localhost/](http://localhost/) (this is the URL you will need to enter during our Tag setup process).
There are two ways to add the Loqate Tag to your website:
* Add the Loqate Tag to your website using a Tag Manager such as Google Tag Manager
* Add the Loqate Tag directly into the HTML of every page of your website. This is the easiest method, especially if you do not already use a tag manager.
Firstly, check that we are looking at the right website - are there any typos in the website address that you entered? Secondly, did you paste the Loqate Tag code in the right place - save and re-upload your webpages to make sure. Finally, it’s possible your website is cached which means we can’t yet retrieve the updated files that contain the Loqate Tag - see the 'What can I do if my website is cached?' question below for help with this.
## General integrations
If you’re not setting up the Loqate Tag on a website, you can use the Loqate API to implement our services in any application.
If your website is not showing recent updates you made then it may need its cache cleared. If you host your own site then speak to your technical team for help. If you do not host your own site then you might need to contact the support team at your hosting provider, or inspect your admin tools for an option to clear the site cache. Sometimes the cache will clear automatically after an hour or so, it’s worth checking again later if you have this problem.
Your account details can be restricted to your specific URL in fact we recommend you do this. This means that even with code types where your details are visible, they are still safe and secure. Anyone attempting to use them from another site would have their requests rejected and you’d be alerted via email.
The 1001 ID Invalid error message indicates that you are passing the wrong type of ID into the Retrieve service. You should only pass an ID from the Find service where the Type was returned as "Address". Passing IDs of type "Postcode" will not result in a retrieve - instead, these should be passed back into the Find service as "Container" until an "Address" type is returned.
### Address API example
First, use the Find method, triggering a lookup after each user keystroke in a search box.
Example request: `https://api.addressy.com/Capture/Interactive/Find/1/json.ws?key=AA11-AA11-AA11-AA11&Text=wr2&Container=&Origin=&Limit=&Language=&Countries=`
Present the Text/Description portion of the response to the user, usually in a container that allows them to click on a desired result. When the user clicks an item, check the "Type" portion of the item:
* If the Type parameter is anything but "Address", perform another Find putting the Id into the Container parameter. Maintain the Container parameter until another click is made. Note the Type parameter will only be "Address" when it is a full address the user is selecting, otherwise they need to carry on narrowing down their search results by either typing more or clicking a further item from the results. Example subsequent Find: `https://api.addressy.com/Capture/Interactive/Find/1/json.ws?key=AA11-AA11-AA11-AA11&Text=wr2&Method=Match&Container=GB|RM|A|P-WR2-4AA&Origin=&Limit=&Language=&Countries=`
* If the Type parameter is "Address" then perform a Retrieve using the Id for that item from the response. Example Retrieve: `https://api.addressy.com/Capture/Interactive/Retrieve/1/json.ws?key=AA11-AA11-AA11-AA11&Id=GBR%7C52509479`
Yes, there are two available methods. Our Blocked IPs setting blocks specific IPs across all of your keys and services. The list of blocked IPs can be found under Menu > Security settings. Our IP Limiter blocks all IPs that are not on your valid IP list. Only the IPs on your valid IPs list can do lookups. The list of your valid IPs can be found under Menu > Your Services > Click on the Key and 'Limits'.
If you get a message saying a certain IP is blocked but this IP is not on your blacklist then that means IP Limit is enabled. 'Limit by IP' means you can restrict the service to specific IP addresses. If the blocked IP is not on the 'Limit by IP' list it can't use the service.
If the IP is valid, you can add it to the 'Limit by IP' list to enable access. You can find 'Limit by IP' under Menu > Your Services > Click on the specific Key and select 'Limits'.
## Contact us
In case you have any other questions, please send us an [email](mailto:LoqateSupport@gbgplc.com).
# Get Started with Loqate: API Integration Guide
Source: https://docs.loqate.com/loqate-basics/get-started
Set up your Loqate account, create an API key, and make your first API request. This guide covers API integration from account creation to testing.
## 1. Create a Loqate account
[Sign up for a Loqate account](https://account.loqate.com/register/). New accounts include a 45-day free trial.
## 2. Choose an integration method
You can integrate with Loqate using auto-generated code snippets placed in your website's `` tag or full API integrations.
This guide focuses on API integration. For all integration options, see the [Ways to Integrate page](https://docs.loqate.com/loqate-basics/ways-to-integrate).
## 3. Create an API key
All Loqate services require an API key for authentication.
For initial testing, create a generic API key. Follow the steps in [Create an API Key](https://docs.loqate.com/loqate-basics/create-an-api-key).
## 4. Make a test API call
Make a test call using your API key to verify it. Here's an example of an Address Capture Find call you can run in an API client or your browser.
```http theme={null}
https://api.addressy.com/Capture/Interactive/Find/v1.10/json3.ws?Key=AA11-AA11-AA11-AA11&Text=GBG wr53da
```
**Make sure you replace the placeholder key (AA11-AA11-AA11-AA11) with your own API key.**
The example above uses text search to find addresses and places. This specific call is looking for addresses containing `GBG` and the postcode `WR5 3DA`.
The response should be this:
```json theme={null}
{
"Items": [
{
"Id": "GB|RM|B|55943629",
"Type": "Address",
"Text": "G B G, Waterside, Basin Road",
"Highlight": "0-5;11-14,15-18",
"Description": "Worcester, WR5 3DA" }
]
}
```
## 5. Check your usage
Navigate to the **Reporting** page in your account to see usage summaries per key or across your account. This shows both charged and free requests and total costs.

It's recommended you regularly check usage on your keys to maintain visibility of how your services are being used. For full details, see the [Monitoring Account Usage page](https://docs.loqate.com/loqate-basics/monitoring-account-usage).
# Legacy Sign-In
Source: https://docs.loqate.com/loqate-basics/legacy-login
How to sign in to an unmigrated Loqate account using your account code and password during the migration period.
This page is relevant only while your account is still on the legacy authentication system. If your account has already been migrated, sign in at [https://auth.loqate.com/en/sign-in](https://auth.loqate.com/en/sign-in) with your email address. For migration information, see [Account Upgrade](/loqate-basics/account-migration).
## When to use legacy sign-in
Legacy sign-in at `https://auth.loqate.com/en/legacy-sign-in` is for accounts that have not yet been migrated to the new authentication system. You need it if you see the message "Some of your accounts use legacy login" on the Switch Organisation screen.
You do not need legacy sign-in if your account has been migrated. Migrated accounts use email and magic link only.
## Signing in
1. **Sign out of your current account.** On the Switch Organisation screen, select the **Go to legacy sign-in** button — you will be signed out automatically and redirected to the legacy sign-in page.
2. **Sign in with your account code or contact email.** The field label on the form reads "Account code or Contact email". Enter your account code (e.g. `ABCDE12345`) or the contact email associated with the account.
3. **Enter your password and select Sign in.** After a successful sign-in you will be taken to the account upgrade flow automatically.
## Finding your account code
Your account code appears in the top-right area of the Loqate account dashboard at `https://account.loqate.com`. It has the format `ABCDE12345` — five letters followed by five digits.
If you have multiple accounts, each has a distinct account code. You will need to sign in separately for each unmigrated account.
## Troubleshooting
### Invalid email or account code, or password
Check that the account code is entered exactly (no spaces, correct case). Check caps lock. If you have forgotten your password, select **Forgotten your password?** on the sign-in page — it links to `https://account.loqate.com/password`. Note that this password reset is for the legacy account password only, not for email-based sign-in.
### Account already migrated
When a migrated account code is submitted, the form shows "Your account has been migrated to email-based sign-in." with a "Sign in with email" link. This means your account has already been upgraded — select **Sign in with email** and use your email address to access it.
### Migration not completing
After signing in successfully, you should be taken to the account upgrade flow automatically. If the upgrade does not complete or you encounter an error on that page, contact the [support team](https://www.loqate.com/en-gb/contact/customer-support/).
## Migration timeline
When you sign in at [https://auth.loqate.com/en/legacy-sign-in](https://auth.loqate.com/en/legacy-sign-in), you will be asked to upgrade your account if it has not yet been migrated. Follow the on-screen instructions to complete the upgrade — see [Account Upgrade](/loqate-basics/account-migration) for full details.
Until your account is migrated, you can continue to access it using legacy sign-in as described above.
## After migration
Once your account is migrated, sign in at [https://auth.loqate.com/en/sign-in](https://auth.loqate.com/en/sign-in) using your email address. No password is required — you will receive a sign-in link by email.
You can invite additional users to your organisation from the **Your Team** section. For more information on managing your organisation, see [Managing Your Account](/loqate-basics/managing-account).
Frequently Asked Questions
Yes. The sign-in field accepts either your account code or the contact email address associated with the account. If your email is linked to multiple accounts, you will see a message asking you to sign in with your account code instead.
Sign in and complete the upgrade for one account, then return to the [legacy sign-in page](https://auth.loqate.com/en/legacy-sign-in) to sign in with the next account code. Each account must be migrated separately.
Contact our [support team](https://www.loqate.com/en-gb/contact/customer-support/) or reach out on [Slack](https://join.slack.com/t/loqate-workspace/shared_invite/zt-2xhkfmb38-3iIhtlRGO88k6dub4F4qzQ).
# List of Loqate Endpoints: All APIs by Service Category
Source: https://docs.loqate.com/loqate-basics/list-of-endpoints
Complete endpoint reference for Loqate APIs. Find endpoints for address capture, verification, email validation, phone validation, banking, and geocoding.
Here you can find a list of all current Loqate endpoints, along with brief descriptions of what each one allows you to do.
Please note that this list does not include any Legacy endpoints.
## Capture
Pass address information into these endpoints - partial addresses, postcodes, geolocation data etc. - and they will output address IDs and/or address information in return.
| Endpoint | Description |
| :---------- | :------------------------------------------------------------------------------------------------------------------------------- |
| Find | Returns one or more addresses or containers based upon the user's input (use the address IDs generated here to pass to Retrieve) |
| GeoLocation | Returns addresses within a specified radius (based on a latitude/longitude point) |
| Retrieve | Returns full address details based on an address ID |
| Utilities | Returns any addresses matching a specific utility code |
[See the Capture documentation](/api-reference/address-capture/apis)
## Verify
This endpoint provides our powerful address verification and cleanse service, including certified and enhanced datasets, geocoding and reverse geocoding, and transliteration.
| Endpoint | Description |
| :-------------------------- | :-------------------------------------------------------------------------------------- |
| International Batch Cleanse | Returns verified, cleansed address data in batches of up to 100 international addresses |
[See the Verify documentation](/api-reference/address-verify/apis)
## Store Finder
These endpoints work in combination to create a Store Finder tool, allowing you to combine precise location information for your organisation's stores and a customer's location, then determine the relationship between the two sets of information, and present the results in a visual fashion.
| Endpoint | Description |
| :--------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Create List | Creates a list of locations, including their co-ordinates and their IDs (plus additional relevant information) for use with a Store Finder |
| Delete List or Point | Deletes a list of locations or a particular location within a list |
| Update List or Point | Updates a list of locations or a particular location within a list |
| Get List | Gets a list of locations to see the details of that list and the locations within it |
| Global Geocoding | Takes an input of one or more address strings (or alternatively a postcode or locality) and returns latitude and longitudes for the given locations (can also be used for reverse geocoding) |
| Global Distance Finder | Takes an input of an origin location and one or more destination locations, and returns road-based distance and travel times for each of them |
| Map Tile | Takes an input of your Loqate key and returns a Signed URL that will allow you to visually represent the output from the Distance Finder API on a map |
[See the Store Finder documentation](/api-reference/store-finder/store-finder-api-landing)
## Email Validation
Use these endpoints to validate email addresses as they're entered using either our Tag install or API, or alternatively validate a batch of email addresses using our API.
| Endpoint | Description |
| :------------- | :-------------------------------------------------------- |
| Batch Validate | Synchronously validates up to 100 emails per request |
| Validate | Validates the existence of an individual email address |
| Bulk Validate | Asynchronously validates up to 100,000 emails per request |
[See the Email Validation documentation](/api-reference/email-validation/apis)
## Phone Validation
Use this endpoint to validate phone numbers as they're entered using either our Tag install or API.
| Endpoint | Description |
| :------- | :---------------------------------------------- |
| Validate | Verifies whether a phone number is valid or not |
[See the Phone Validation documentation](/api-reference/phone-validation/apis)
## Bank Validation
These endpoints allow you to query whether UK account number and sort code combinations are valid, or check IBANs for most European countries.
| Endpoint | Description |
| :--------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------- |
| Batch Validate | Validates the bank account/sort code for batches of UK bank accounts. Returns details of the holding branch, IBAN and correct BACS account details |
| RetrieveBySortcode | Returns details of any UK holding branch |
| Validate | Validates the bank account/sort code for individual UK bank accounts. Returns details of the holding branch, IBAN and correct BACS account details |
| International Validate | Validates whether the international bank account number for an international bank account is correct |
[See the Bank Validation documentation](/api-reference/bank-validation/apis)
## Geocode
These endpoints return direction and/or location information for international locations, including additional data from the Postzon database for UK addresses.
| Endpoint | Description |
| :---------------------------------- | :----------------------------------------------------------------------------------------- |
| Directions | Returns the directions between two points |
| Distance | Returns the distance between two points |
| International Geocode | Returns the WGS84 latitude/longitude data for a given location |
| International PositionToCountry | Returns a country based on WGS84 latitude/longitude data |
| International RetrieveNearestPlaces | Returns the nearest places of interest of a given category to a provided location |
| International ReverseGeocode | Returns the nearest address or location to given coordinates |
| UK Find | Returns locations based on the given input |
| UK Geocode | Returns the OS easting + northing along with WGS84 latitude/longitude for a given postcode |
| UK Retrieve | Returns the OS easting + northing along with WGS84 latitude/longitude for a given location |
| UK RetrieveNearestPlaces | Returns the nearest places of interest of a given category to a provided location |
| UK ReverseGeocode | Returns the nearest address or location to given coordinates |
| RetrieveByCoordinates | Returns the Postzon record nearest to given coordinates |
| RetrieveByPostcode | Returns the Postzon record for a given postcode |
| RetrieveByPostcodeOrPlace | Returns the Postzon record for a given postcode or place name |
| FindPlaceNames | Returns the names of places |
| RetrieveCoordinates | Returns the coordinates of a place found using FindPlaceNames |
[See the Geocode documentation](/api-reference/geocode/apis)
# Managing Your Account
Source: https://docs.loqate.com/loqate-basics/managing-account
Manage your account, from who receives key communication to who can access your Loqate Account.
This page and the functionality discussed assumes your account is using our updated login capability. If you have not yet migrated over and would like to know more, please see [here](https://docs.loqate.com/loqate-basics/account-migration).
Unsure if you have migrated yet? See our FAQs at the bottom of this page.
## Terminology
When a new Loqate **Account** is created (or an existing one is migrated), a corresponding **Organisation** is automatically created. The person who creates or migrates the *account* becomes the first **user** in that *Organisation* and is automatically given the **Admin** role.
An *Organisation* groups *users* together and is simply a shared space that allows a team of people to access the same Loqate *Account*. All *users* in an *Organisation* can sign into the *Account* using their own email address.
In addition to *users*, an *account* also has **contacts** which we use to send important account and business communication.
## Managing Account Details
Keeping your account details accurate and up to date helps ensure you can access your services smoothly and securely. Up‑to‑date information also helps you receive important notifications and makes it easier to recover your account in the event of access issues.
You can manage your account details from within the "[Your Account"](https://account.loqate.com/account#/Account/) area of the account section allowing you to:
* **Add, edit or remove Contacts** and update email preferences : If we need to notify you about important changes, we will email the primary contact on the account. Balance, Security and Billing emails will be sent to all contacts who have these preferences enabled.
* **Update company details** : Let us know the registered address of your company including VAT number if applicable.
* **Add or update GDPR settings** : Let us know who is responsible for privacy in your organisation.
## Managing your Organisation
Controlling access to your online Loqate Account is achieved through our Multi-User functionality.
### Organisation Roles
There are two types of roles in the Organisation, an Admin and a Member. Admins can invite or remove users. Members can access the platform but cannot manage users. All other functionality is the same.
### Accessing the Organisation Manager
Once logged into the account, users can be managed by using the drop-down at the top right of the account section and selecting the **Your Team** option. Should you be asked to re-log in, just enter your email, no password is required.
### Managing Users
From the Organisation Menu a user with the Admin role can
* **Invite new users** (Members screen): Invited users will receive an invitation to join the Organisation, once that invite has been accepted, they will be able to log in with their own email address.
* **Change users' roles** (Members screen): By default, when invited, users are given the Member role unless otherwise set.
* **Remove existing users** (Members screen): Removing users will prevent them from accessing the account, however if they are still listed as a Contact on the account then they may still receive account communication, such as billing information or security notices. Contacts can be deleted from the main account area.
* **Manage the Organisation** (Organisation screen): From here you can choose to leave the organisation yourself or rename the organisation in our authentication system.
## Multiple Organisations
Thanks to the multiple users in one organisation functionality, you can have multiple organisations under one account. This is useful if you have different teams that need access to the same account but want to manage their own users separately.
That means, if you are part of several organisations, when you log in with your email address, we will show a screen where you can choose the organisation you want to use on those accounts.
Because you can have different roles in different organisations (for example, Member, Admin, or Contact), the organisation switch screen will list each organisation so you can select the one you want to work with.
### All Organisations
This screen shows all the organisations that you belong to being a contact, regardless of if they have been migrated before.
The view "All" is the default view but you should also see "Migrated" and "Non migrated" that show the different organisations and their migration status.
The top banner has a link to our documentation and support team if you require more information.
The "Sign Out" button will only be visable if you are a contact of an organisation that has yet to be migrated.
#### Icons and tags on the organisations
You have three different icons and tags that indicate the status of each organisation:
* Green Icon: This should show an inward arrow that says this account has been migrated and is ready for use because you have been added as a user.
* Blue Icon: This should show a user symbol that indicates you are "Awaiting Access". This is because you are listed as a contact for this migrated organisation but have not yet been added as a user
* Yellow Icon: This should show two arrows pointing outwards and indicates you are "Not migrated". This means this organisation has not yet been migrated.
### Migrated organisation and user added
If the organisation or organisations have been migrated and you have been added as a user, you should see the following:
In the example above, you can see one organisation has been properly migrated where the user is an active member and another organisation that has been migrated with you as a contact but you have yet to be added as a user. You will not be able to access the 2nd account until you have been added as a user.
### Migrated Organisation where you are a contact but not a user
This can happen when organisations have been migrated, you are the primary contact but have not been added as a user of that organisation.
Because of this, you won't be able to log in to that organisation, but you will be able to see it on the switch organisation screen. If you try to access that organisation, you will see a message asking you to contact your administrator to add you.
In this case, you will see an image like the one above.
### Non-migrated organisations
Organisations that haven't been migrated yet will show.
In this case, you will see the above login form with a message asking you to sign out in order to be able to migrate that organisation. To sign in to an unmigrated account, follow the instructions on the [Legacy Sign-In](/loqate-basics/legacy-login) page.
Frequently Asked Questions
A **User** is someone who can log in to your Loqate Account. A **Contact** is simply an email address we use to send important account‑related information.
Within the "[Your Account"](https://account.loqate.com/account#/Account/) area of the account section, you can add *contacts* and we use these details for notifications such as balance alerts, security alerts and invoices.
*Users*, on the other hand, have login access to your Loqate Account and are managed in the **Organisation** area. You can find this by clicking your company name in the top‑right corner of the account screen and selecting **“Your Team”**.
You can log in [here](https://auth.loqate.com/en/sign-in) using your email address as long as you are a user in the Organisation for the account.
**Are you trying to log in with an Account Code?**
Historically, customers have been able to log into their account using an Account Code and Password. Once an account is using our updated login capability, the ability to log in with an Account Code and Password is disabled. You must log in using your **email address**.
**Have you been added to the Organisation?**
If your email address hasn’t been invited to the Organisation, you won’t be able to log in.\
Please contact the person who created, or converted the account and ask them to confirm that you appear in the **Organisation** area (found by clicking your company name in the top‑right corner of the account screen and selecting **"Your Team"**).
**Are you trying to log in with the email address of a "Contact" on your Account?**
See the FAQ titled **"What is the difference between a Contact and a User?"** above.
If your account has not yet been migrated and you need to sign in using an account code and password, see [Legacy Sign-In](/loqate-basics/legacy-login).
If you are still having problems logging in, please contact our [support team](https://www.loqate.com/en-gb/contact/customer-support/) who will be happy to help.
**Already logged in?** If you logged in with your email address and received a "magic link" or code to log in, then your account is using our updated login capability.
**Not logged in yet?** If you try to log in using your Account Code and the password that previously worked, and are redirected to a message stating that **“Your account security has been upgraded and you now need to authenticate via email.”**, then your account has been migrated to our updated login capability.
More information about account migration to the updated Login capability can be found [here](https://docs.loqate.com/loqate-basics/account-migration#why-cant-i-log-in)
## Payment Questions
The user-facing payment flow has not changed. Behind the scenes, we have moved to Stripe as our payment supplier to improve reliability and security. This also gives us better visibility into payment activity, helping us diagnose and resolve payment issues more quickly. If you need help with a specific checkout journey, please [get in touch](https://www.loqate.com/en-gb/contact/customer-support/#form) with our Support team.
To complete a payment, you need to accept the new Stripe terms. This ensures your purchase is processed against the latest applicable terms for the updated payment service. If you are unsure which terms apply to your account, please [get in touch](https://www.loqate.com/en-gb/contact/customer-support/#form) and we can confirm this for you.
You need to provide your company address when adding a card or making a purchase so we can complete billing and compliance checks. It also helps ensure invoices and account records are accurate and up to date. If you are not sure what address details to provide, please [contact our Support team](https://www.loqate.com/en-gb/contact/customer-support/#form).
If your account doesn't have enough credit to cover the full cost of a batch request, you'll receive an 'Account out of credit' or 'Not enough credit for request' error and no results will be returned. To run the batch, top up your credit to cover the full cost before resubmitting; see [Common errors](/api-reference/common-errors).
# Loqate Usage Monitoring
Source: https://docs.loqate.com/loqate-basics/monitoring-account-usage
Track API usage and costs across all Loqate services with detailed reporting by service, key, and time period.
The Loqate Account Section provides a full suite of usage reports in the Reporting page, which you can find
[here](https://account.loqate.com/account#/NewReporting/).
In this article the reporting functionality and how best to keep track of your usage is explained.
Regularly checking the usage for each API key - i.e. how many requests are being made and what the running costs are - is recommended in order to maintain visibility of how your services are being used.
Please note that the Charged Requests field in two of the following reports represents the number of API calls that have been made,
not the volume of transactions being processed in a batch. For **Capture** or **Bulk Email Validation**, this figure shows the number of addresses or email addresses included in a call. With **Verify's** batch capability, be aware that this figure doesn't represent the number of addresses verified in a batch request.
## Main report
The first report you'll see on this page shows the total number and total cost of charged requests over a given time period.
You can run this report using various date ranges - note that the date range you select here will apply to all of the other reports on this page too.
Here's what it looks like run for three days:
And here's a month - as you can see the list of data underneath the chart increases:
## Usage Summary by Service
This report breaks down usage by product, based on the data range selected above.
It defaults to All keys, but you can select a specific key if you only want to see the usage for services using that key.
The **Product Family** column shows the overall product grouping, while the **Service** column shows the specific endpoint.
So for example, both **Find** and **Retrieve** calls will be listed as 'Addressing\_Capture' under **Product Family**,
but you'll see the separate endpoints under **Service**.
## Summary Usage by Key
This report breaks down usage for each of your API keys. If you hover the mouse over each key though, you can see which product family it's been used for.
### A note on terminology
Please note that the **Charged Requests** field in these summaries represents the number of API calls that have been made,
not the volume of transactions being processed in a batch.
For certain products (such as **Capture** and **Bulk Email Validation**) you will see a number of records in brackets, like this:
This represents the fact that one API call might contain multiple addresses or emails, in which case it will be shown as a single request with multiple records.
If you see any usage which doesn't conform with what you'd expect, please don't hesitate to contact the [Loqate Support team](https://www.loqate.com/en-gb/contact/customer-support/).
# Slack Community
Source: https://docs.loqate.com/loqate-basics/slack
# Support
Source: https://docs.loqate.com/loqate-basics/support
# Ways to Integrate
Source: https://docs.loqate.com/loqate-basics/ways-to-integrate
Loqate offers three main integration options:
* **Using Tag:** Available for Address Capture, Email Verification and Phone Verification
* **Using APIs:** Available for all Loqate products and services
* **Integrations by Platform:** Available for Address Capture, Verify, Email Verification and Phone Verification via integrations with tools like Shopify, Adobe Commerce, and Microsoft Dynamics 365
The main focus of this article is on Tag and API integrations, although information about third-party integrations is also included, with a link to the specific documentation.
These options are not mutually exclusive, so you can use more than one in conjunction if you want.
Regardless of which option(s) you choose, you can make changes in the Account Section for security, customisation and certain features.
# Use cases
Here are a few examples of possible use cases, and which of the Tag or API integration option might be best for each:
| Business Type | Specifics | Recommended option |
| :----------------------- | :---------------------------------------- | :----------------- |
| Financial business | Strictly regulated | APIs |
| Large ecommerce business | Requires considerable customisation | APIs |
| Very small business | Uses simple web forms | Tag |
| Small business | Uses cloud-based tools for creating forms | Tag or APIs |
## Tag Integrations
The simplest way of setting up Address Verification, Email Validation and Phone Validation is by using the Tag method, which uses automatically-generated code snippets that you can insert into your website to set these services up.
This method is designed for simple webforms, allowing you to set up standard configurations via your Loqate account.
**Pros:**
* **Speed:** you can get started quickly and easily
* **Simplicity:** there's no need for technical know-how, as the functionality comes from the JavaScript solution and CSS
**Cons:**
* **Customisation:** unlike API integrations, you don't have as much control over how your integration works as it will always be based off the JavaScript and CSS
* **Security:** adding JavaScript to your website, while an effective way of adding new functionality, does come with some security considerations, and as such may not be appropriate for all circumstances. See the [API Security](/loqate-basics/api-security) article for more information
Check out the [Tag Setup Guide](/our-services/tag-setup-guide) for simple instructions that walk you through how to get set up with Tag integrations.
From an additional security perspective, consider using the Limits functionality to restrict your integration by IP address, service and/or URL. See the [API Security](/loqate-basics/api-security) article for more details.
## API Integrations
All Loqate products can be integrated using the APIs, which are also available for Address Verification, Email Verification and Phone Verification for more flexible integrations.
**Pros:**
* **Control:** you're not constrained by any existing integrations or ways of working, and you don't need to rely on the preset JavaScript or CSS
* **Customisation:** you can shape your customer journey however you see fit
**Cons:**
* **Complexity:** API integrations require technical knowledge and resources
* **Speed:** it takes time to implement and test API integrations
Check out the [API documentation](/api-reference/introduction) for details of all of the Loqate APIs.
You can still take advantage of all of the security functionality available in the Account Section - see the [API Security](/loqate-basics/api-security) article for more details.
## Integrations by Platform
As well as the option of creating your own integration using the Tag and/or API methods, there's also a range of integrations which allow you to access Address Capture, Verify, Email Validation and Phone Validation within various tools. Current integrations include:
* [Adobe Commerce](/integrations/adobe-commerce)
* [BigCommerce](/integrations/bigcommerce)
* [commercetools](/integrations/commercetools)
* [Microsoft Dynamics 365](/integrations/microsoft-dynamics-365)
* [Reapit](/integrations/reapit)
* [Salesforce Commerce Cloud](/integrations/salesforce-commerce-cloud)
* [Salesforce CRM](/integrations/salesforce-crm)
* [Shopify Plus](/integrations/shopify-plus-overview)
If you already use any of these tools, you can use the integrations to quickly and easily add Loqate functionality to your site.
Check out the [Integrations documentation](/integrations/all-integrations) for details of how to get up and running.
# Address Capture Quick Start Guide
Source: https://docs.loqate.com/our-services/address-capture/address-capture-quick-start
Start using Address Capture in three steps. Set up your API key, search for addresses with Find, and retrieve full details with Retrieve.
**Address Capture provides real-time address search and verification as users type, reducing errors and improving data quality.**
***
## Coverage
* **Global:** Address data for over 250 countries and territories
* **UK Premium:** AddressBase Premium data with Geolocation support
## Available Endpoints
Address Capture provides three API endpoints:
### Core Endpoints
* [**Find**](/api-reference/address-capture/find) - Search for addresses and places as users type
* [**Retrieve**](/api-reference/address-capture/retrieve) - Get full address details based on the selected ID
### Additional Endpoint
* [**Geolocation**](/api-reference/address-capture/geolocation) - Find addresses within a radius of latitude/longitude coordinates (UK AddressBase Premium only)
## Getting Started
1. [Create an API key](https://docs.loqate.com/loqate-basics/create-an-api-key) if you don't have one
2. Make a **Find** request to search for addresses as the user types
3. Make a **Retrieve** request to get the full address when they select one
Here's a simple example request for the **Find** endpoint:
```shell cURL theme={null}
curl --request GET \
--url https://api.addressy.com/Capture/Interactive/Find/v1.20/json6.ws
```
```python Python theme={null}
import requests
url = "https://api.addressy.com/Capture/Interactive/Find/v1.20/json6.ws"
response = requests.get(url)
print(response.json())
```
```javascript JavaScript theme={null}
const url = 'https://api.addressy.com/Capture/Interactive/Find/v1.20/json6.ws';
const options = {method: 'GET', body: undefined};
try {
const response = await fetch(url, options);
const data = await response.json();
console.log(data);
} catch (error) {
console.error(error);
}
```
```php PHP theme={null}
"https://api.addressy.com/Capture/Interactive/Find/v1.20/json6.ws",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
```
```go Go theme={null}
package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.addressy.com/Capture/Interactive/Find/v1.20/json6.ws"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```java Java theme={null}
HttpResponse response = Unirest.get("https://api.addressy.com/Capture/Interactive/Find/v1.20/json6.ws")
.asString();
```
```ruby Ruby theme={null}
require 'uri'
require 'net/http'
url = URI("https://api.addressy.com/Capture/Interactive/Find/v1.20/json6.ws")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body
```
Here's a simple example request for the **Retrieve** endpoint:
```shell cURL theme={null}
curl --request GET \
--url https://api.addressy.com/Capture/Interactive/Retrieve/v1.30/json6.ws
```
```python Python theme={null}
import requests
url = "https://api.addressy.com/Capture/Interactive/Retrieve/v1.30/json6.ws"
response = requests.get(url)
print(response.json())
```
```javascript JavaScript theme={null}
const url = 'https://api.addressy.com/Capture/Interactive/Retrieve/v1.30/json6.ws';
const options = {method: 'GET', body: undefined};
try {
const response = await fetch(url, options);
const data = await response.json();
console.log(data);
} catch (error) {
console.error(error);
}
```
```php PHP theme={null}
"https://api.addressy.com/Capture/Interactive/Retrieve/v1.30/json6.ws",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
```
```go Go theme={null}
package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.addressy.com/Capture/Interactive/Retrieve/v1.30/json6.ws"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```java Java theme={null}
HttpResponse response = Unirest.get("https://api.addressy.com/Capture/Interactive/Retrieve/v1.30/json6.ws")
.asString();
```
```ruby Ruby theme={null}
require 'uri'
require 'net/http'
url = URI("https://api.addressy.com/Capture/Interactive/Retrieve/v1.30/json6.ws")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body
```
## What Address Capture Returns
A typical Address Capture workflow:
* **Find** returns a list of matching addresses based on search text
* **Retrieve** returns the complete formatted address in multiple formats
### Find Response
Response should be in the following format:
```json theme={null}
{
"Items": [
{
"Id": "GB|RM|B|55605138|ENG",
"Type": "Address",
"Text": "G B G Evermore 128 Queen Victoria Street",
"Highlight": "0-1,2-3,4-5",
"Description": "London EC4V 4BJ"
}
]
}
```
### Retrieve Response
```json theme={null}
{
"Items": [
{
"Id": "GB|RM|B|55605138|ENG",
"DomesticId": "55605138",
"Language": "ENG",
"LanguageAlternatives": "",
"Department": "",
"Company": "G B G",
"SubBuilding": "",
"BuildingNumber": "128",
"BuildingName": "Evermore",
"SecondaryStreet": "",
"Street": "Queen Victoria Street",
"Block": "",
"Neighbourhood": "",
"District": "",
"City": "London",
"Line1": "G B G Evermore",
"Line2": "128 Queen Victoria Street",
"Line3": "",
"Line4": "",
"Line5": "",
"AdminAreaName": "",
"AdminAreaCode": "",
"Province": "",
"ProvinceName": "",
"ProvinceCode": "",
"PostalCode": "EC4V 4BJ",
"CountryName": "United Kingdom",
"CountryIso2": "GB",
"CountryIso3": "GBR",
"CountryIsoNumber": "826",
"SortingNumber1": "",
"SortingNumber2": "",
"Barcode": "",
"POBoxNumber": "",
"Label": "G B G Evermore\n128 Queen Victoria Street\nLondon\nEC4V 4BJ\nUnited Kingdom",
"Type": "Commercial",
"DataLevel": "Premise",
"Field1": "",
"Field2": "",
"Field3": "",
"Field4": "",
"Field5": "",
"Field6": "",
"Field7": "",
"Field8": "",
"Field9": "",
"Field10": "",
"Field11": "",
"Field12": "",
"Field13": "",
"Field14": "",
"Field15": "",
"Field16": "",
"Field17": "",
"Field18": "",
"Field19": "",
"Field20": ""
}
]
}
```
And you can use this information below to interpret the response fields:
### Search Results
| Field | Type | Description |
| ------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Id` | string | Unique identifier for the address or container (for further results). Can change over time |
| `Type` | string | Type of result: Address, Container, Postcode, Street, BuildingName, or Building. If Type is Address, pass Id to Retrieve. Otherwise, pass Id as Container to another Find request |
| `Text` | string | First half of the address displayed to the user |
| `Highlight` | string | Number ranges showing which characters match the search term. Use to highlight matching text in bold. Empty if Container Id included in request |
| `Description` | string | Second half of the address, including address count for Containers |
### Address Label Format
| Field | Type | Description |
| ------- | ------ | -------------------------------------------------------------------------------------------- |
| `Label` | string | Complete formatted address with line breaks (\n). Ideal for display or printing on envelopes |
### Address Lines Format (Recommended)
| Field | Type | Description |
| ------------ | ------ | -------------------------------------------------------------- |
| `Company` | string | Company name |
| `Line1` | string | First line of formatted address |
| `Line2` | string | Second line of formatted address |
| `Line3` | string | Third line of formatted address |
| `Line4` | string | Fourth line of formatted address |
| `Line5` | string | Fifth line of formatted address |
| `City` | string | Town or city name |
| `Province` | string | Either ProvinceName or ProvinceCode based on country standards |
| `PostalCode` | string | Full postal code (Postcode, ZIP Code, etc.) |
### Address Elements Format
| Field | Type | Description |
| ----------------- | ------ | ---------------------------------------------- |
| `Department` | string | Department name for business addresses |
| `SubBuilding` | string | Sub-building identifier (Flat 4, Unit 2, etc.) |
| `BuildingNumber` | string | House or building number |
| `BuildingName` | string | Building name if applicable |
| `SecondaryStreet` | string | Secondary thoroughfare name |
| `Street` | string | Main thoroughfare name |
| `Block` | string | Block details |
| `Neighbourhood` | string | Neighbourhood name |
| `District` | string | District name |
### Geographic and Administrative
| Field | Type | Description |
| ------------------ | ------ | ---------------------------------------------------- |
| `AdminAreaName` | string | Administrative area name (e.g., county council) |
| `AdminAreaCode` | string | Administrative area code |
| `ProvinceName` | string | Largest administrative division name (state, county) |
| `ProvinceCode` | string | Administrative division code |
| `CountryName` | string | Full country name (ISO 3166-1) |
| `CountryIso2` | string | Two-character ISO country code |
| `CountryIso3` | string | Three-character ISO country code |
| `CountryIsoNumber` | string | ISO numeric country code |
### Additional Fields
| Field | Type | Description |
| -------------------- | ------ | --------------------------------------------------------------------------------- |
| `Id` | string | Unique address identifier |
| `DomesticId` | string | Reference number in source dataset (e.g., UDPRN) |
| `Language` | string | Three-letter language code |
| `Type` | string | Address type: Residential, Commercial, or Unknown (available in select countries) |
| `DataLevel` | string | Data precision level: Unknown, Premise, RangedPremise, Street, or City |
| `POBoxNumber` | string | PO Box number if applicable |
| `Barcode` | string | Barcode for bulk mailing schemes |
| `Field1` - `Field20` | string | Custom fields when using Field1Format - Field20Format parameters |
**Note:** Use Field1Format through Field20Format request parameters to return custom data (e.g., latitude, longitude) in these fields.
When an error occurs, the API returns an error response with the following structure:
| Field | Type | Description |
| ------------- | ------ | ---------------------------- |
| `Error` | string | The error ID |
| `Description` | string | A description of the error |
| `Cause` | string | The cause of the error |
| `Resolution` | string | Actions to resolve the error |
### Common Error Codes
| Status Code | Meaning | Common Causes |
| ----------- | --------------------- | ------------------------------------------------------------------------- |
| **400** | Bad Request | Invalid parameters, malformed request, missing required fields |
| **401** | Unauthorized | Invalid or missing API key |
| **403** | Forbidden | API key doesn't have permission for this service, or daily limit exceeded |
| **500** | Internal Server Error | Server-side issue, temporary service disruption |
**Tip:** Check the `Resolution` field for specific steps to fix the error. For more details on error responses, see [Find](/api-reference/address-capture/find) in API documentation.
**Note:** Address Capture provides three response formats: Label (single string), Lines (recommended for forms), and Elements (individual components). Use one format consistently to avoid duplication or missing data.
## Integration Methods
Beyond direct API integration, Address Capture can be integrated using:
* **Tag:** Automatically-generated code snippets for your website forms - [Tag Setup Guide](/our-services/tag-setup-guide)
* **SDK:** Pre-built SDK for quick custom integration - [Capture SDK](/our-services/address-capture/sdk)
* **Pre-built integrations:** Ready-made integrations for Adobe Commerce, Shopify Plus, and more - [All Integrations](/integrations/all-integrations)
See the [Ways to Integrate](/loqate-basics/ways-to-integrate) page for guidance on choosing the best method.
## Try Address Capture
Test Address Capture using the [Find Playground](/api-reference/address-capture/find?playground=open) to make your first request.
## FAQ
The best method depends on your technical requirements and resources. Use Tags for quick website integration, the SDK for custom web applications, direct APIs for full control, or pre-built integrations for supported platforms. See the [Ways to Integrate](/loqate-basics/ways-to-integrate) page for detailed guidance.
Address Capture provides three formats: **Label** (single formatted string), **Lines** (recommended for multi-line forms), and **Elements** (individual address components). Choose one format based on your form structure. The Lines format works best for most forms with separate fields for company, address lines, city, and postcode. Do not mix formats to avoid duplication or missing data. See the [Retrieve API documentation](/api-reference/address-capture/retrieve) for all available fields.
Consider performance, complexity, and security when deciding. Client-side calls provide faster user experience but expose your API key. Server-side calls are more secure but add latency. See the [API Security](/loqate-basics/api-security) page for detailed guidance on integration options and security best practices.
Yes. Use the `field1format={Latitude}` and `field2format={Longitude}` parameters in your Retrieve request to return coordinates in Field1 and Field2. Coordinates are returned where available in the dataset. For Tag integrations, configure these parameters in the mappings wizard. See the [Retrieve API documentation](/api-reference/address-capture/retrieve) for details on custom field formatting.
# Address Capture API Endpoints
Source: https://docs.loqate.com/our-services/address-capture/apis
Three Address Capture endpoints: Find searches for addresses as users type, Retrieve returns formatted details, Geolocation uses coordinates.
Address Capture consists of two main API requests:
* A **Find** request is used to narrow down a possible list of addresses
* A **Retrieve** request is used to retrieve a fully formatted address
A typical address search is made up of a series of Find requests, followed by a Retrieve based on the selected address id.
Check out our API Quickstart Guide to make your first Address Capture request.
Also available for customers using AddressBase Premium data for UK addresses is **Geolocation**, which takes latitude and longitude coordinates and returns a list of addresses that are within a specified radius. This must be followed by a Retrieve to obtain a fully formatted address.
Choose a service below to find out how to use each request.
Uses a text search to find addresses and places.
Returns the full address details based on the Id.
Takes latitude/longitude coordinates and returns a list of addresses within a specified radius
# Address Capture Implementation Guide
Source: https://docs.loqate.com/our-services/address-capture/implementation-guide
Add real-time address autocomplete to your website with copy-paste code examples
**Reduce address entry errors and improve data quality with real-time address autocomplete as users type.**
## Who Should Use This Guide
**For:** Business owners and developers integrating address autocomplete without complex setup.
**You'll need:** A Loqate API key and basic HTML knowledge.
**Not covered:** Tag-based integrations ([see Tag Setup](/our-services/tag-setup-guide)) or pre-built platform integrations ([see Integrations](/integrations/all-integrations)).
## What You'll Build
An address autocomplete form that:
* Shows address suggestions as users type
* Fills in complete address details when selected
* Works with addresses in over 250 countries
* Provides formatted address lines for easy form population
## Quick Start
To set up Address Capture, you'll need an API key. Find out how to get yours [here](/loqate-basics/create-an-api-key/).
### Choose Your Approach
**Use case:** Testing the API or adding to a static page
A self-contained HTML file you can copy and use immediately.
Jump to [standalone HTML example](#standalone-html-example)
**Use case:** Add autocomplete to your current checkout or registration forms
Step-by-step guide to add autocomplete code to forms you already have.
Jump to [integration example](#integration-example)
**Using Shopify or WordPress?** Check [pre-built integrations](/integrations/all-integrations).
### Add Your Key
Replace `YOUR_API_KEY` in the code with your actual Loqate API key.
### Test
1. Open your page
2. Start typing an address like "10 Downing"
3. Select from the suggestions
4. Complete address populates automatically
Address Capture supports over 250 countries and territories. Use the Countries parameter to restrict results to specific countries.
***
## Sample Project: Checkout Form Integration
This walkthrough shows how to add address autocomplete to a checkout form. Follow along to see a basic form transform into an intelligent address capture form.
This is a detailed walkthrough. If you just want working code, skip to [Integration Example](#integration-example) or [Standalone HTML Example](#standalone-html-example).
### Before: Manual Address Entry
A checkout form with manual address entry:
**This form works, but users must type complete addresses manually.** Let's add autocomplete.
***
## How Address Capture Works
Address Capture uses a two-step process:
### 1. Find Step
**What it does:** Searches for addresses as users type.
**When to use:** On every keystroke or with debouncing (recommended).
**What you get:** A list of matching addresses and containers (groups of addresses).
**API endpoint:** `https://api.addressy.com/Capture/Interactive/Find/v1.10/json6.ws`
**Key parameters:**
* `Text` - The search term (what the user typed)
* `Container` - Optional ID for drilling down into results
* `Countries` - Optional filter (e.g., "GBR" for UK only)
### 2. Retrieve Step
**What it does:** Gets the complete address details.
**When to use:** When a user selects an address from the suggestions.
**What you get:** Full address in multiple formats (lines, elements, label).
**API endpoint:** `https://api.addressy.com/Capture/Interactive/Retrieve/v1.00/json6.ws`
**Key parameter:**
* `Id` - The unique address identifier from Find results
### How They Work Together
```
User types "10 Dow"
↓
Find API returns suggestions
↓
User selects "10 Downing Street"
↓
Retrieve API returns complete address
↓
Form fields populate automatically
```
***
## Standalone HTML Example
A minimal address autocomplete form for quick testing:
**Perfect for:**
* Quick API testing
* Learning how address autocomplete works
* Simple integrations without checkout flows
**To use:**
1. Copy the code
2. Replace `YOUR_API_KEY`
3. Save and test with different addresses
This example searches all countries by default. Add a Countries parameter to restrict results.
## Code on GitHub
If you'd like to browse the code snippets in this implementation guide or clone them, visit the repository on [GitHub](https://github.com/loqate/javascript-docs-sample/tree/main/address-capture).
## Integration Example
Here's the checkout form with full address autocomplete integrated:
**To use this code:**
1. Copy the code
2. Replace `YOUR_API_KEY` with your actual Loqate API key
3. Save as an HTML file
4. Open in a browser to test
5. Customize styling to match your brand
**Key features in this example:**
* Real-time address suggestions as users type
* Debounced API calls to reduce requests
* Automatic form population on selection
* Support for multiple countries
* Clean, production-ready code structure
This example uses debouncing (300ms delay) to reduce API calls while users type. Adjust the delay based on your needs.
***
## Integration Tips
### Adding to Your Existing Forms
To add address autocomplete to your current forms:
1. **Add the autocomplete functions** from the integration example to your page's `
```
**NOTE:** minified versions of these files are available. To use them, update the above snippets with .min before the file type (i.e. .../address-4.05.min.css and .../address-4.05.min.js).
## Mapping your fields
The address capture control needs to know which elements of the address should be put into each of your fields. It also needs to know which fields should be used for searching and which field (if any) contains the country. This information is provided in a standard format, which is an array of objects that have an **element**, **field** and optional **mode** property.
```javascript theme={null}
var fields = [
// Search field - triggers autocomplete when user types
{ element: "search", field: "" },
// Company - preserves existing value if already populated by user
{ element: "company", field: "Company", mode: pca.fieldMode.DEFAULT | pca.fieldMode.PRESERVE },
// Address lines - Line1 uses default behavior (SEARCH + POPULATE)
{ element: "line1", field: "Line1" },
// Line2 and subsequent fields only populate, don't trigger search
{ element: "line2", field: "Line2", mode: pca.fieldMode.POPULATE },
{ element: "city", field: "City", mode: pca.fieldMode.POPULATE },
{ element: "state", field: "Province", mode: pca.fieldMode.POPULATE },
// Postal code field
{ element: "postcode", field: "PostalCode" },
// Country field - displays country list on focus and sets search context
{ element: "country", field: "CountryName", mode: pca.fieldMode.COUNTRY }
];
```
### Field Configuration Properties
* **element**: The id or name attribute of your field. Accepts partial id match (e.g., "\_line1" matches "frm1\_line1") or JavaScript regex for complex matching.
* **field**: The name of the address element for this field. See [Capture Interactive Retrieve](#security) for available fields. Also accepts format strings (detailed in next section).
* **mode**: Controls field behavior. Default is **SEARCH** and **POPULATE**. Modes are declared in **pca.fieldMode** and can be combined using bitwise OR (|):
* **SEARCH**: Enables autocomplete searching from the field
* **POPULATE**: Sets the field value based on selected address
* **COUNTRY**: Displays country list on field select and reads field value to set search country
* **PRESERVE**: Prevents overwriting fields already populated by user (useful for company name)
## Formatting fields
To define complex or custom field values, the control makes use of template strings. The template strings work by replacing field values from the selected address, based on field names which are enclosed in curly brackets, for example `{PostalCode}`.
Any regular text or HTML can be included in the template strings around the field values, such as `{Line1}, {Line2}`.
Conditional formatting can be added by enclosing the field, and any additional text which is conditional on the field having a value, in a second set of curly brackets. If the template string was `{Line1}{, {Line2}}` then the comma would not appear unless the selected address had a second address line.
Finally, field values will always appear in title case, but can easily be capitalised by adding an exclamation mark (!) at the end of the field name, like this `{City!}`.
## Setting options
The second parameter that is required by the address control is a configuration object. This is used to set options and customise how the control behaves. The only required option is the API key that you will be using to access the web services, and is defined by creating an object literal in JavaScript.
```json theme={null}
{ key: "AA11-AA11-AA11-AA11" }
```
Further options can be set by adding more information to the configuration object. To create a control that was limited to the United States and Canada, but set the country based upon the users IP address, you would define the following object:
```json theme={null}
{key: "AA11-AA11-AA11-AA11", countries: { codesList:"USA,CAN"}, setCountryByIP: false}
```
## Countries
Capture+ is designed to be a truly international address verification and standardisation solution, and will by default allow you to search through all of the [countries that are covered](https://www.loqate.com/en-gb/address-verification/).
However, you can limit the countries that Capture+ will search by adding search settings into your options object.
For example, to create a control that was limited to the United States and Canada, but set the country based upon the users IP address, you would define the following object:
```json theme={null}
{key: "AA11-AA11-AA11-AA11", countries: { codesList:"USA,CAN"}, setCountryByIP: false}
```
## Geolocation options (Available only for UK addresses)
Loqate's address capture also supports address lookup based on your end user's current location.
In order to access this additional functionality, you will have to add the following to your options object:
`GeoLocationEnabled`: true, `GeoLocationRadius`: 50, `GeoLocationMaxItems`: 10
These attributes are defined as follows:
* `GeoLocationEnabled`: Boolean to determine if the Geolocation functionality is active
* `GeoLocationRadius`: Integer to determine the radius of the requested search in metres
* `GeoLocationMaxItems`: The number of results to display in the dropdown
You also need your site to run under https to enable this functionality.
This will add an additional item to the address capture bar, allowing your user to search for their address based on their current location.
An example of the complete options object is as follows:
```json theme={null}
{ key: "AA11-AA11-AA11-AA11", search: { countries: "GBR" }, setCountryByIP: true, GeoLocationEnabled : true, GeoLocationRadius : 50, GeoLocationMaxItems : 10}
```
Note: "GBR" is the ISO 3166-1 alpha-3 country code for the United Kingdom. Geolocation is currently available only for UK addresses, so when using `GeoLocationEnabled` you must include "GBR" in the `countries` setting.
## Language
Both the control and web service API support a variety of language cultures. The language is automatically detected from the user's web browser but a **culture** option and **setCulture** method are also provided. The culture is based on 2-character code (e.g. "en", "fr") or culture name (e.g. "en\_GB", "en\_US", "fr\_FR", "fr\_CA").
## The control object
When you instantiate a new **pca.Address** object you will get a reference to an object commonly referred to as the **control** object.
```javascript theme={null}
var control = new pca.Address(fields, options);
```
This is the main object for address capture on your address form and provides all methods and properties to customise the address capture experience. You will typically have one of the these objects for each of your address forms, so it is important to give them individual references or store them in a list.
```javascript theme={null}
var billingControl = new pca.Address(billingFields, billingOptions);
var shippingControl = new pca.Address(shippingFields, shippingOptions);
```
The control object will automatically wait for the page DOM to be loaded before it initialises, so it is important to listen for the **load** event before calling methods on the control object.
```javascript theme={null}
var control = new pca.Address(fields, options);
control.listen("load", function() {
control.setCountry("CAN");
});
```
## Events and listeners
The address capture library implements a simple events model which will allow you to listen out for when certain things happen. To listen for an event use the **listen** method with the event name and a function to run when that event occurs. Events can sometimes pass additional details through parameters.
```javascript theme={null}
control.listen("populate", function(address, variations) {
document.getElementById("myCustomField").value = address.PostalCode;
});
```
The key events to listen for are:
| Event | What it means |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| load | The control is now ready. It has finished adding elements to the page and is now listening to page events. |
| show | The control is now visible on the page. |
| hide | The control has been hidden. |
| search | The user is searching. You can modify the **searchTerm** and **lastId** of the search object (parameter 1) at this stage. |
| results | Results have been returned from the find service. You can modify the list of suggestions returned (parameter 1) and access the extended attributes object (parameter 2) including properties such as **ContainerCount**. |
| noresults | No matching results were returned from the find service. |
| display | The suggestions have been shown to the user. |
| select | The user has selected a suggestion. The chosen suggestion can be accessed (parameter 1). |
| prepopulate | The full address has been returned from the retrieve service. The address object (parameter 1) can be accessed and modified before fields are populated, as well as full list of language variations (parameter 2) for the address. |
| populate | The address fields have been populated. This is the most common event to listen for, and will allow you to populate your own fields with your own logic using the address object (parameter 1) and the list of address variations (parameter 2). |
| country | The country has been changed. The selected country object (parameter 1) with **iso2**, **iso3** and **name** properties is passed through. |
| manual | When the **manualEntry** option is passed through and the user selects the option to enter their address manually this event will fire. |
| error | An error has occured. The error message (parameter 1) is passed through. Typically errors are not shown to the user, but can be handled manually here if needed. |
## Dynamic pages
When the control loads it will need to be able to find your address fields in order to bind to the page events and listen for the user typing into the field. This becomes more tricky when working with dynamic pages and asynchronous postbacks. If the control is not loading at the correct time when your address form is rendered onto the page, you can call the **load** method on the control manually.
If you are loading dynamic HTML, you can include a call to reload your previously defined control object, or include your full initialisation script as part of the HTML being rendered.
```html theme={null}