openapi: 3.1.0
info:
title: Nationalize.io Nationality API
description: Free REST API that predicts the nationality of a person based on their first name using probabilistic models derived from a dataset of approximately one billion people spanning 250 countries and territories. Accepts single or batched names (up to 10), handles diacritics automatically, and returns ranked country probabilities as JSON using ISO 3166-1 alpha-2 codes. The same API key works across all three Demografix services (Genderize, Agify, Nationalize).
version: 1.0.0
termsOfService: https://nationalize.io/legal/terms-and-conditions
contact:
url: https://nationalize.io
servers:
- url: https://api.nationalize.io
description: Production server
tags:
- name: Nationality
description: Operations for predicting nationality from names
paths:
/:
get:
operationId: predictNationality
summary: Predict nationality from name
description: Predicts the nationality of one or more people based on their names, returning ranked country probabilities drawn from a dataset of approximately one billion people. Supports single name lookups, batched requests of up to 10 names, full name parsing, and diacritics handling. Results are returned as ISO 3166-1 alpha-2 country codes paired with probability scores, up to five countries per name.
parameters:
- name: name
in: query
required: true
description: A single name to predict nationality for. For batched lookups use the array form `name[]` repeated up to 10 times. Last names carry the strongest nationality signals; full names are also accepted and parsed automatically.
schema:
type: string
example: nguyen
- name: name[]
in: query
required: false
description: Batch form of the name parameter. Repeat up to 10 times to look up multiple names in a single request. Each name counts individually toward the monthly usage limit.
schema:
type: array
items:
type: string
maxItems: 10
example:
- anna
- john
- kim
style: form
explode: true
- name: apikey
in: query
required: false
description: API authentication key. Required for paid plans and to track usage. Obtain at https://nationalize.io/login. The same key works across Genderize, Agify, and Nationalize.
schema:
type: string
example: your_api_key_here
responses:
'200':
description: Nationality prediction result. Returns a single object for a single name lookup, or an array of objects for a batched request.
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/NationalityResult'
- type: array
items:
$ref: '#/components/schemas/NationalityResult'
examples:
single:
summary: Single name lookup
value:
name: nguyen
country:
- country_id: VN
probability: 0.561
- country_id: US
probability: 0.035
- country_id: AU
probability: 0.021
- country_id: CA
probability: 0.016
- country_id: FR
probability: 0.012
count: 360408
not_found:
summary: Name not found in dataset
value:
name: zzzzunknown
country: null
count: 0
batch:
summary: Batched name lookup
value:
- name: anna
country:
- country_id: FI
probability: 0.083
- country_id: PL
probability: 0.079
- country_id: SE
probability: 0.071
- country_id: 'NO'
probability: 0.063
- country_id: DK
probability: 0.058
count: 1234567
- name: john
country:
- country_id: US
probability: 0.288
- country_id: GB
probability: 0.195
- country_id: AU
probability: 0.072
- country_id: CA
probability: 0.065
- country_id: IE
probability: 0.042
count: 987654
'402':
description: Payment Required. The monthly request quota has been exceeded on the free tier.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error: Request limit reached
'422':
description: Unprocessable Entity. The request is missing required parameters or contains invalid input.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error: Missing 'name' parameter
'429':
description: Too Many Requests. Monthly usage limit exceeded. Resets at the start of the next billing cycle.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error: Request limit reached
tags:
- Nationality
components:
schemas:
CountryProbability:
type: object
description: A country prediction with its associated probability score
properties:
country_id:
type: string
description: ISO 3166-1 alpha-2 country code
pattern: ^[A-Z]{2}$
example: VN
probability:
type: number
format: double
description: Confidence score for this nationality, between 0 and 1. The sum of all probabilities in the array may be less than 1 as only the top five results are returned.
minimum: 0
maximum: 1
example: 0.561
required:
- country_id
- probability
NationalityResult:
type: object
description: Nationality prediction for a single name
properties:
name:
type: string
description: The input name as submitted in the request
country:
description: Ranked list of up to five predicted nationalities with probability scores. Null when the name is not found in the dataset after all matching attempts (direct match, diacritics removal, full name parsing).
oneOf:
- type: array
items:
$ref: '#/components/schemas/CountryProbability'
maxItems: 5
- type: 'null'
count:
type: integer
description: Number of data points used in the prediction
minimum: 0
example: 360408
required:
- name
- country
- count
ErrorResponse:
type: object
description: Error response from the API
properties:
error:
type: string
description: Human-readable error message describing the problem
required:
- error
securitySchemes:
apiKey:
type: apiKey
in: query
name: apikey
description: API key obtained from https://nationalize.io/login. The same key is shared across all three Demografix services (Genderize, Agify, Nationalize).