StatsD Wire Protocol

The StatsD wire protocol is a UTF-8, line-oriented, UDP-by-default packet format used to push application metrics from clients to a StatsD daemon. Each line takes the form `bucket:value|type[|@sample_rate]`, where `type` is one of `c` (counter), `g` (gauge, with optional `+`/`-` for delta), `ms` (timer), `h` (histogram), `s` (set), or `m` (meter, in some dialects). Multiple metrics may share a packet when separated by `\n`. The protocol is connectionless on UDP (port 8125) and connection-oriented on TCP, where each metric MUST be terminated by `\n`. The wire format is the canonical contract between StatsD, its tag-aware dialects (DogStatsD, InfluxDB, SignalFx), and the wider ecosystem of clients and servers.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/statsd-wire-protocol"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

AsyncAPI Specification

statsd-wire-protocol-asyncapi.yml Raw ↑
asyncapi: 3.0.0
info:
  title: StatsD Wire Protocol
  version: 1.0.0
  description: >-
    The StatsD wire protocol: a UTF-8, line-oriented, UDP-by-default text format
    used by application code to push metrics to a StatsD daemon for in-memory
    aggregation. Each datagram contains one or more lines of the form
    `bucket:value|type[|@sample_rate]`. UDP is the canonical transport (port
    8125); TCP is also supported when each metric is terminated by `\n`.
  contact:
    name: StatsD Maintainers
    url: https://github.com/statsd/statsd
  license:
    name: MIT
    url: https://github.com/statsd/statsd/blob/master/LICENSE
  tags:
  - name: Counters
  - name: Gauges
  - name: Histograms
  - name: Line Protocol
  - name: Meters
  - name: Metrics
  - name: Sets
  - name: Timers
  - name: UDP
  - name: Wire Protocol
defaultContentType: text/plain

servers:
  udp:
    host: '{host}:8125'
    protocol: udp
    description: >-
      Default StatsD UDP listener. One UDP packet contains at least one StatsD
      metric; multiple metrics may share a packet if separated by `\n`. Packets
      are fire-and-forget; no acknowledgement is returned.
    variables:
      host:
        default: 127.0.0.1
        description: Hostname or IP of the StatsD daemon.
  tcp:
    host: '{host}:8125'
    protocol: tcp
    description: >-
      Optional StatsD TCP listener. Metrics may span multiple TCP segments;
      each metric MUST be terminated by `\n`. No protocol-level
      acknowledgement.
    variables:
      host:
        default: 127.0.0.1
        description: Hostname or IP of the StatsD daemon.

channels:
  metricsIngest:
    address: 'statsd/metrics'
    description: >-
      Single ingest channel — every StatsD metric flows over the same UDP/TCP
      port. The bucket name in the line payload is the de facto routing key.
    messages:
      counter:
        $ref: '#/components/messages/Counter'
      gauge:
        $ref: '#/components/messages/Gauge'
      timer:
        $ref: '#/components/messages/Timer'
      histogram:
        $ref: '#/components/messages/Histogram'
      set:
        $ref: '#/components/messages/Set'
      meter:
        $ref: '#/components/messages/Meter'
      multi:
        $ref: '#/components/messages/MultiMetric'

operations:
  sendMetric:
    action: send
    channel:
      $ref: '#/channels/metricsIngest'
    title: Send Metric To StatsD
    summary: Send Metric To StatsD
    description: >-
      Publish one or more metric lines to the StatsD daemon. Each line is of
      the form `bucket:value|type[|@sample_rate]`. The daemon aggregates lines
      in memory and flushes derived series to its configured backends on the
      `flushInterval` boundary (default 10000 ms).
    messages:
    - $ref: '#/channels/metricsIngest/messages/counter'
    - $ref: '#/channels/metricsIngest/messages/gauge'
    - $ref: '#/channels/metricsIngest/messages/timer'
    - $ref: '#/channels/metricsIngest/messages/histogram'
    - $ref: '#/channels/metricsIngest/messages/set'
    - $ref: '#/channels/metricsIngest/messages/meter'
    - $ref: '#/channels/metricsIngest/messages/multi'

components:
  messages:
    Counter:
      name: counter
      title: Counter Metric
      summary: Counter Metric
      description: >-
        Increment (or decrement, with a negative value) a named counter by
        `value`. Counters reset to zero on every `flushInterval`. Counters
        SHOULD include an `@sample_rate` when emitted under load.
      contentType: text/plain
      payload:
        type: string
        pattern: '^[A-Za-z0-9._:\-]+:-?\d+(\.\d+)?\|c(\|@\d*\.?\d+)?$'
        examples:
        - 'gorets:1|c'
        - 'gorets:1|c|@0.1'
      tags:
      - name: Counters

    Gauge:
      name: gauge
      title: Gauge Metric
      summary: Gauge Metric
      description: >-
        Set a named gauge to an arbitrary value. The daemon retains the value
        across flushes. A `+`/`-` prefix on the value (e.g. `+4`, `-10`) is a
        delta against the existing gauge value rather than a replacement.
      contentType: text/plain
      payload:
        type: string
        pattern: '^[A-Za-z0-9._:\-]+:[+\-]?\d+(\.\d+)?\|g$'
        examples:
        - 'gaugor:333|g'
        - 'gaugor:+4|g'
        - 'gaugor:-10|g'
      tags:
      - name: Gauges

    Timer:
      name: timer
      title: Timer Metric
      summary: Timer Metric
      description: >-
        Record a duration in milliseconds against a named timer. The daemon
        computes count, sum, mean, lower, upper, and a configurable set of
        percentiles (default 90th) on flush, emitting them under
        `stats.timers.<bucket>.<suffix>`.
      contentType: text/plain
      payload:
        type: string
        pattern: '^[A-Za-z0-9._:\-]+:\d+(\.\d+)?\|ms(\|@\d*\.?\d+)?$'
        examples:
        - 'glork:320|ms'
        - 'glork:320|ms|@0.1'
      tags:
      - name: Timers

    Histogram:
      name: histogram
      title: Histogram Metric
      summary: Histogram Metric
      description: >-
        Histogram metric — an extension of timers, configured via the
        `histogram` config key. Each bucket records a count of observed values
        falling within configured bin boundaries (non-inclusive upper limits).
        Use `|h` for an explicit histogram metric in DogStatsD-compatible
        dialects.
      contentType: text/plain
      payload:
        type: string
        pattern: '^[A-Za-z0-9._:\-]+:\d+(\.\d+)?\|h(\|@\d*\.?\d+)?$'
        examples:
        - 'render:0.42|h'
        - 'render:0.42|h|@0.5'
      tags:
      - name: Histograms

    Set:
      name: set
      title: Set Metric
      summary: Set Metric
      description: >-
        Record a value as a member of a named set; the daemon counts the
        cardinality of unique values observed between flushes. Useful for
        counting unique users, IPs, request IDs, etc.
      contentType: text/plain
      payload:
        type: string
        pattern: '^[A-Za-z0-9._:\-]+:.+\|s$'
        examples:
        - 'uniques:765|s'
      tags:
      - name: Sets

    Meter:
      name: meter
      title: Meter Metric
      summary: Meter Metric
      description: >-
        Meter — event-rate metric documented in the b/statsd_spec community
        spec. Functionally equivalent to a counter that reports per-second
        rates. Not all servers implement it natively; most modern servers fold
        meters into counters.
      contentType: text/plain
      payload:
        type: string
        pattern: '^[A-Za-z0-9._:\-]+:\d+(\.\d+)?\|m$'
        examples:
        - 'pageviews:1|m'
      tags:
      - name: Meters

    MultiMetric:
      name: multi
      title: Multi-Metric Packet
      summary: Multi-Metric Packet
      description: >-
        Multiple metric lines packed into a single UDP datagram or TCP segment,
        separated by `\n`. Permitted for every metric type. Sender SHOULD keep
        the total packet size below the network MTU to avoid IP fragmentation.
      contentType: text/plain
      payload:
        type: string
        examples:
        - "gorets:1|c\nglork:320|ms\ngaugor:333|g\nuniques:765|s"
      tags:
      - name: Line Protocol