# Get Visitor Data

## Get the data associated with a specific IP address.

<mark style="color:blue;">`GET`</mark> `https://getgeoflow.com/beta/api/get-visitor-data`

The same properties outlined in the [Visitor Data Properties](/geoflow-docs/overview/visitor-data-properties.md) table will be returned in the response, where available or applicable.

This will be based on an IP address you provide in the `X-Visitor-IP` header. If the header is omitted, the first IP address found in the `X-Forwarded-For` header will be used.

#### Headers

| Name                                            | Type   | Description        |
| ----------------------------------------------- | ------ | ------------------ |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer \<TOKEN>    |
| X-Visitor-IP                                    | String | Visitor IP Address |

{% tabs %}
{% tab title="200: OK Visitor Data Found" %}

```json
{
  "continentName": "Oceania",
  "continentCode": "OC",
  "countryName": "Australia",
  "countryCode": "AU",
  "region": "Oceania",
  "nationalCapital": "Canberra",
  "city": "Melbourne",
  "stateName": "Victoria",
  "stateCode": "VIC",
  "postalCode": "3000",
  "isEU": true,
  "timezone": "Australia/Melbourne",
  "latitude": "-37.81590",
  "longitude": "144.96690",
  "airportCode": "MEL",
  "currencyCode": "AUD",
  "currencySymbol": "$",
  "callingCode": 61,
  "language": "en-AU",
  "ASN": 4804,
  "ISP": "Optus",
  "isMobile": false,
  "deviceType": "Desktop",
  "dataSaver": false,
  "reducedMotion": false,
  "colorPreference": "dark",
  "OS": "Windows",
  "currentPage": "getgeoflow.com",
  "referer": "webflow.com",
  "userAgent": "Chrome/118.0.0.0",
  "IP": "192.168.1.1"
}
```

{% endtab %}

{% tab title="401: Unauthorized Unauthorized Request" %}

```json
{
    "status": 401,
    "message": "Unauthorized",
    "description": "No API key was provided or you do not have access to this resource. Please provide a valid Geoflow REST API key or contact support."
}
```

{% endtab %}

{% tab title="429: Too Many Requests Exceeded Rate Limit" %}

```json
{
    "status": 429,
    "message": "Too Many Requests",
    "description": "You have sent too many requests in a given amount of time. Please wait before sending more requests."
}
```

{% endtab %}

{% tab title="404: Not Found No Visitor Data Found or Invalid Endpoint" %}

```json
{
    "status": 404,
    "message": "Not Found",
    "description": "The endpoint you are trying to access does not exist or has been moved, or the visitor data could not be found based on the IP address used. Please refer to the Geoflow REST API documentation for further information or contact support."
}
```

{% endtab %}

{% tab title="405: Method Not Allowed Prohibited Method" %}

```json
{
    "status": 405,
    "message": "Method Not Allowed",
    "description": "The HTTP method used is not supported for this endpoint. Please refer to the Geoflow REST API documentation for further information or contact support."
}
```

{% endtab %}

{% tab title="500: Internal Server Error Unknown Error" %}

```json
{
    "status": 500,
    "message": "Internal Server Error",
    "description": "An unexpected error occurred on the server. The Geoflow API may be down or encountering another issue. Please try again later or contact support."
}
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %}
**Developer Warning**: Never share your API key with anyone or add it to client-side code. Where possible, use environment variables in your backend to keep your API key secure.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developers.getgeoflow.com/geoflow-docs/advanced/api/get-visitor-data.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
