Skip to content
Open
Show file tree
Hide file tree
Changes from 30 commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
183da34
Add details on allowing audit log access to non-Owners
benenharrington Oct 15, 2025
c27f78a
Update endpoints for edge ingest
benenharrington Nov 3, 2025
4a4a030
merge main
benenharrington Nov 3, 2025
ac82ea7
Stick with existing AXIOM_DOMAIN pattern
benenharrington Nov 3, 2025
0a48e31
Use correct placeholder name
benenharrington Nov 5, 2025
7eab1f1
Update snippets/replace-domain.mdx
benenharrington Nov 5, 2025
3a33a72
Update reference/regions.mdx
benenharrington Nov 5, 2025
89c8d52
Merge branch 'main' into benen/edge-ingest
benenharrington Nov 5, 2025
0b61284
Update region info
benenharrington Nov 10, 2025
b3f354e
Clarify query execution language
benenharrington Nov 10, 2025
f16e8b6
Add different snippet for edge
manototh Nov 11, 2025
e4f2c42
Add Edge v1 endpoint, update links to it
manototh Nov 11, 2025
fa562e4
Vale feedback
benenharrington Nov 11, 2025
c0302ed
Fix Laravel
manototh Nov 11, 2025
852b664
Merge branch 'benen/edge-ingest' of github.com:axiomhq/docs into bene…
benenharrington Nov 11, 2025
3b2f056
Fix examples in V1 api
manototh Nov 11, 2025
741ebea
Merge branch 'benen/edge-ingest' of https://github.com/axiomhq/docs i…
manototh Nov 11, 2025
9eca501
Fix more snippets
manototh Nov 11, 2025
63a6834
Add info to API intro
manototh Nov 11, 2025
c477263
Update base-domains.mdx
manototh Nov 11, 2025
a695d0c
Update Regions page with clearer status and roadmap
manototh Nov 11, 2025
013e758
Update aws-s3.mdx
manototh Nov 11, 2025
6573889
Merge branch 'main' into benen/edge-ingest
manototh Nov 11, 2025
23ce38e
Update datasets.mdx
manototh Nov 11, 2025
dd28beb
Fix typo
benenharrington Nov 11, 2025
61387da
Add info from Dom
manototh Nov 12, 2025
3b6b98a
Implement Michal's review
manototh Nov 13, 2025
da87dee
Update regions.mdx
manototh Nov 13, 2025
1a037bd
Update reference/datasets.mdx
manototh Nov 13, 2025
6963804
Merge branch 'main' into benen/edge-ingest
manototh Nov 13, 2025
321dce2
Update reference/datasets.mdx
manototh Nov 13, 2025
26d6721
Move Support additional regions
manototh Nov 14, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions apps/hex.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ sidebarTitle: 'Hex'

import Prerequisites from "/snippets/standard-prerequisites.mdx"
import ReplaceDatasetToken from "/snippets/replace-dataset-token.mdx"
import ReplaceDomain from "/snippets/replace-domain.mdx"
import ReplaceEdgeDomain from "/snippets/replace-edge-domain.mdx"
import ReplaceDataset from "/snippets/replace-dataset.mdx"

Hex is a powerful collaborative data platform that allows you to create notebooks with Python/SQL code and interactive visualizations.
Expand All @@ -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_EDGE_DOMAIN/v1/ingest/DATASET_NAME' \
-H 'Authorization: Bearer API_TOKEN' \
-H 'Content-Type: application/json' \
-d '[
Expand All @@ -39,7 +39,7 @@ curl -X 'POST' 'https://AXIOM_DOMAIN/v1/datasets/DATASET_NAME/ingest' \

<Info>
<ReplaceDatasetToken />
<ReplaceDomain />
<ReplaceEdgeDomain />
</Info>

Verify that your data has been ingested correctly by running an APL query in the Axiom UI.
Expand Down
6 changes: 6 additions & 0 deletions docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -628,6 +628,12 @@
"restapi/endpoints/deleteDataset"
]
},
{
"group": "Edge endpoints",
"pages": [
"restapi/endpoints/ingestToDataset"
]
},
{
"group": "Map field endpoints",
"pages": [
Expand Down
6 changes: 3 additions & 3 deletions guides/send-logs-from-apache-log4j.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ enlargeLogo: true

import Prerequisites from "/snippets/standard-prerequisites.mdx"
import ReplaceDatasetToken from "/snippets/replace-dataset-token.mdx"
import ReplaceDomain from "/snippets/replace-domain.mdx"
import ReplaceEdgeDomain from "/snippets/replace-edge-domain.mdx"

Log4j is a Java logging framework developed by the Apache Software Foundation and widely used in the Java community. This page covers how to get started with Log4j, configure it to forward log messages to Fluentd, and send logs to Axiom.

Expand Down 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_EDGE_DOMAIN/v1/ingest/DATASET_NAME
headers {"Authorization":"Bearer API_TOKEN"}
json_array true
<buffer>
Expand All @@ -371,7 +371,7 @@ To configure Fluentd, create a configuration file. Create a new file named `flue

<Info>
<ReplaceDatasetToken />
<ReplaceDomain />
<ReplaceEdgeDomain />
</Info>

This configuration does the following:
Expand Down
16 changes: 8 additions & 8 deletions guides/send-logs-from-dotnet.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ logoId: 'dotnet'

import Prerequisites from "/snippets/standard-prerequisites.mdx"
import ReplaceDatasetToken from "/snippets/replace-dataset-token.mdx"
import ReplaceDomain from "/snippets/replace-domain.mdx"
import ReplaceEdgeDomain from "/snippets/replace-edge-domain.mdx"

<Prerequisites />
- [Install the .NET SDK](https://dotnet.microsoft.com/download).
Expand Down Expand Up @@ -51,8 +51,8 @@ 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 axiomEdgeDomain = "AXIOM_EDGE_DOMAIN";
var axiomUri = $"https://{axiomEdgeDomain}/v1/ingest/{datasetName}";

// Replace with your Axiom API token
var apiToken = "API_TOKEN"; // Ensure your API token is correct
Expand Down Expand Up @@ -95,7 +95,7 @@ public static class AxiomLogger

<Info>
<ReplaceDatasetToken />
<ReplaceDomain />
<ReplaceEdgeDomain />
</Info>

### Configure the main program
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_EDGE_DOMAIN/v1/ingest/DATASET_NAME"
HttpHeaders="Authorization: Bearer API_TOKEN"
contentType="application/json">
<layout xsi:type="JsonLayout" includeAllProperties="true">
Expand All @@ -436,7 +436,7 @@ Set up NLog by creating an `NLog.config` file or configuring it programmatically

<Info>
<ReplaceDatasetToken />
<ReplaceDomain />
<ReplaceEdgeDomain />
</Info>

### Configure the main program
Expand Down
14 changes: 8 additions & 6 deletions guides/send-logs-from-laravel.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ logoId: 'laravel'

import Prerequisites from "/snippets/standard-prerequisites.mdx"
import ReplaceDatasetToken from "/snippets/replace-dataset-token.mdx"
import ReplaceDomain from "/snippets/replace-domain.mdx"
import ReplaceEdgeDomain from "/snippets/replace-edge-domain.mdx"

This guide explains integrating Axiom as a logging solution in a Laravel app. Using Axiom’s capabilities with a custom log channel, you can efficiently send your app’s logs to Axiom for storage, analysis, and monitoring. This integration uses Monolog, Laravel’s underlying logging library, to create a custom logging handler that forwards logs to Axiom.

Expand Down 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,14 +133,14 @@ 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=AXIOM_EDGE_DOMAIN
LOG_LEVEL=debug
LOG_DEPRECATIONS_CHANNEL=null
```

<Info>
<ReplaceDatasetToken />
<ReplaceDomain />
<ReplaceEdgeDomain />
</Info>

### Deprecations log channel
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'),
'axiomUrl' => env('AXIOM_DOMAIN'),
],
],
```
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
6 changes: 3 additions & 3 deletions guides/send-logs-from-ruby-on-rails.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ logoId: 'ruby'
---

import ReplaceDatasetToken from "/snippets/replace-dataset-token.mdx"
import ReplaceDomain from "/snippets/replace-domain.mdx"
import ReplaceEdgeDomain from "/snippets/replace-edge-domain.mdx"
import Prerequisites from "/snippets/standard-prerequisites.mdx"

This guide provides step-by-step instructions on how to send logs from a Ruby on Rails app to Axiom using the Faraday library. By following this guide, you configure your Rails app to send logs to Axiom, allowing you to monitor and analyze your app logs effectively.
Expand Down 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_EDGE_DOMAIN/v1/ingest/DATASET_NAME"
ingest_token = "API_TOKEN"

conn = Faraday.new(url: axiom_ingest_api_url) do |faraday|
Expand All @@ -75,7 +75,7 @@ end

<Info>
<ReplaceDatasetToken />
<ReplaceDomain />
<ReplaceEdgeDomain />
</Info>

## Test with the Axiom logger
Expand Down
4 changes: 2 additions & 2 deletions reference/datasets.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -73,13 +73,13 @@ To create a dataset using the Axiom app, follow these steps:
1. Click <img src="/doc-assets/icons/settings.svg" className="inline-icon" alt="Settings icon" /> **Settings > Datasets and views**.
1. Click **New dataset**.
1. Name the dataset and add an optional description.
1. In **Data retention**, select for how long to store your data in this dataset. For more information, see [Specify data retention period](#specify-data-retention-period).
1. In **Kind**, select one of the following:
- Select **Axiom Events** if you plan to use the dataset for event data that doesn’t follow OpenTelemetry (OTel) conventions.
- If you plan to send OTel data to the dataset, select the type of OTel data you want to use the dataset for. You must use dedicated datasets for each OTel component. For more information, see [Send OpenTelemetry data to Axiom](/send-data/opentelemetry).
1. In **Data retention**, select for how long to store your data in this dataset. For more information, see [Specify data retention period](#specify-data-retention-period).
1. Click **Save dataset**.

To create a dataset using the Axiom API, send a POST request to the [datasets endpoint](https://axiom.co/docs/restapi/endpoints/createDataset).
To create a dataset using the Axiom API, send a POST request to the [datasets endpoint](/restapi/endpoints/createDataset).

Dataset names are 1 to 128 characters in length. They only contain ASCII alphanumeric characters and the hyphen (`-`) character.

Expand Down
2 changes: 1 addition & 1 deletion reference/limits.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ If you try to ingest data that exceeds these limits, Axiom does the following:

Axiom creates the following two fields automatically for a new dataset:

- `_time` is the timestamp of the event. If the data you ingest doesn’t have a `_time` field, Axiom assigns the time of the data ingest to the events. If you ingest data using the [Ingest data](/restapi/endpoints/ingestIntoDataset) API endpoint, you can specify the timestamp field with the [timestamp-field](/restapi/endpoints/ingestIntoDataset#parameter-timestamp-field) parameter.
- `_time` is the timestamp of the event. If the data you ingest doesn’t have a `_time` field, Axiom assigns the time of the data ingest to the events. If you ingest data using the [Ingest data](/restapi/endpoints/ingestToDataset) API endpoint, you can specify the timestamp field with the [timestamp-field](/restapi/endpoints/ingestToDataset#parameter-timestamp-field) parameter.
- `_sysTime` is the time when you ingested the data.

In most cases, use `_time` to define the timestamp of events. In rare cases, if you experience clock skews on your event-producing systems, `_sysTime` can be useful.
Expand Down
2 changes: 1 addition & 1 deletion reference/optimize-usage.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ keywords: ['query', 'gb hours']

## Optimize data loading

When you send data via the [Ingest data](/restapi/endpoints/ingestIntoDataset) API endpoint, ingest volume is based on the uncompressed size of the HTTP request. In this case, body size dominates and metadata overhead is usually negligible.
When you send data via the [Ingest data](/restapi/endpoints/ingestToDataset) API endpoint, ingest volume is based on the uncompressed size of the HTTP request. In this case, body size dominates and metadata overhead is usually negligible.

If you ingest data via API, using the CSV format comes with the following trade-offs:

Expand Down
103 changes: 85 additions & 18 deletions reference/regions.mdx
Original file line number Diff line number Diff line change
@@ -1,32 +1,99 @@
---
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.'
---

<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.
</Info>
import BaseDomains from "/snippets/base-domains.mdx"

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

Determine the region your organization uses in one of the following ways:
## Towards a unified multi-region platform

- 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:
Axiom is rolling out support for a unified platform where a single organization can manage datasets across multiple regions. This will give you complete control to decide where your data is stored and processed.

| Region | Base domain in web app |
| ---------- | ------------------------------ |
| US | `https://app.axiom.co` |
### Current capabilities

- Click <img src="/doc-assets/icons/settings.svg" className="inline-icon" alt="Settings icon" /> **Settings > General**, and then find the **Region** section.
- You choose the default region when you create a new organization.
- You can choose from two available regions: US and EU.
- You can’t change the default region after creating the organization.
- Axiom stores the data you ingest in the default region of your organization.
- When you run a query, the query executes in your region, but Axiom routes the query results through the US region. This means that when you query data stored the EU region, the query results leave the EU region.

## Axiom API reference
The current implementation is useful if you want to ingest data to the EU region, but your query results can leave the EU region. If your organization has data sovereignty requirements that are stricter than the current implementation, Axiom recommends waiting for the next phase of the rollout before migrating.

All examples in the documentation use the default US base domain `https://api.axiom.co`.
### Roadmap

| Region | Base domain of API endpoints | Example |
| ---------- | ------------------------------------ | ------------------------------------------------- |
| US | `https://api.axiom.co` | `https://api.axiom.co/v1/datasets/DATASET_NAME/ingest` |
Axiom rolls out its unified multi-region platform in phases. This approach ensures you can migrate when the capabilities align with your specific data residency requirements.

## Add new region
1. Support additional regions (coming soon)
1. Complete data locality (coming soon)

For more information on managing additional regions, see [Manage add-ons](reference/usage-billing#manage-add-ons).
- Axiom routes query results through the same region where data is stored.
- Monitor and dashboard operations respect organization region boundaries.
- Full compliance with regional data protection requirements (for example, GDPR).

In this phase, if your organization requires EU data sovereignty, you’ll be able to migrate with confidence.

1. Unified multi-region platform (in development)

- One organization managing datasets across multiple geographic regions.
- Choose a default region for your organization, add regions to your organization, and configure individual datasets to store data in one of your regions.
- Unified billing covering all your regions.

In this phase, regions function as self-contained units that coexist within one organization while preserving data sovereignty guarantees.

Axiom routes some of your personal data (for example, email and name when you log in) through US servers, and this won’t change in the rollout of the multi-region platform.

Your view can help shape this roadmap. [Contact Axiom](https://www.axiom.co/contact) if you need a region that’s not currently supported or if you have any other suggestions.

## Available regions

Axiom currently supports the following cloud regions for data ingest:

<BaseDomains />

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

## Determine default region

The default region of your organization determines where Axiom stores your data.

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.

## 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.

## Legacy infrastructure

Until November 2025, Axiom operated separate infrastructures for two dedicated regional instances:

| Instance | Base domain of Axiom Console | Base domain of API endpoints |
| ---------- | ------------------------------ | ----------------------- |
| US | `https://app.axiom.co` | `https://api.axiom.co` |
| EU | `https://app.eu.axiom.co` | `https://api.eu.axiom.co` |

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

### Migration from legacy EU instance

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.

<Note>
All examples in the Axiom API reference use the base domain `https://api.axiom.co`, which is the default for the legacy US instance. If your organization uses the legacy EU instance, use the base domain `https://api.eu.axiom.co` until Axiom migrates your organization to the unified platform.
</Note>
4 changes: 4 additions & 0 deletions restapi/endpoints/ingestToDataset.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
title: Ingest data to dataset
openapi: "v1-edge post /ingest/{dataset-id}"
---
Loading