logsmall API — v1
The logsmall API mirrors the Datadog API surface so existing Datadog SDKs work after a one-line endpoint swap. Send DD-API-KEY + DD-APPLICATION-KEY headers as before, point your client at https://api.logsmall.com, and every request shape Datadog accepts is accepted here too. Use the language tabs to copy-paste a call in Curl, Python, Node, Go, Java, .NET, Ruby, or PHP.
Logs
Submit log events, search history, and tail recent logs in real time. All endpoints accept the same payload shapes as the Datadog Logs API.
Submit logs
POST /v1/input/<API_KEY>
Send a single log event or a batch (up to 5 MB compressed, 10 MB uncompressed). Maximum 1,000 events per array, 256 KB per single event.
| Field | Type | Notes |
|---|---|---|
| message | string | required · the log line itself |
| service | string | e.g. checkout-api |
| ddsource | string | technology, e.g. nginx |
| ddtags | string | comma-separated, e.g. env:prod,team:web |
| hostname | string | defaults to source IP reverse-DNS |
# Send a single log event curl -X POST "https://api.logsmall.com/v1/input/$LOGSMALL_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "message": "request completed in 142ms", "service": "checkout-api", "ddsource": "nodejs", "ddtags": "env:prod,team:web", "hostname": "web-01" }'
from datadog_api_client import ApiClient, Configuration from datadog_api_client.v2.api.logs_api import LogsApi from datadog_api_client.v2.model.http_log import HTTPLog from datadog_api_client.v2.model.http_log_item import HTTPLogItem config = Configuration(host="https://api.logsmall.com") config.api_key["apiKeyAuth"] = os.environ["LOGSMALL_API_KEY"] with ApiClient(config) as client: LogsApi(client).submit_log(body=HTTPLog([ HTTPLogItem(message="request completed in 142ms", service="checkout-api", ddsource="python", ddtags="env:prod"), ]))
import { client, v2 } from "@datadog/datadog-api-client"; const configuration = client.createConfiguration({ baseServer: new client.BaseServerConfiguration("https://api.logsmall.com", {}), authMethods: { apiKeyAuth: process.env.LOGSMALL_API_KEY } }); await new v2.LogsApi(configuration).submitLog({ body: [{ message: "request completed in 142ms", service: "checkout-api", ddsource: "node" }] });
package main import ( "context" "github.com/DataDog/datadog-api-client-go/v2/api/datadog" "github.com/DataDog/datadog-api-client-go/v2/api/datadogV2" ) func main() { cfg := datadog.NewConfiguration() cfg.Host = "api.logsmall.com" api := datadogV2.NewLogsApi(datadog.NewAPIClient(cfg)) api.SubmitLog(context.Background(), []datadogV2.HTTPLogItem{{ Message: "request completed in 142ms", Service: datadog.PtrString("checkout-api"), }}) }
import com.datadog.api.client.ApiClient; import com.datadog.api.client.v2.api.LogsApi; import com.datadog.api.client.v2.model.*; ApiClient client = ApiClient.getDefaultApiClient(); client.setServerVariables(Map.of("site", "logsmall.com")); new LogsApi(client).submitLog(List.of( new HTTPLogItem().message("request completed in 142ms") .service("checkout-api").ddsource("java")));
using Datadog.Api.Client; using Datadog.Api.Client.Apis.V2; using Datadog.Api.Client.Models.V2; var config = new Configuration { BasePath = "https://api.logsmall.com" }; config.ApiKey["DD-API-KEY"] = Environment.GetEnvironmentVariable("LOGSMALL_API_KEY"); await new LogsApi(config).SubmitLogAsync(new List<HTTPLogItem> { new() { Message = "request completed in 142ms", Service = "checkout-api" } });
require "datadog_api_client" DatadogAPIClient.configure { |c| c.server_variables[:site] = "logsmall.com" c.api_key["DD-API-KEY"] = ENV["LOGSMALL_API_KEY"] } DatadogAPIClient::V2::LogsAPI.new.submit_log([ DatadogAPIClient::V2::HTTPLogItem.new(message: "request completed in 142ms", service: "checkout-api") ])
<?php use DataDog\APIClient\V2\Api\LogsApi; use DataDog\APIClient\Configuration; $config = Configuration::getDefaultConfiguration() ->setHost('https://api.logsmall.com') ->setApiKey('DD-API-KEY', getenv('LOGSMALL_API_KEY')); (new LogsApi(null, $config))->submitLog([ ['message' => 'request completed in 142ms', 'service' => 'checkout-api'] ]);
Search logs
POST /api/v2/logs/events/search
Run a Lucene-style query across the indexed log corpus. Returns events with cursor-based pagination. Identical request/response shape to the Datadog Logs Search API.
| Field | Type | Notes |
|---|---|---|
| filter.query | string | required · e.g. service:checkout status:error |
| filter.from | string | RFC-3339 or relative now-15m |
| filter.to | string | defaults to now |
| page.limit | int | 1–1000, default 100 |
| sort | string | timestamp / -timestamp |
curl -X POST "https://api.logsmall.com/api/v2/logs/events/search" \ -H "DD-API-KEY: $LOGSMALL_API_KEY" \ -H "DD-APPLICATION-KEY: $LOGSMALL_APP_KEY" \ -H "Content-Type: application/json" \ -d '{ "filter": { "query": "service:checkout status:error", "from": "now-15m" }, "page": { "limit": 50 }, "sort": "-timestamp" }'
from datadog_api_client.v2.api.logs_api import LogsApi from datadog_api_client.v2.model.logs_list_request import LogsListRequest req = LogsListRequest(filter={"query": "service:checkout status:error", "from": "now-15m"}, page={"limit": 50}, sort="-timestamp") LogsApi(client).list_logs(body=req)
await new v2.LogsApi(configuration).listLogs({ body: { filter: { query: "service:checkout status:error", from: "now-15m" }, page: { limit: 50 }, sort: "-timestamp" } });
req := datadogV2.LogsListRequest{
Filter: &datadogV2.LogsQueryFilter{
Query: datadog.PtrString("service:checkout status:error"),
From: datadog.PtrString("now-15m"),
},
Page: &datadogV2.LogsListRequestPage{ Limit: datadog.PtrInt32(50) },
}
api.ListLogs(ctx, datadogV2.ListLogsOptionalParameters{ Body: &req })Aggregate logs
POST /api/v2/logs/analytics/aggregate
Group + count + percentile aggregations across logs. Used by dashboards. Same request shape as Datadog's analytics aggregation endpoint.
curl -X POST "https://api.logsmall.com/api/v2/logs/analytics/aggregate" \ -H "DD-API-KEY: $LOGSMALL_API_KEY" \ -H "DD-APPLICATION-KEY: $LOGSMALL_APP_KEY" \ -d '{ "compute": [{ "aggregation": "count" }], "filter": { "query": "*" }, "group_by": [{ "facet": "service", "limit": 10 }] }'