Get Conversions
This http method allows you to retrieve multiple conversions by their unique identifiers.
Get conversions
Retrieves up to 100 of your project's conversions by their uniqueId. Ids that are unknown, another project's, or older than the current month and the twelve before it are left out of the answer rather than failing it, and the rows are not in the order asked, so match them by uniqueId. Secret keys only: a public key gets 403.
post
https://api.ip2geo.dev/conversions/getcurl --request POST \
--url 'https://api.ip2geo.dev/conversions/get' \
--header 'x-api-key: i2g_sk_your_secret_key' \
--header 'content-type: application/json' \
--data '{"conversionIds":["01a12452-07a0-7a3b-8c41-d2e5f6a7b8c9","01a121d4-6ad4-71c2-9e3f-4a5b6c7d8e9f"]}'const response = await fetch('https://api.ip2geo.dev/conversions/get', {
method: 'POST',
headers: {
'x-api-key': 'i2g_sk_your_secret_key',
'content-type': 'application/json'
},
body: JSON.stringify({
"conversionIds": [
"01a12452-07a0-7a3b-8c41-d2e5f6a7b8c9",
"01a121d4-6ad4-71c2-9e3f-4a5b6c7d8e9f"
]
})
})
const { success, message, data } = await response.json()Authorizations
x-api-keystringrequiredin: headerA secret key (
i2g_sk_...). Keep it on your server: it reads every conversion your project made. A public key gets 403 here.Query parameters
selectstring[]Return only these fields, comma-separated:
select=data.continent.country.code,status. Repeating the parameter (select=data.asn.name&select=status) works too. Name a stored field as it is (id, uniqueId, data, status, startedAt, completedAt, createdAt) and a geolocation field by its path under data, such as data.continent.country.name (the data. prefix may be left out). uniqueId is always included, so every row can be matched to its conversion. The SELECT constants list every path.Body
application/json, required
conversionIdsstring[]requiredformat: uuidmin items: 1max items: 100The conversions'
uniqueId values, each a UUIDv7.{
"conversionIds": [
"01a12452-07a0-7a3b-8c41-d2e5f6a7b8c9",
"01a121d4-6ad4-71c2-9e3f-4a5b6c7d8e9f"
]
}Responses
200The conversions found, trimmed to select when it is given.
successbooleanrequiredWhether the request was successful.
messagestringrequiredResponse message.
codeintegerrequiredHTTP status code.
dataobjectrequiredShow child attributes
conversionsobject[]requiredThe conversions found. Ids that were not found are left out.
Show child attributes
idintegerSequential conversion number.
uniqueIdstringformat: uuidThe conversion's id, a UUIDv7 that carries the time it was made. Always included.
dataobjectThe geolocation data of one address. Every value is null when the datasets do not know it.
Show child attributes
ipstring | nullThe address that was converted.
typestring | nullThe address family.
Available options:
ipv4ipv6nullis_euboolean | nulltrue when the country is in the European Union (its 27 member states, and the Åland Islands and outermost regions such as Réunion that have a country code of their own), false for any other country, null when the country is unknown.continentobjectShow child attributes
namestring | nullcodestring | nullTwo-letter continent code, lowercase:
af, an, as, eu, na, oc or sa.geoname_idinteger | nullGeoNames ID for the continent.
countryobjectShow child attributes
namestring | nullcodestring | nullISO 3166-1 alpha-2 country code, lowercase.
geoname_idinteger | nullGeoNames ID for the country.
phone_codestring | nullThe country's international calling code, such as
+1, +44 or +7.capitalstring | nulltldstring | nullThe country-code top-level domain.
subdivisionobjectState, province, or region information.
Show child attributes
namestring | nullName of the state/province/region.
codestring | nullISO 3166-2 code for the subdivision, as the datasets write it (e.g., 'CA' for California).
cityobjectShow child attributes
namestring | nullgeoname_idinteger | nullGeoNames ID for the city.
latitudenumber | nulllongitudenumber | nullaccuracy_radiusinteger | nullRadius in kilometers around the coordinates where the IP is likely located.
metro_codeinteger | nullMetro area code (US only).
postal_codestring | nullPostal code, lowercase.
timezoneobjectShow child attributes
namestring | nullIANA time zone.
time_nowstring | nullThe local time in that time zone when the address was converted, written like
10/10/2026, 1:38:38 AM.flagobjectShow child attributes
imgstring | nullA 320 px wide PNG of the flag.
emojistring | nullemoji_unicodestring | nullcurrencyobjectShow child attributes
namestring | nullcodestring | nullISO 4217 currency code.
symbolstring | nullregistered_countryobjectThe country where the IP address is registered (may differ from location country for VPNs, proxies, etc.).
Show child attributes
namestring | nullName of the registered country.
codestring | nullISO 3166-1 alpha-2 code of the registered country, lowercase.
geoname_idinteger | nullGeoNames ID for the registered country.
asnobjectShow child attributes
numberinteger | nullThe autonomous system number.
namestring | nullThe organization that announces the address.
completion_timeobjectShow child attributes
milisecondsnumber | nullHow long the conversion took, in milliseconds.
secondsnumber | nullHow long the conversion took, in seconds.
statusstringsuccess, failed (a valid address without a geolocation record, or a lookup that failed) or invalid-ip-address.Available options:
successfailedinvalid-ip-addressstartedAtstringformat: date-timeWhen the conversion started.
completedAtstring | nullformat: date-timeWhen the conversion completed.
createdAtstringformat: date-timeWhen the conversion was created.
_reqobjectrequiredShow child attributes
reqIdstringrequiredUnique request identifier. Quote it when you contact support.
resTimenumberrequiredResponse time in milliseconds.
{
"success": true,
"message": "Conversions retrieved successfully.",
"code": 200,
"data": {
"conversions": [
{
"id": 4825913,
"uniqueId": "01a12452-07a0-7a3b-8c41-d2e5f6a7b8c9",
"data": {
"ip": "8.8.4.4",
"type": "ipv4",
"is_eu": false,
"continent": {
"name": "North America",
"code": "na",
"geoname_id": 6255149,
"country": {
"name": "United States",
"code": "us",
"geoname_id": 6252001,
"phone_code": "+1",
"capital": "Washington D.C.",
"tld": ".us",
"subdivision": {
"name": "Massachusetts",
"code": "MA"
},
"city": {
"name": "Westfield",
"geoname_id": 4955190,
"latitude": 42.1293,
"longitude": -72.7522,
"accuracy_radius": 10,
"metro_code": 543,
"postal_code": "01085",
"timezone": {
"name": "America/New_York",
"time_now": "10/10/2026, 1:38:38 AM"
}
},
"flag": {
"img": "https://flagcdn.com/w320/us.png",
"emoji": "🇺🇸",
"emoji_unicode": "U+1F1FA U+1F1F8"
},
"currency": {
"name": "United States Dollar",
"code": "USD",
"symbol": "$"
}
}
},
"registered_country": {
"name": "United States",
"code": "us",
"geoname_id": 6252001
},
"asn": {
"number": 15169,
"name": "Google Llc"
},
"completion_time": {
"miliseconds": 3,
"seconds": 0.003
}
},
"status": "success",
"startedAt": "2026-10-10T05:38:38.112Z",
"completedAt": "2026-10-10T05:38:38.112Z",
"createdAt": "2026-10-10T05:38:38.112Z"
}
]
},
"_req": {
"reqId": "01a12452-07a8-7b41-a95f-3a2c1d0e9f8a",
"resTime": 2
}
}400The body is not JSON, or conversionIds is missing, empty, longer than 100 or holds an id that is not a UUIDv7 (listed in data.invalidIds).
successbooleanrequiredAlways false for an error.
messagestringrequiredWhat went wrong, in a sentence you can show.
codeintegerrequiredHTTP status code.
dataobject | nullrequiredNull for most errors. A 429 carries
currentUsage, planLimit and plan, and a 400 for invalid conversion ids carries invalidIds._reqobjectrequiredShow child attributes
reqIdstringrequiredUnique request identifier. Quote it when you contact support.
resTimenumberrequiredResponse time in milliseconds.
{
"success": false,
"message": "<string>",
"code": 123,
"data": null,
"_req": {
"reqId": "01a12452-07a8-7b41-a95f-3a2c1d0e9f8a",
"resTime": 2
}
}401The x-api-key header is missing, malformed, unknown or disabled, or a public key was sent with an Origin that does not match its domain.
successbooleanrequiredAlways false for an error.
messagestringrequiredWhat went wrong, in a sentence you can show.
codeintegerrequiredHTTP status code.
dataobject | nullrequiredNull for most errors. A 429 carries
currentUsage, planLimit and plan, and a 400 for invalid conversion ids carries invalidIds._reqobjectrequiredShow child attributes
reqIdstringrequiredUnique request identifier. Quote it when you contact support.
resTimenumberrequiredResponse time in milliseconds.
{
"success": false,
"message": "<string>",
"code": 123,
"data": null,
"_req": {
"reqId": "01a12452-07a8-7b41-a95f-3a2c1d0e9f8a",
"resTime": 2
}
}403A public key was sent. Reading conversions takes a secret key: public keys can only convert addresses.
successbooleanrequiredAlways false for an error.
messagestringrequiredWhat went wrong, in a sentence you can show.
codeintegerrequiredHTTP status code.
dataobject | nullrequiredNull for most errors. A 429 carries
currentUsage, planLimit and plan, and a 400 for invalid conversion ids carries invalidIds._reqobjectrequiredShow child attributes
reqIdstringrequiredUnique request identifier. Quote it when you contact support.
resTimenumberrequiredResponse time in milliseconds.
{
"success": false,
"message": "<string>",
"code": 123,
"data": null,
"_req": {
"reqId": "01a12452-07a8-7b41-a95f-3a2c1d0e9f8a",
"resTime": 2
}
}429The project has used its plan's conversions for this period. data carries currentUsage, planLimit and plan.
successbooleanrequiredAlways false for an error.
messagestringrequiredWhat went wrong, in a sentence you can show.
codeintegerrequiredHTTP status code.
dataobject | nullrequiredNull for most errors. A 429 carries
currentUsage, planLimit and plan, and a 400 for invalid conversion ids carries invalidIds._reqobjectrequiredShow child attributes
reqIdstringrequiredUnique request identifier. Quote it when you contact support.
resTimenumberrequiredResponse time in milliseconds.
{
"success": false,
"message": "<string>",
"code": 123,
"data": null,
"_req": {
"reqId": "01a12452-07a8-7b41-a95f-3a2c1d0e9f8a",
"resTime": 2
}
}500Something failed on our side. Reads are safe to retry; a conversion may already have been counted.
successbooleanrequiredAlways false for an error.
messagestringrequiredWhat went wrong, in a sentence you can show.
codeintegerrequiredHTTP status code.
dataobject | nullrequiredNull for most errors. A 429 carries
currentUsage, planLimit and plan, and a 400 for invalid conversion ids carries invalidIds._reqobjectrequiredShow child attributes
reqIdstringrequiredUnique request identifier. Quote it when you contact support.
resTimenumberrequiredResponse time in milliseconds.
{
"success": false,
"message": "<string>",
"code": 123,
"data": null,
"_req": {
"reqId": "01a12452-07a8-7b41-a95f-3a2c1d0e9f8a",
"resTime": 2
}
}503The API is under maintenance. Retry later: https://api.ip2geo.dev/maintenance/status says when it is over.
successbooleanrequiredAlways false for an error.
messagestringrequiredWhat went wrong, in a sentence you can show.
codeintegerrequiredHTTP status code.
dataobject | nullrequiredNull for most errors. A 429 carries
currentUsage, planLimit and plan, and a 400 for invalid conversion ids carries invalidIds._reqobjectrequiredShow child attributes
reqIdstringrequiredUnique request identifier. Quote it when you contact support.
resTimenumberrequiredResponse time in milliseconds.
{
"success": false,
"message": "<string>",
"code": 123,
"data": null,
"_req": {
"reqId": "01a12452-07a8-7b41-a95f-3a2c1d0e9f8a",
"resTime": 2
}
}