International Street Address API

Verifies and standardizes street addresses for countries outside the United States, returning corrected components and postal codes in country-appropriate formats.

OpenAPI Specification

smarty-international-street-address-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: International Address Verification API
  version: '3.3'
  description: 'This API verifies international addresses'
  termsOfService: 'https://smartystreets.com/legal/terms-of-service'
  license:
    url: 'https://www.smarty.com/legal/terms-of-service'
    name: Smarty License
  contact:
    url: 'https://www.smarty.com/contact/support'
    email: [email protected]
    name: Smarty Support
servers:
  - url: 'https://international-street.api.smarty.com'
externalDocs:
  description: Extensive documentation for the International Address API
  url: 'https://www.smarty.com/docs/cloud/international-street-api'
paths:
  /verify:
    get:
      summary: Submit Address to Verify
      tags: []
      security:
        - auth-id: []
          auth-token: []
        - embedded-key: []
      responses:
        '200':
          $ref: '#/components/responses/200'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '402':
          $ref: '#/components/responses/402'
        '422':
          $ref: '#/components/responses/422'
        '429':
          $ref: '#/components/responses/429'
        '504':
          $ref: '#/components/responses/504'
      operationId: get-verify
      description: |
        To send one (and only one) address to our API, simply encode the input field names from the table below along with the corresponding input values as query string parameters in the URL of your request. Here's an example that uses the address1, address2, locality, administrative_area, postal_code, and country fields:
        ```
        curl -v 'https://international-street.api.smarty.com/verify?
          auth-id=YOUR+AUTH-ID+HERE&
          auth-token=YOUR+AUTH-TOKEN+HERE&
      
          address1=Rua+Padre+Antonio+D%27Angelo+121&
          address2=Casa+Verde&
          locality=Sao+Paulo&
          administrative_area=SP&
          postal_code=02516-040&
          country=Brazil'
        ```
        Please note that all query string parameter values must be url-encoded (spaces become + or %20, for example) to ensure that the data is transferred correctly. A common mistake we see is a non-encoded pound sign (#) like in an apartment number (# 409). This character, when properly encoded in a URL, becomes %23. When not encoded this character functions as the fragment identifier, which is ignored by our API servers.
      parameters:
        - $ref: '#/components/parameters/Host'
        - $ref: '#/components/parameters/input_id'
        - $ref: '#/components/parameters/country'
        - $ref: '#/components/parameters/geocode'
        - $ref: '#/components/parameters/language'
        - $ref: '#/components/parameters/freeform'
        - $ref: '#/components/parameters/address1'
        - $ref: '#/components/parameters/address2'
        - $ref: '#/components/parameters/address3'
        - $ref: '#/components/parameters/address4'
        - $ref: '#/components/parameters/organization'
        - $ref: '#/components/parameters/locality'
        - $ref: '#/components/parameters/administrative_area'
        - $ref: '#/components/parameters/postal_code'
        - $ref: '#/components/parameters/license'
        - $ref: '#/components/parameters/features'
components:
  schemas:
    Root:
      title: Root
      type: object
      properties:
        input_id:
          type: string
          description: A unique identifier generated by you for this address for use within your application. The output will be identical to the value you provided in the request input_id.
          maxLength: 16
        organization:
          type: string
          description: 'The name of the recipient, firm, or company at this address. The output will be identical to the input.'
          maxLength: 256
        address1-12:
          type: string
          maxLength: 256
          description: |-
            If address_precision = DeliveryPoint or Premise, these fields will contain the correctly formatted address for mailing in the relevant country, split into individual address lines. (Note: These fields may contain values that are not referenced in the address components.)

            If address_precision ≠ DeliveryPoint or Premise, the address fields may contain standardized address information or even the original input data.
        components:
          $ref: '#/components/schemas/Components'
          description: ' Contains the various basic elements of the address.'
        metadata:
          $ref: '#/components/schemas/Metadata'
          description: Contains ancillary data about each address.
        analysis:
          $ref: '#/components/schemas/Analysis'
          description: Contains information about the validation and the precision of the output address.
    Components:
      title: Components
      type: object
      properties:
        country_iso_3:
          type: string
          description: 'The ISO 3166-1 alpha-3 country code. See https://www.smarty.com/docs/cloud/international-street-api#countries for details.'
        attention:
          type: string
          description: 'The name of the recipient, firm, or company at this address. This is the same value as the organization field.'
        administrative_area:
          type: string
          description: |-
            The most common administrative division within a country 
            (e.g., province in Canada)
        administrative_area_iso2:
          type: string
          description: 'The administrative area ISO 3166-2 data (if available for the country). The value is the two letter country code, followed by a hyphen, followed by the one to three character code for the administrative area. (e.g., CA-ON)'
        super_administrative_area:
          type: string
          description: |-
            The largest administrative division within a country 
            (e.g., region in France)
        sub_administrative_area:
          type: string
          description: |-
            The smallest administrative division within a country 
            (e.g., county in Germany)
        locality:
          type: string
          description: |-
            Within a country, this is the most common population center. 
            (e.g., city in Chile)
        dependent_locality:
          type: string
          description: |-
            If there is additional information about the locality, it will be here. 
            (e.g., neighborhood in Turkey)
        dependent_locality_name:
          type: string
          description: |-
            If the dependent_locality has a name, you'll find it here. 
            (E.g., the dependent_locality "Dong Cheng Qu" is named "Dong Cheng.")
        double_dependent_locality:
          type: string
          description: |-
            If there is additional information about the dependent_locality, you'll find it here. 
            (e.g., village in the United Kingdom)
        postal_code:
          type: string
          description: |-
            The complete postal code for the delivery point 
            (e.g., V6G1V9 in Canada)
        postal_code_short:
          type: string
          description: |-
            Primary postal code information 
            (e.g., 90210 in the United States)
        postal_code_extra:
          type: string
          description: |-
            Secondary postal code information 
            (e.g., 3425 in the United States)
        premise:
          type: string
          description: Alphanumeric code pertaining to an individual location
        premise_extra:
          type: string
          description: |-
            Extra information about the premise that is not necessarily authoritative but might still be useful
            (E.g., in a French address, 25 bis rue Emile Zola, 91190 Gif Sur Yvette, France, the premise number could be followed by the word "bis" which would be considered premise_extra data.)
        premise_number:
          type: string
          description: |-
            The alphanumeric component of the premise field 
            (E.g., if premise contains "Plot 7/7A" premise_number would contain "7/7A.")
        premise_type:
          type: string
          description: |-
            The premise type component of the premise field 
            (E.g., if premise contains "Plot 7/7A" premise_type would contain "Plot.")
        thoroughfare:
          type: string
          description: All thoroughfare components combined
        thoroughfare_predirection:
          type: string
          description: |-
            The directional prefix component of the thoroughfare 
            (E.g., if thoroughfare contains "N Main St" thoroughfare_predirection would contain "N."
        thoroughfare_postdirection:
          type: string
          description: |-
            The directional suffix component of the thoroughfare 
            (E.g., if thoroughfare contains "Main St N" thoroughfare_postdirection would contain "N.")
        thoroughfare_name:
          type: string
          description: |-
            The name component of the thoroughfare 
            (E.g., if thoroughfare contains "Main St" thoroughfare_name would contain "Main.")
        thoroughfare_trailing_type:
          type: string
          description: |-
            The trailing thoroughfare type component of the thoroughfare 
            (E.g., if thoroughfare contains "N Main St" thoroughfare_trailing_type would contain "St.")
        thoroughfare_type:
          type: string
          description: |-
            The leading thoroughfare type component of the thoroughfare 
            (E.g., if thoroughfare contains "Rue De La Gare" thoroughfare_leading_type would contain "Rue.")
        dependent_thoroughfare:
          type: string
          description: All of the dependent thoroughfare components combined
        dependent_thoroughfare_predirection:
          type: string
          description: |-
            The directional prefix component of the dependent_thoroughfare 
            (E.g., if dependent_thoroughfare contains "N Main St" dependent_thoroughfare_predirection would contain "N.")
        dependent_thoroughfare_postdirection:
          type: string
          description: |-
            The directional suffix component of the dependent_thoroughfare 
            (E.g., if dependent_thoroughfare contains "Main St N" dependent_thoroughfare_postdirection would contain "N.")
        dependent_thoroughfare_name:
          type: string
          description: |-
            The name component of the dependent_thoroughfare 
            (E.g., if dependent_thoroughfare contains "N Main St" dependent_thoroughfare_name would contain "Main.")
        dependent_thoroughfare_trailing_type:
          type: string
          description: |-
            The trailing dependent_thoroughfare type component of the dependent_thoroughfare 
            (E.g., if dependent_thoroughfare contains "N Main St" dependent_thoroughfare_trailing_type would contain "St.")
        dependent_thoroughfare_type:
          type: string
          description: |-
            The leading thoroughfare type component of the dependent_thoroughfare field 
            (E.g., if dependent_thoroughfare contains "Rue De La Gare" dependent_thoroughfare_type would contain "Rue.")
        building:
          type: string
          description: 'The descriptive name that identifies an individual location, if one exists'
        building_leading_type:
          type: string
          description: |-
            The leading building type component of the building 
            (E.g., if building contains "Bloc C" building_leading_type would contain "Bloc.")
        building_name:
          type: string
          description: |-
            The name component of the building 
            (E.g., if building contains "Westminster House" building_name would contain "Westminster.")
        building_trailing_type:
          type: string
          description: |-
            The trailing building type component of the building 
            (E.g., if building contains "Westminster House" building_trailing_type would contain "House.")
        sub_building:
          type: string
          description: All sub_building components combined
        sub_building_type:
          type: string
          description: |-
            The leading sub-building type of the sub_building 
            (E.g., if sub_building contains "Flat 1" sub_building_type would contain "Flat.")
        sub_building_number:
          type: string
          description: |-
            The alphanumeric component of the sub_building 
            (E.g., if sub_building contains "Flat 1" sub_building_number would contain "1.")
        sub_building_name:
          type: string
          description: |-
            The descriptive name component of the sub_building 
            (E.g., if sub_building contains "Basement Flat" sub_building_name would contain "Basement.")
        post_box:
          type: string
          description: All post_box Post Office Box components combined
        post_box_type:
          type: string
          description: |-
            The type component of the post_box 
            (E.g., if post_box contains "PO Box 1234" post_box_type would contain "PO Box.")
        post_box_number:
          type: string
          description: |-
            The alphanumeric component of the postbox 
            (E.g., if post_box contains "PO Box 1234" post_box_number would contain "1234.")
        additional_content:
          type: string
          description: '(Canada) Content used in postal delivery (E.g., Site 2 Comp 12)'
        delivery_installation:
          type: string
          description: '(Canada) Delivery installation - a composite of delivery_install_type and delivery_installation_qualifier_name (E.g., Rpo Ritson Centre)'
        delivery_installation_type:
          type: string
          description: '(Canada) Delivery installation type (E.g., RPO)'
        delivery_installation_qualifier_name:
          type: string
          description: '(Canada) Delivery name associated with delivery_installation_type (E.g., Ritson Centre)'
        route:
          type: string
          description: '(Canada) Route - a composite of route_type and route_number (E.g., RR 4)'
        route_type:
          type: string
          description: '(Canada) Route type (E.g., RR, GD, etc.)'
        route_number:
          type: string
          description: '(Canada) Route number associated with route_type (E.g., 4)'
    Metadata:
      title: Metadata
      type: object
      properties:
        latitude:
          type: number
          description: 'The horizontal component used for geographic positioning; ***based on the WGS84 coordinate system*** it is the angle between 0° (the equator) and ±90° (north or south) at the poles measured in decimal degrees. It is the first value in an ordered pair of latitude, longitude. A negative number denotes a location south of the equator; a positive number is north. Combining lat/long values enables you to pinpoint addresses on a map.'
        longitude:
          type: number
          description: 'The vertical component used for geographic positioning; ***based on the WGS84 coordinate system*** it is the angle between 0° (the Prime Meridian) and ±180° (westward or eastward) measured in decimal degrees. It is the second number in an ordered pair of (latitude, longitude). A negative number indicates a location west of Greenwich, England; a positive number east. Combining lat/long values enables you to pinpoint addresses on a map.'
        geocode_classificiation:
          type: string
          description: |-
            Provides additional information about the returned geocode.

            single-point - Returned a single matching geocode

            multiple-point-average - The output address matched several geocodes. To provide a single result, we calculated and returned the average coordinate of those points.

            interpolated - Returned a geocode that was interpolated from a range of addresses near the returned address.

            This data will only be returned when the feature is requested.
        geocode_precision:
          type: string
          description: |-
            Indicates the precision level of the latitude and longitude values.

            None — Geocode not known (possibly because address is invalid).

            AdministrativeArea — Geocode is accurate down to the administrative area (i.e., region or province).

            Locality — Geocode is accurate down to the locality (i.e., city).

            Thoroughfare — Geocode is accurate down to the thoroughfare (i.e., street).

            Premise — Geocode is accurate to the actual delivery point (i.e., house, mailbox, or apartment).

            * Must be enabled by sending the geocode-precision-enhanced feature flag. Only available in CAN and GBR.
        max_geocode_precision:
          type: string
          description: Indicates the best geocode_precision available for the input country.
        address_format:
          type: string
          description: |-
            A template that shows where we positioned the different address components on line 1, line 2, etc. (The format changes from one country to another.)

            Due to the ever-changing nature of the underlying data, this field may contain values that are not referenced in the address components.

            Example:

            building | premise thoroughfare | postal_code locality

            Each "pipe" character (|) represents a line break. Following this guide, the numbered address fields would be composed accordingly:

            Address 1: building
            Address 2: premise thoroughfare
            Address 3: postal_code locality
            For native languages that do not use spaces between words, the corresponding component fields will also not have spaces between them.

            This field may not be present in the following cases:
            1. When we could not understand the input sufficiently to generate a value.
            2. For US addresses it willl never be present.
        occupant_use:
          type: string
          description: |-
            (Canada, Australia, Belgium, Great Britain) Indicates if the property is Residential or Commercial.

            This data will be returned only when the feature is requested.

            Possible values: "residential","commercial","residential,commercial"
    Analysis:
      title: Analysis
      type: object
      properties:
        verification_status:
          type: string
          description: |-
            Indicates the verification status of the address. (See address_precision for more details) 

            None — Not verified. The output fields will contain the input data.

            Partial — Verification only at the level indicated by address_precision. For some countries whose maximum precision level is less than DeliveryPoint or Premise, this may be the best verification status you may receive. Otherwise, better input might result in a better match.

            Ambiguous — Multiple matching addresses found. Each candidate address will have its own precision level. A common "ambiguous" scenario is that the output will contain two versions of the same address — one with an organization name and one without.

            Verified — The address was verified, at the indicated precision level.
        address_precision:
          type: string
          description: |-
            Indicates the precision level at which an address match is found. 

            None — None of the address is verified.

            AdministrativeArea — Address match is verified to the administrative area (i.e., region or province).

            Locality — Address match is verified to the locality (i.e., city).

            Thoroughfare — Address match is verified down to the thoroughfare (i.e., street).

            Premise — Address match is verified to a range of addresses on the specified street (i.e., building, block level or street segment).

            DeliveryPoint — Address match is verified to the delivery point (i.e., building, sub-building, or mailbox)
        max_address_precision:
          type: string
          description: Indicates the best address_precision available for the input country.
        changes:
          $ref: '#/components/schemas/Changes'
          description: 'Contains a collection of address components paired with values which specify the difference between corresponding input/lookup and output/candidate data. See the explanation of possible Changes here: https://www.smarty.com/docs/cloud/international-street-api#changes'
    Changes:
      title: Changes
      type: object
      description: |-
        Each value in this object (and any subordinate objects) will have a type of varchar(64) and will either be blank or contain one of the following values:

        Verified-NoChange
        Field has been verified using relevant reference data; no changes were needed.
        Verified-AliasChange
        Field has been verified using relevant reference data; an alias change was made during parsing (see Identified-AliasChange).
        Verified-SmallChange
        Field has been verified using relevant reference data; a small spelling change was made.
        Verified-LargeChange
        Field has been verified using relevant reference data; a large spelling change was made.
        Added
        Field has been added using relevant reference data.
        Identified-NoChange
        Field has been identified using relevant lexicon data; no changes were needed. E.g., an input value of 'PO Box 1234' may be identifiable as a postbox, but if it is unable to be verified then this value will be returned.
        Identified-AliasChange
        Field has been identified using relevant lexicon data; an alias change was made. E.g., an input value of 'Avnue' may be identifiable as an alias to the thoroughfare_type 'Ave'.
        Identified-ContextChange
        Field has been identified using relevant context rules. E.g., an input address of '123 sdovnsdv San Bruno CA USA' may identify the word 'sdovnsdv' as a thoroughfare, but only because of the context in which it appears (after an identifiable premise_number, and before an identifiable locality).
        Unrecognized
        Field was unrecognized.
      properties:
        organization:
          type: string
          description: 'If present, the degree of change to the name of the recipient, firm, or company at this address.'
        components:
          $ref: '#/components/schemas/Components'
  securitySchemes:
    auth-id:
      type: apiKey
      name: auth-id
      in: query
    auth-token:
      type: apiKey
      name: auth-token
      in: query
    embedded-key:
      type: apiKey
      name: key
      in: query
  responses:
    '200':
      description: 'OK (success!): A JSON array containing zero or more address matches for the input provided with the request. If none of the submitted addresses validate, the array will be empty ([]).'
      content:
        application/json:
          schema:
            type: array
            items:
              $ref: '#/components/schemas/Root'
    '400':
      description: 'Bad Request (Malformed Payload): Inputs from the request could not be interpreted.'
    '401':
      description: 'Unauthorized: The credentials were provided incorrectly or did not match any existing, active credentials.'
    '402':
      description: 'Payment Required: There is no active subscription for the account associated with the credentials submitted with the request.'
    '422':
      description: 'Unprocessable Entity: A GET request lacked required fields.'
    '429':
      description: |-
        Too Many Requests: Too many requests with exactly the same input values were submitted within too short a period. This status code conveys that the input was not processed in order to prevent runaway charges caused by such conditions as a misbehaving (infinite) loop sending the same record over and over to the API. You're welcome.

        OR

        Too Many Requests: When using public "embedded key" authentication, we restrict the number of requests coming from a given source over too short of a time. If you use embedded key authentication, you can avoid this error by adding your IP address as an authorized host for the embedded key in question.
    '504':
      description: 'Gateway Timeout: Our own upstream data provider did not respond in a timely fashion and the request failed. A serious, yet rare occurrence indeed.'
  parameters:
    Host:
      name: Host
      in: header
      required: true
      schema:
        type: string
      description: 'The Host request header field specifies the internet host and port number of the resource being requested. Ex: Host: international-street.api.smarty.com'
    input_id:
      name: input_id
      in: query
      required: false
      schema:
        type: string
      description: 'A unique identifier generated by you for this address for use within your application; this field will be copied into the output.  (e.g., 123456) Max Characters: 36'
    country:
      name: country
      in: query
      required: true
      schema:
        type: string
      description: 'This must be entered with every address. Country Name or ISO classification (ISO-3, ISO-2 or ISO-N). Address validation will fail if this is missing.  (e.g., Brazil, BRA, BR, or 076)'
    geocode:
      name: geocode
      in: query
      required: false
      schema:
        type: string
      description: 'Set to true to enable geocoding (disabled by default). See the examples section for, well, an example.'
    language:
      name: language
      in: query
      required: false
      schema:
        type: string
      description: 'When not set, the output language will match the language of the input values. When set to native, the results will always be in the language of the output country whenever possible. When set to latin, the results will always be provided using a Latin character set basic ASCII, accents and other diacritics removed. The following character sets can be transliterated, into either native or Latin characters, for the specified countries: Russian (Kazakhstan, Azerbaijan) Japanese (Japan) Simplified Chinese (China) Thai (Thailand) Arabic (Algeria, Bahrain, Egypt, Iraq, Jordan, Kuwait, Lebanon, Morocco, Oman, Qatar, Saudi Arabia, United Arab Emirates, Yemen)'
    freeform:
      name: freeform
      in: query
      required: false
      schema:
        type: string
      description: 'The entire address in a single field (without the country). If freeform is specified, all other address input fields (except country) will be ignored.  (e.g., Via Santa Maria di Costantinopoli, 72 46030-Tabellano MN) Max Characters: 512'
    address1:
      name: address1
      in: query
      required: false
      schema:
        type: string
      description: 'The first address line  (e.g., Calle Proc. San Sebastián, 15)'
    address2:
      name: address2
      in: query
      required: false
      schema:
        type: string
      description: The second address line (if any)
    address3:
      name: address3
      in: query
      required: false
      schema:
        type: string
      description: The third address line (if any)
    address4:
      name: address4
      in: query
      required: false
      schema:
        type: string
      description: The fourth address line (if any)
    organization:
      name: organization
      in: query
      required: false
      schema:
        type: string
      description: 'The name of the recipient, firm, or company at this address (e.g., Robert Smith OR The Clean Oil Company)'
    locality:
      name: locality
      in: query
      required: false
      schema:
        type: string
      description: 'The city name  (e.g., Paris)'
    administrative_area:
      name: administrative_area
      in: query
      required: false
      schema:
        type: string
      description: 'The state or province name or abbreviation  (e.g., Alberta or AB)'
    postal_code:
      name: postal_code
      in: query
      required: false
      schema:
        type: string
      description: 'The postal code  (e.g., 90210-2301)'
    license:
      name: license
      in: query
      required: false
      schema:
        type: string
      description: 'The license or licenses (comma separated) to use for this lookup. Valid values can be found in the account dashboard under the appropriate subscription. If multiple licenses are specified, they are considered in left to right order. We recommend that each request explicitly specify a license value. For more information see License Selection.'
    features:
      name: features
      in: query
      required: false
      schema:
        type: string
      description: 'A comma-separated list of features. These may require a special plan that allows the feature to be used. Examples:occupant-use: Return the occupant_use metadata field; geocode-classification: Return the geocode_classification metadata field if geocode=true; geocode-precision-enhanced: Enable the PostalCode return value in geocode_precision'