logsmall
menu_book  API reference · v0.1 · same shape as the Datadog API
tagv1 codeopenapi.json key  Get an API key

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.

FieldTypeNotes
messagestringrequired · the log line itself
servicestringe.g. checkout-api
ddsourcestringtechnology, e.g. nginx
ddtagsstringcomma-separated, e.g. env:prod,team:web
hostnamestringdefaults 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.

FieldTypeNotes
filter.querystringrequired · e.g. service:checkout status:error
filter.fromstringRFC-3339 or relative now-15m
filter.tostringdefaults to now
page.limitint1–1000, default 100
sortstringtimestamp / -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 }]
  }'