Skip to content
2 changes: 1 addition & 1 deletion apps/hex.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ This page explains how to integrate Hex with Axiom to visualize geospatial data
Send your sample location data to Axiom using the API endpoint. For example, the following HTTP request sends sample robot location data with latitude, longitude, status, and satellite information.

```bash
curl -X 'POST' 'https://AXIOM_DOMAIN/v1/datasets/DATASET_NAME/ingest' \
curl -X 'POST' 'https://AXIOM_DOMAIN/v1/ingest/DATASET_NAME' \
-H 'Authorization: Bearer API_TOKEN' \
-H 'Content-Type: application/json' \
-d '[
Expand Down
2 changes: 1 addition & 1 deletion guides/send-logs-from-apache-log4j.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -354,7 +354,7 @@ To configure Fluentd, create a configuration file. Create a new file named `flue

<match **>
@type http
endpoint https://AXIOM_DOMAIN/v1/datasets/DATASET_NAME/ingest
endpoint https://AXIOM_DOMAIN/v1/ingest/DATASET_NAME
headers {"Authorization":"Bearer API_TOKEN"}
json_array true
<buffer>
Expand Down
8 changes: 4 additions & 4 deletions guides/send-logs-from-dotnet.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public static class AxiomLogger
// Specify the Axiom dataset name and construct the API endpoint URL
var datasetName = "DATASET_NAME";
var axiomDomain = "AXIOM_DOMAIN";
var axiomUri = $"https://{axiomDomain}/v1/datasets/{datasetName}/ingest";
var axiomUri = $"https://{axiomDomain}/v1/ingest/{datasetName}";

// Replace with your Axiom API token
var apiToken = "API_TOKEN"; // Ensure your API token is correct
Expand Down Expand Up @@ -244,7 +244,7 @@ public class AxiomConfig
{
public const string DatasetName = "DATASET_NAME";
public const string ApiToken = "API_TOKEN";
public const string ApiUrl = "https://AXIOM_DOMAIN/v1/datasets";
public const string ApiUrl = "https://AXIOM_DOMAIN/v1";
}

public class AxiomHttpClient : IHttpClient
Expand Down Expand Up @@ -283,7 +283,7 @@ public class Program
.MinimumLevel.Debug()
.WriteTo.Console()
.WriteTo.Http(
requestUri: $"{AxiomConfig.ApiUrl}/{AxiomConfig.DatasetName}/ingest",
requestUri: $"{AxiomConfig.ApiUrl}/ingest/{AxiomConfig.DatasetName}",
queueLimitBytes: null,
textFormatter: new ElasticsearchJsonFormatter(renderMessageTemplate: false, inlineFields: true),
httpClient: new AxiomHttpClient()
Expand Down Expand Up @@ -415,7 +415,7 @@ Set up NLog by creating an `NLog.config` file or configuring it programmatically
flushTimeout="5000">
<target xsi:type="HTTP"
name="axiom"
url="https://AXIOM_DOMAIN/v1/datasets/DATASET_NAME/ingest"
url="https://AXIOM_DOMAIN/v1/ingest/DATASET_NAME"
HttpHeaders="Authorization: Bearer API_TOKEN"
contentType="application/json">
<layout xsi:type="JsonLayout" includeAllProperties="true">
Expand Down
10 changes: 6 additions & 4 deletions guides/send-logs-from-laravel.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ return [
'with' => [
'apiToken' => env('AXIOM_API_TOKEN'),
'dataset' => env('AXIOM_DATASET'),
'axiomUrl' => env('AXIOM_DOMAIN'),
],
],

Expand Down Expand Up @@ -132,7 +133,7 @@ The `default` configuration specifies the primary channel Laravel uses for loggi
LOG_CHANNEL=axiom
AXIOM_API_TOKEN=API_TOKEN
AXIOM_DATASET=DATASET_NAME
AXIOM_URL=AXIOM_DOMAIN
AXIOM_DOMAIN=us-east-1.aws.edge.axiom.co
LOG_LEVEL=debug
LOG_DEPRECATIONS_CHANNEL=null
```
Expand Down Expand Up @@ -172,7 +173,7 @@ The heart of the `logging.php` file lies within the **`channels`** array where y
'with' => [
'apiToken' => env('AXIOM_API_TOKEN'),
'dataset' => env('AXIOM_DATASET'),
'axiomUrl' => env('AXIOM_URL'),
'region' => env('AXIOM_REGION', 'us-east-1.aws'),
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm a bit confused about these changes. Could you please check if these are correct?

],
],
```
Expand Down Expand Up @@ -248,8 +249,9 @@ class AxiomHandler extends AbstractProcessingHandler
{
private $apiToken;
private $dataset;
private $axiomUrl;

public function __construct($level = Logger::DEBUG, bool $bubble = true, $apiToken = null, $dataset = null)
public function __construct($level = Logger::DEBUG, bool $bubble = true, $apiToken = null, $dataset = null, $axiomUrl = null)
{
parent::__construct($level, $bubble);
$this->apiToken = $apiToken;
Expand All @@ -259,7 +261,7 @@ class AxiomHandler extends AbstractProcessingHandler

private function initializeCurl(): \CurlHandle
{
$endpoint = "https://{$this->axiomUrl}/v1/datasets/{$this->dataset}/ingest";
$endpoint = "https://{$this->axiomUrl}/v1/ingest/{$this->dataset}";
$ch = curl_init($endpoint);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
Expand Down
2 changes: 1 addition & 1 deletion guides/send-logs-from-ruby-on-rails.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ require 'json'
class AxiomLogger
def self.send_log(log_data)
dataset_name = "DATASET_NAME"
axiom_ingest_api_url = "https://AXIOM_DOMAIN/v1/datasets/DATASET_NAME/ingest"
axiom_ingest_api_url = "https://AXIOM_DOMAIN/v1/ingest/DATASET_NAME"
ingest_token = "API_TOKEN"

conn = Faraday.new(url: axiom_ingest_api_url) do |faraday|
Expand Down
76 changes: 60 additions & 16 deletions reference/regions.mdx
Original file line number Diff line number Diff line change
@@ -1,32 +1,76 @@
---
title: 'Regions'
description: 'This page explains how to work with Axiom based on your organization’s region.'
description: 'This page explains how to work with Axiom’s unified multi-region platform.'
---

Axiom is available in multiple regions to help you comply with data residency requirements and optimize performance.

## Available regions

Axiom currently supports the following cloud regions for data ingest:

| Region | Base domain of edge ingest API endpoints | Example | Cloud provider |
| ---------- | ------------------------------------ | ------------------------------------------------- | -------------- |
| US | `https://us-east-1.aws.edge.axiom.co` | `https://us-east-1.aws.edge.axiom.co/v1/ingest/DATASET_NAME` | AWS |
| EU | `https://eu-central-1.aws.edge.axiom.co` | `https://eu-central-1.aws.edge.axiom.co/v1/ingest/DATASET_NAME` | AWS |

The base domain of other API endpoints is `https://api.axiom.co`.

<Info>
Axiom will support a unified multi-region model by early November 2025. This will allow you to manage data across different regions from a single organization. [Contact Axiom](https://www.axiom.co/contact) to learn more.
Axiom is developing support for additional regions. [Contact Axiom](https://www.axiom.co/contact) if you need a region that’s not currently supported.
</Info>

## Check your region
<Info>
Query execution currently happens in the US region only. This means that data in the EU region can leave the region when queried. As we continue to build out support for multiple regions, we will update query behavior to ensure that query execution happens in the same region as the storage region of the data being queried.

Check warning on line 24 in reference/regions.mdx

View check run for this annotation

Mintlify / Mintlify Validation (axiom) - vale-spellcheck

reference/regions.mdx#L24

Try to avoid using first-person plural like 'we'.

Check warning on line 24 in reference/regions.mdx

View check run for this annotation

Mintlify / Mintlify Validation (axiom) - vale-spellcheck

reference/regions.mdx#L24

Try to avoid using first-person plural like 'we'.
</Info>

## Default region

The default region of your organization determines where the data in your datasets are stored.

To determine your organization’s default region:

1. Click <img src="/doc-assets/icons/settings.svg" className="inline-icon" alt="Settings icon" /> **Settings > General**.
1. Find your organization’s default region in the **Region** section.

<Info>
Axiom is building support for storing data outside your default region on a dataset-by-dataset basis.

Check warning on line 37 in reference/regions.mdx

View check run for this annotation

Mintlify / Mintlify Validation (axiom) - vale-spellcheck

reference/regions.mdx#L37

Don't use trailing spaces at the end of the line.
</Info>

## Choose region

When you create a new organization, choose the region that best meets your data residency requirements and where your infrastructure is located for optimal performance.

When choosing a region, consider the following factors:

- **Data residency requirements**: If you need to comply with regulations like GDPR that require data to be stored in specific regions, choose the appropriate region.
- **Performance**: Choose the region closest to your infrastructure for lower latency.
- **Team location**: Choose the region that your team is primarily located in for better performance.

## Roadmap

Determine the region your organization uses in one of the following ways:
### Legacy infrastructure: Dedicated regional instances

- Go to the [Axiom app](https://app.axiom.co/) and check the URL. Match the base domain in the Axiom web app with the table below:
Until November 2025, Axiom operated completely separate infrastructures for different regions:

| Region | Base domain in web app |
| ---------- | ------------------------------ |
| US | `https://app.axiom.co` |
- **US instance**: `app.axiom.co` hosted in AWS `us-east-1`
- **EU instance**: `app.eu.axiom.co` hosted in AWS `eu-central-1`

- Click <img src="/doc-assets/icons/settings.svg" className="inline-icon" alt="Settings icon" /> **Settings > General**, and then find the **Region** section.
Each instance was entirely independent with separate:
- Organizations and user accounts
- Billing and subscription plans
- API endpoints and ingestion URLs
- Data storage and query infrastructure

## Axiom API reference
### Towards a unified multi-region platform

All examples in the documentation use the default US base domain `https://api.axiom.co`.
Starting in November 2025, Axiom is rolling out support for a unified platform where a single organization can manage datasets across multiple regions:

| Region | Base domain of API endpoints | Example |
| ---------- | ------------------------------------ | ------------------------------------------------- |
| US | `https://api.axiom.co` | `https://api.axiom.co/v1/datasets/DATASET_NAME/ingest` |
- **One organization, multiple regions**: Create and manage datasets in different geographic regions from a single account.
- **Unified billing**: Single subscription covering all your regions.
- **Cross-region visibility**: View and manage all your data from one console.
- **Flexible data residency**: Place each dataset in the region that best meets your compliance and performance requirements.

## Add new region
### Migration from legacy EU instance

For more information on managing additional regions, see [Manage add-ons](reference/usage-billing#manage-add-ons).
The unified multi-region model is rolling out progressively. If your organization currently uses the legacy EU instance, Axiom will contact you about the opportunity to migrate to the unified platform.
16 changes: 8 additions & 8 deletions restapi/ingest.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ To send data to Axiom in JSON format:
1. Optional: In the body of the request, set optional parameters such as `timestamp-field` and `timestamp-format`. For more information, see the [ingest data API reference](/restapi/endpoints/ingestIntoDataset).
1. Set the `Content-Type` header to `application/json`.
1. Set the `Authorization` header to `Bearer API_TOKEN`.
1. Send the POST request to `https://AXIOM_DOMAIN/v1/datasets/DATASET_NAME/ingest`.
1. Send the POST request to `https://AXIOM_DOMAIN/v1/ingest/DATASET_NAME`.

<Info>
<ReplaceDomain />
Expand All @@ -49,7 +49,7 @@ The following example request contains grouped events. The structure of the JSON
**Example request**

```bash
curl -X 'POST' 'https://AXIOM_DOMAIN/v1/datasets/DATASET_NAME/ingest' \
curl -X 'POST' 'https://AXIOM_DOMAIN/v1/ingest/DATASET_NAME' \
-H 'Authorization: Bearer API_TOKEN' \
-H 'Content-Type: application/json' \
-d '[
Expand Down Expand Up @@ -87,7 +87,7 @@ curl -X 'POST' 'https://AXIOM_DOMAIN/v1/datasets/DATASET_NAME/ingest' \
**Example request**

```bash
curl -X 'POST' 'https://AXIOM_DOMAIN/v1/datasets/DATASET_NAME/ingest' \
curl -X 'POST' 'https://AXIOM_DOMAIN/v1/ingest/DATASET_NAME' \
-H 'Authorization: Bearer API_TOKEN' \
-H 'Content-Type: application/json' \
-d '[
Expand Down Expand Up @@ -155,7 +155,7 @@ curl -X 'POST' 'https://AXIOM_DOMAIN/v1/datasets/DATASET_NAME/ingest' \
**Example request**

```bash
curl -X 'POST' 'https://AXIOM_DOMAIN/v1/datasets/DATASET_NAME/ingest' \
curl -X 'POST' 'https://AXIOM_DOMAIN/v1/ingest/DATASET_NAME' \
-H 'Authorization: Bearer API_TOKEN' \
-H 'Content-Type: application/json' \
-d '[{ "axiom": {
Expand Down Expand Up @@ -202,7 +202,7 @@ To send data to Axiom in NDJSON format:
1. Optional: In the body of the request, set optional parameters such as `timestamp-field` and `timestamp-format`. For more information, see the [ingest data API reference](/restapi/endpoints/ingestIntoDataset).
1. Set the `Content-Type` header to either `application/json` or `application/x-ndjson`.
1. Set the `Authorization` header to `Bearer API_TOKEN`. Replace `API_TOKEN` with the Axiom API token you have generated.
1. Send the POST request to `https://AXIOM_DOMAIN/v1/datasets/DATASET_NAME/ingest`. Replace `DATASET_NAME` with the name of the Axiom dataset where you want to send data.
1. Send the POST request to `https://AXIOM_DOMAIN/v1/ingest/DATASET_NAME`. Replace `DATASET_NAME` with the name of the Axiom dataset where you want to send data.

<Info>
<ReplaceDomain />
Expand All @@ -212,7 +212,7 @@ To send data to Axiom in NDJSON format:
**Example request**

```bash
curl -X 'POST' 'https://AXIOM_DOMAIN/v1/datasets/DATASET_NAME/ingest' \
curl -X 'POST' 'https://AXIOM_DOMAIN/v1/ingest/DATASET_NAME' \
-H 'Authorization: Bearer API_TOKEN' \
-H 'Content-Type: application/x-ndjson' \
-d '{"id":1,"name":"machala"}
Expand Down Expand Up @@ -249,7 +249,7 @@ To send data to Axiom in JSON format:
1. Optional: In the body of the request, set optional parameters such as `timestamp-field` and `timestamp-format`. For more information, see the [ingest data API reference](/restapi/endpoints/ingestIntoDataset).
1. Set the `Content-Type` header to `text/csv`.
1. Set the `Authorization` header to `Bearer API_TOKEN`. Replace `API_TOKEN` with the Axiom API token you have generated.
1. Send the POST request to `https://AXIOM_DOMAIN/v1/datasets/DATASET_NAME/ingest`. Replace `DATASET_NAME` with the name of the Axiom dataset where you want to send data.
1. Send the POST request to `https://AXIOM_DOMAIN/v1/ingest/DATASET_NAME`. Replace `DATASET_NAME` with the name of the Axiom dataset where you want to send data.

<Info>
<ReplaceDatasetToken />
Expand All @@ -259,7 +259,7 @@ To send data to Axiom in JSON format:
**Example request**

```bash
curl -X 'POST' 'https://AXIOM_DOMAIN/v1/datasets/DATASET_NAME/ingest' \
curl -X 'POST' 'https://AXIOM_DOMAIN/v1/ingest/DATASET_NAME' \
-H 'Authorization: Bearer API_TOKEN' \
-H 'Content-Type: text/csv' \
-d 'user, name
Expand Down
2 changes: 1 addition & 1 deletion restapi/introduction.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ Axiom API follows the REST architectural style and uses JSON for serialization.
For example, the following curl command ingests data to an Axiom dataset:

```bash
curl -X 'POST' 'https://AXIOM_DOMAIN/v1/datasets/DATASET_NAME/ingest' \
curl -X 'POST' 'https://AXIOM_DOMAIN/v1/ingest/DATASET_NAME' \
-H 'Authorization: Bearer API_TOKEN' \
-H 'Content-Type: application/json' \
-d '[
Expand Down
2 changes: 1 addition & 1 deletion send-data/aws-firehose.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Amazon Data Firehose is a service for delivering real-time streaming data to dif

1. In Axiom, determine the ID of the dataset you’ve created.
1. In Amazon Data Firehose, create an HTTP endpoint destination. For more information, see the [Amazon Data Firehose documentation](https://docs.aws.amazon.com/firehose/latest/dev/create-destination.html#create-destination-http).
1. Set HTTP endpoint URL to `https://AXIOM_DOMAIN/v1/datasets/DATASET_NAME/ingest/firehose`.
1. Set HTTP endpoint URL to `https://AXIOM_DOMAIN/v1/ingest/DATASET_NAME/firehose`.
<Info>
<ReplaceDomain />
<ReplaceDataset />
Expand Down
4 changes: 2 additions & 2 deletions send-data/aws-firelens.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ You’ll typically define this in a file called `fluent-bit.conf`:
Match *
Host AXIOM_DOMAIN
Port 443
URI /v1/datasets/DATASET_NAME/ingest
URI /v1/ingest/DATASET_NAME
Format json_lines
tls On
format json
Expand Down Expand Up @@ -104,7 +104,7 @@ Create the `fluentd.conf` file and add your configuration:
@type http
headers {"Authorization": "Bearer API_TOKEN"}
data_type json
endpoint https://AXIOM_DOMAIN/v1/datasets/DATASET_NAME/ingest
endpoint https://AXIOM_DOMAIN/v1/ingest/DATASET_NAME
sourcetype ecs
</match>
```
Expand Down
4 changes: 2 additions & 2 deletions send-data/aws-iot-rules.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ def lambda_handler(event, context):
axiom_domain = os.environ['AXIOM_DOMAIN']

# Construct the Axiom API URL using the dataset name
axiom_api_url = f"https://{axiom_domain}/v1/datasets/{dataset_name}/ingest"
axiom_api_url = f"https://{axiom_domain}/v1/ingest/{dataset_name}"

# Retrieve the Axiom API token from the environment variable
api_token = os.environ['API_TOKEN']
Expand Down Expand Up @@ -62,7 +62,7 @@ def lambda_handler(event, context):

In the environment variables section of the Lambda function configuration, add the following environment variables:
- `DATASET_NAME` is the name of the Axiom dataset where you want to send data.
- `AXIOM_DOMAIN` is the Axiom domain that your organization uses. For more information, see [Regions](/reference/regions).
- `AXIOM_DOMAIN` is the Axiom domain that your organization uses. Replace `AXIOM_DOMAIN` with `us-east-1.aws.edge.axiom.co` for the US region, or `eu-central-1.aws.edge.axiom.co` for the EU region. For more information, see [Regions](/reference/regions).
- `API_TOKEN` is the Axiom API token you have generated. For added security, store the API token in an environment variable.

<Note>
Expand Down
4 changes: 2 additions & 2 deletions send-data/aws-s3.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ def lambda_handler(event, context):
# Prepare Axiom API request
dataset_name = os.environ['DATASET_NAME']
axiom_domain = os.environ['AXIOM_DOMAIN']
axiom_api_url = f"https://{axiom_domain}/v1/datasets/{dataset_name}/ingest"
axiom_api_url = f"https://{axiom_domain}/v1/ingest/{dataset_name}"
api_token = os.environ['API_TOKEN']
axiom_headers = {
"Authorization": f"Bearer {api_token}",
Expand All @@ -125,7 +125,7 @@ def lambda_handler(event, context):
In the environment variables section of the Lambda function configuration, add the following environment variables:

- `DATASET_NAME` is the name of the Axiom dataset where you want to send data.
- `AXIOM_DOMAIN` is the Axiom domain that your organization uses. For more information, see [Regions](/reference/regions).
- `AXIOM_DOMAIN` is the Axiom domain that your organization uses. Replace `AXIOM_DOMAIN` with `us-east-1.aws.edge.axiom.co` for the US region, or `eu-central-1.aws.edge.axiom.co` for the EU region. For more information, see [Regions](/reference/regions).
- `API_TOKEN` is the Axiom API token you have generated. For added security, store the API token in an environment variable.

<CallOut kind="info">
Expand Down
2 changes: 1 addition & 1 deletion send-data/cribl.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ Open Cribl’s UI and navigate to **Destinations > HTTP**. Click on `+` Add New

- **Name:** Choose a name for the destination.

- **Endpoint URL:** The URL of your Axiom log ingest endpoint `https://AXIOM_DOMAIN/v1/datasets/DATASET_NAME/ingest`.
- **Endpoint URL:** The URL of your Axiom log ingest endpoint `https://AXIOM_DOMAIN/v1/ingest/DATASET_NAME`.

<Info>
<ReplaceDomain />
Expand Down
2 changes: 1 addition & 1 deletion send-data/fluent-bit.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ Fluent Bit is an open-source log processor and forwarder that allows you to coll
Match *
Host AXIOM_DOMAIN
Port 443
URI /v1/datasets/DATASET_NAME/ingest
URI /v1/ingest/DATASET_NAME
Header Authorization Bearer API_TOKEN
Compress gzip
Format json
Expand Down
Loading