StatsD · Schema

DogStatsD Event

A DogStatsD event payload, decoded from the line-protocol form `_e{,}:|<TEXT>|d:<TIMESTAMP>|h:<HOSTNAME>|p:<PRIORITY>|t:<ALERT_TYPE>|s:<SOURCE>|#<TAGS>`.</p> <div style="display: flex; flex-wrap: wrap; gap: 0.3rem; margin-top: 1rem;"> <span class="tag-sm">Aggregation</span><span class="tag-sm">Daemon</span><span class="tag-sm">DogStatsD</span><span class="tag-sm">Line Protocol</span><span class="tag-sm">Metrics</span><span class="tag-sm">Observability</span><span class="tag-sm">Open-Source</span><span class="tag-sm">StatsD</span><span class="tag-sm">TCP</span><span class="tag-sm">UDP</span><span class="tag-sm">Wire Protocol</span> </div> </div> <h3 style="font-size: 1.1rem; font-weight: 700; margin-bottom: 0.75rem;">Properties</h3> <div style="background: white; border: 1px solid #e3e7ee; border-radius: 10px; overflow: hidden;"> <table class="props-table"> <thead> <tr> <th>Name</th> <th>Type</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><span class="prop-name">title</span></td> <td><span class="prop-type">string</span></td> <td>Event title — short, human-readable summary. The wire prefix `{N,M}` encodes its UTF-8 byte length.</td> </tr> <tr> <td><span class="prop-name">text</span></td> <td><span class="prop-type">string</span></td> <td>Event body. May contain `\n` (escaped). Its UTF-8 byte length is the second integer in the wire prefix.</td> </tr> <tr> <td><span class="prop-name">timestamp</span></td> <td><span class="prop-type">integer</span></td> <td>Optional `d:` field — Unix epoch in seconds. Defaults to the agent's current time.</td> </tr> <tr> <td><span class="prop-name">hostname</span></td> <td><span class="prop-type">string</span></td> <td>Optional `h:` field — host the event refers to.</td> </tr> <tr> <td><span class="prop-name">priority</span></td> <td><span class="prop-type">string</span></td> <td>Optional `p:` field — display priority.</td> </tr> <tr> <td><span class="prop-name">alertType</span></td> <td><span class="prop-type">string</span></td> <td>Optional `t:` field — alert severity.</td> </tr> <tr> <td><span class="prop-name">sourceTypeName</span></td> <td><span class="prop-type">string</span></td> <td>Optional `s:` field — origin of the event for Datadog source routing.</td> </tr> <tr> <td><span class="prop-name">aggregationKey</span></td> <td><span class="prop-type">string</span></td> <td>Optional `k:` field — groups related events together in the timeline.</td> </tr> <tr> <td><span class="prop-name">tags</span></td> <td><span class="prop-type">object</span></td> <td>Optional `#k:v,k:v` tag bag.</td> </tr> </tbody> </table> </div> <div style="margin-top: 2rem;"> <a href="https://github.com/api-evangelist/statsd/blob/main/json-schema/dogstatsd-event-schema.json" target="_blank" rel="noopener" class="btn btn-outline-dark btn-sm">View JSON Schema on GitHub</a> </div> <link rel="stylesheet" href="/assets/prism/prism-coy.min.css"> <link rel="stylesheet" href="/assets/prism/prism-line-numbers.min.css"> <style> .src-widget { background: #fdfdfd; border: 1px solid #e3e7ee; border-radius: 10px; overflow: hidden; margin-top: 0.75rem; } .src-widget-head { display: flex; align-items: center; gap: 0.5rem; padding: 0.55rem 0.85rem; background: #f8fafc; border-bottom: 1px solid #e3e7ee; flex-wrap: wrap; } .src-label { color: #475569; font-weight: 600; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 0.8rem; flex: 0 0 auto; } .src-picker { flex: 0 0 auto; max-width: 360px; padding: 0.3em 0.55em; border: 1px solid #cbd5e1; border-radius: 4px; background: #fff; font-size: 0.78rem; color: #1a1a2e; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; cursor: pointer; } .src-picker:focus { outline: none; border-color: #1e40af; box-shadow: 0 0 0 2px rgba(30, 64, 175, 0.15); } .src-loading { color: #94a3b8; font-style: italic; padding: 1rem; } .src-search { flex: 1 1 200px; min-width: 140px; } .src-search input { width: 100%; padding: 0.3em 0.6em; border: 1px solid #cbd5e1; border-radius: 4px; font-size: 0.8rem; background: #fff; color: #1a1a2e; } .src-search input:focus { outline: none; border-color: #1e40af; box-shadow: 0 0 0 2px rgba(30, 64, 175, 0.15); } .src-actions { display: flex; gap: 0.25rem; flex: 0 0 auto; } .src-actions a, .src-actions button { background: none; border: 1px solid transparent; padding: 0.25em 0.6em; color: #1e40af; font-size: 0.78rem; font-weight: 500; cursor: pointer; text-decoration: none; border-radius: 4px; line-height: 1.4; } .src-actions a:hover, .src-actions button:hover { background: #eef2f7; } .src-actions button.active { background: #dbeafe; border-color: #93c5fd; } .src-actions button:disabled { color: #94a3b8; cursor: not-allowed; } .src-actions button:disabled:hover { background: none; } .src-widget pre[class*="language-"] { margin: 0; padding: 1rem 0; background: #fdfdfd; box-shadow: none; border: none; max-height: 540px; overflow: auto; font-size: 0.82rem; line-height: 1.5; } .src-widget pre[class*="language-"] > code { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; padding-right: 1rem; } .src-widget pre[class*="language-"]::before, .src-widget pre[class*="language-"]::after { display: none; } .src-widget pre.line-numbers { padding-left: 3.5em; counter-reset: linenumber; position: relative; } .src-widget pre.line-numbers > code { position: relative; white-space: inherit; } .src-widget pre.line-numbers .line-numbers-rows { position: absolute; pointer-events: none; top: 1rem; font-size: 100%; left: -3em; width: 2.7em; letter-spacing: -1px; border-right: 1px solid #e3e7ee; user-select: none; } .src-widget pre.line-numbers .line-numbers-rows > span { display: block; counter-increment: linenumber; } .src-widget pre.line-numbers .line-numbers-rows > span:before { content: counter(linenumber); color: #cbd5e1; display: block; padding-right: 0.7em; text-align: right; font-size: 0.78rem; } .src-widget .token.key, .src-widget .token.property, .src-widget .token.atrule { color: #1e40af; font-weight: 600; } .src-widget .token.string { color: #047857; } .src-widget .token.number, .src-widget .token.boolean, .src-widget .token.null { color: #b45309; } .src-widget .token.comment { color: #94a3b8; font-style: italic; } .src-widget .token.punctuation, .src-widget .token.operator { color: #64748b; } .src-widget .token.tag { color: #7c3aed; } .src-widget .token.anchor, .src-widget .token.alias { color: #be185d; } .src-widget mark.src-hit { background: #fef08a; color: inherit; padding: 0; border-radius: 2px; } .src-widget mark.src-hit-active { background: #fb923c; color: #fff; } .src-copied { color: #047857 !important; } .src-empty { padding: 2rem 1rem; text-align: center; color: #94a3b8; font-size: 0.85rem; } </style> <h3 class="section-title" id="source">JSON Schema</h3> <div class="src-widget" data-src-widget data-original-lang="json" data-current-lang="json" data-original-filename="dogstatsd-event-schema.json"> <div class="src-widget-head"> <span class="src-label" data-src-filename>dogstatsd-event-schema.json</span> <span class="src-search"> <input type="search" data-src-search placeholder="Search in source… (n / N to navigate)" aria-label="Search source"> </span> <span class="src-actions"> <button type="button" data-src-toggle data-target="yaml" aria-label="View as YAML">YAML</button> <button type="button" data-src-toggle data-target="json" aria-label="View as JSON">JSON</button> <button type="button" data-src-download aria-label="Download source">Download</button> <a data-src-raw href="https://raw.githubusercontent.com/api-evangelist/statsd/refs/heads/main/json-schema/dogstatsd-event-schema.json" target="_blank" rel="noopener">Raw ↑</a> <button type="button" data-src-copy>Copy</button> </span> </div> <pre class="line-numbers language-json"><code class="language-json" data-src-code>{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://api-evangelist.github.io/statsd/json-schema/dogstatsd-event-schema.json", "title": "DogStatsD Event", "description": "A DogStatsD event payload, decoded from the line-protocol form `_e{<TITLE_UTF8_LENGTH>,<TEXT_UTF8_LENGTH>}:<TITLE>|<TEXT>|d:<TIMESTAMP>|h:<HOSTNAME>|p:<PRIORITY>|t:<ALERT_TYPE>|s:<SOURCE>|#<TAGS>`.", "type": "object", "required": ["title", "text"], "properties": { "title": { "type": "string", "description": "Event title — short, human-readable summary. The wire prefix `{N,M}` encodes its UTF-8 byte length." }, "text": { "type": "string", "description": "Event body. May contain `\\n` (escaped). Its UTF-8 byte length is the second integer in the wire prefix." }, "timestamp": { "type": "integer", "description": "Optional `d:` field — Unix epoch in seconds. Defaults to the agent's current time." }, "hostname": { "type": "string", "description": "Optional `h:` field — host the event refers to." }, "priority": { "type": "string", "enum": ["normal", "low"], "default": "normal", "description": "Optional `p:` field — display priority." }, "alertType": { "type": "string", "enum": ["error", "warning", "info", "success"], "default": "info", "description": "Optional `t:` field — alert severity." }, "sourceTypeName": { "type": "string", "description": "Optional `s:` field — origin of the event for Datadog source routing." }, "aggregationKey": { "type": "string", "description": "Optional `k:` field — groups related events together in the timeline." }, "tags": { "type": "object", "additionalProperties": { "type": "string" }, "description": "Optional `#k:v,k:v` tag bag." } }, "additionalProperties": false, "examples": [ { "title": "An exception occurred", "text": "Cannot parse CSV file from 10.0.0.17", "alertType": "warning", "tags": { "err_type": "bad_file" } } ] } </code></pre> </div> <script src="/assets/prism/prism-core.min.js" defer></script> <script src="/assets/prism/prism-yaml.min.js" defer></script> <script src="/assets/prism/prism-json.min.js" defer></script> <script src="/assets/prism/prism-line-numbers.min.js" defer></script> <script src="/assets/prism/js-yaml.min.js" defer></script> <script> (function () { if (window.__srcWidgetInit) return; window.__srcWidgetInit = true; function initWidget(widget) { var codeEl = widget.querySelector('[data-src-code]'); var preEl = widget.querySelector('pre'); var search = widget.querySelector('[data-src-search]'); var toggles = widget.querySelectorAll('[data-src-toggle]'); var downloadBtn = widget.querySelector('[data-src-download]'); var copyBtn = widget.querySelector('[data-src-copy]'); var fileLabel = widget.querySelector('[data-src-filename]'); var picker = widget.querySelector('[data-src-picker]'); var rawLink = widget.querySelector('[data-src-raw]'); var headingEl = widget.previousElementSibling && widget.previousElementSibling.tagName === 'H3' ? widget.previousElementSibling : null; var fetchedCache = {}; // Original raw text — we always re-render from this so toggles + searches don't compound. var originalLang = widget.dataset.originalLang; var originalText = codeEl.textContent; var originalFilename = widget.dataset.originalFilename; var currentLang = originalLang; var currentText = originalText; var searchHits = []; var activeHit = -1; function highlight() { if (window.Prism) window.Prism.highlightElement(codeEl); } function setActiveToggle() { toggles.forEach(function (b) { if (b.dataset.target === currentLang) b.classList.add('active'); else b.classList.remove('active'); }); } function updateFilenameForLang() { if (!fileLabel) return; var base = (currentSourceFilename || originalFilename).replace(/\.(ya?ml|json)$/i, ''); fileLabel.textContent = base + '.' + currentLang; } var currentSourceFilename = originalFilename; var currentSourceUrl = null; if (rawLink) currentSourceUrl = rawLink.getAttribute('href'); function setLangContent(lang, text) { currentLang = lang; currentText = text; codeEl.textContent = text; codeEl.className = 'language-' + lang; preEl.className = 'line-numbers language-' + lang; highlight(); setActiveToggle(); updateFilenameForLang(); runSearch(); } function tryConvert(targetLang) { if (targetLang === currentLang) return; if (!window.jsyaml) return; try { var parsed; if (currentLang === 'yaml') parsed = window.jsyaml.load(currentText); else parsed = JSON.parse(currentText); var out; if (targetLang === 'yaml') { out = window.jsyaml.dump(parsed, { indent: 2, lineWidth: 100, noRefs: true }); } else { out = JSON.stringify(parsed, null, 2); } setLangContent(targetLang, out); } catch (err) { alert('Cannot convert: source is not valid ' + currentLang.toUpperCase() + '.\n' + err.message); } } // ---- Search highlighting (DOM walker over text nodes inside <code>) ---- function clearSearch() { widget.querySelectorAll('mark.src-hit').forEach(function (m) { var parent = m.parentNode; while (m.firstChild) parent.insertBefore(m.firstChild, m); parent.removeChild(m); parent.normalize(); }); searchHits = []; activeHit = -1; } function runSearch() { clearSearch(); var q = (search.value || '').trim(); if (q.length < 2) return; var qLower = q.toLowerCase(); var walker = document.createTreeWalker(codeEl, NodeFilter.SHOW_TEXT, null); var nodes = []; var n; while ((n = walker.nextNode())) nodes.push(n); nodes.forEach(function (node) { var text = node.nodeValue; var lower = text.toLowerCase(); var idx = lower.indexOf(qLower); if (idx === -1) return; var frag = document.createDocumentFragment(); var cursor = 0; while (idx !== -1) { if (idx > cursor) frag.appendChild(document.createTextNode(text.slice(cursor, idx))); var mark = document.createElement('mark'); mark.className = 'src-hit'; mark.textContent = text.slice(idx, idx + q.length); frag.appendChild(mark); searchHits.push(mark); cursor = idx + q.length; idx = lower.indexOf(qLower, cursor); } if (cursor < text.length) frag.appendChild(document.createTextNode(text.slice(cursor))); node.parentNode.replaceChild(frag, node); }); if (searchHits.length) jumpToHit(0); } function jumpToHit(i) { if (!searchHits.length) return; if (activeHit >= 0 && searchHits[activeHit]) searchHits[activeHit].classList.remove('src-hit-active'); activeHit = ((i % searchHits.length) + searchHits.length) % searchHits.length; var el = searchHits[activeHit]; el.classList.add('src-hit-active'); el.scrollIntoView({ block: 'center', behavior: 'smooth' }); } // ---- Wire up ---- var debounce; search.addEventListener('input', function () { clearTimeout(debounce); debounce = setTimeout(runSearch, 100); }); search.addEventListener('keydown', function (ev) { if (ev.key === 'Enter' || ev.key === 'n') { ev.preventDefault(); jumpToHit(activeHit + 1); } else if (ev.key === 'N' || (ev.key === 'p')) { ev.preventDefault(); jumpToHit(activeHit - 1); } else if (ev.key === 'Escape') { search.value = ''; runSearch(); } }); toggles.forEach(function (b) { b.addEventListener('click', function () { tryConvert(b.dataset.target); }); }); downloadBtn.addEventListener('click', function () { var blob = new Blob([codeEl.textContent], { type: currentLang === 'json' ? 'application/json' : 'application/yaml' }); var url = URL.createObjectURL(blob); var a = document.createElement('a'); a.href = url; a.download = fileLabel.textContent; document.body.appendChild(a); a.click(); document.body.removeChild(a); setTimeout(function () { URL.revokeObjectURL(url); }, 0); }); copyBtn.addEventListener('click', function () { navigator.clipboard.writeText(codeEl.textContent).then(function () { var orig = copyBtn.textContent; copyBtn.textContent = 'Copied'; copyBtn.classList.add('src-copied'); setTimeout(function () { copyBtn.textContent = orig; copyBtn.classList.remove('src-copied'); }, 1500); }); }); // ---- Picker (provider pages with multiple specs) ---- function applySource(text, lang, filename, url, heading) { currentSourceFilename = filename || originalFilename; currentSourceUrl = url || null; if (rawLink) { if (url) { rawLink.setAttribute('href', url); rawLink.style.display = ''; } else { rawLink.style.display = 'none'; } } if (headingEl && heading) headingEl.textContent = heading; setLangContent(lang, text); } if (picker) { picker.addEventListener('change', function () { var opt = picker.options[picker.selectedIndex]; var url = opt.dataset.url; var fmt = opt.dataset.format || 'yaml'; var fname = opt.dataset.filename || ''; var heading = opt.dataset.heading || ''; if (!url) { // Original embedded source applySource(originalText, originalLang, originalFilename, picker.options[0].dataset.url || null, picker.options[0].dataset.heading || ''); return; } if (fetchedCache[url]) { applySource(fetchedCache[url], fmt, fname, url, heading); return; } codeEl.textContent = 'Loading ' + fname + '…'; codeEl.className = ''; preEl.className = ''; fetch(url).then(function (r) { if (!r.ok) throw new Error('HTTP ' + r.status); return r.text(); }).then(function (text) { fetchedCache[url] = text; applySource(text, fmt, fname, url, heading); }).catch(function (err) { codeEl.textContent = 'Could not load: ' + err.message; }); }); // Stash the default option's url so we can restore "Raw" link when reset. if (rawLink && picker.options[0]) { picker.options[0].dataset.url = rawLink.getAttribute('href') || ''; picker.options[0].dataset.heading = (headingEl ? headingEl.textContent : '') || ''; } } // Auto-fetch when initial source is empty but a remote URL is available. // This happens when the build found an external OpenAPI URL but didn't // inline the content — the widget fetches it on page load instead. if (!originalText.trim() && currentSourceUrl) { var remoteUrl = currentSourceUrl; codeEl.textContent = 'Loading…'; codeEl.className = ''; preEl.className = 'line-numbers language-' + originalLang; fetch(remoteUrl) .then(function (r) { if (!r.ok) throw new Error('HTTP ' + r.status); return r.text(); }) .then(function (text) { var ext = remoteUrl.replace(/\?.*/, '').split('.').pop().toLowerCase(); var fmt = ext === 'json' ? 'json' : 'yaml'; originalText = text; originalLang = fmt; currentLang = fmt; widget.dataset.originalLang = fmt; applySource(text, fmt, originalFilename, remoteUrl, headingEl ? headingEl.textContent : ''); }) .catch(function (err) { codeEl.textContent = 'Could not load spec: ' + err.message; }); } // Initial state setActiveToggle(); // Wait for Prism to load before highlighting / line-numbers wiring. var tries = 0; var waitPrism = setInterval(function () { if (window.Prism && window.Prism.plugins) { clearInterval(waitPrism); highlight(); } else if (++tries > 80) { clearInterval(waitPrism); } }, 50); } function initAll() { document.querySelectorAll('[data-src-widget]').forEach(initWidget); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initAll); } else { initAll(); } })(); </script> <style> /* One row of options, not four stacked blocks. align-items:start so opening a <details> grows only its own card instead of stretching every sibling. */ .apimcp-bar { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 0.75rem; margin: 1rem 0 0; } /* flex over a fixed 4-column grid: two of the four cards are conditional, and a grid would leave a hole in the row on the sections that render three or two. */ .apimcp-card { flex: 1 1 220px; min-width: 0; background: #fff; border: 1px solid #e3e7ee; border-left: 3px solid var(--apimcp-accent, #6c757d); border-radius: 10px; padding: 0.9rem 1rem; } .apimcp-card h4 { font-size: 0.9rem; font-weight: 700; color: #1a1a2e; margin: 0 0 0.35rem; } .apimcp-card p { font-size: 0.78rem; line-height: 1.4; color: #6c757d; margin: 0; } .apimcp-card p + p, .apimcp-card > * + p { margin-top: 0.5rem; } .apimcp-card code { font-size: 0.72rem; word-break: break-all; } .apimcp-card summary { font-size: 0.78rem; color: #0d6efd; font-weight: 600; cursor: pointer; } .apimcp-card summary:hover { text-decoration: underline; } .apimcp-card details { margin-top: 0.15rem; } .apimcp-card ul { list-style: none; padding: 0; margin: 0.5rem 0 0; font-size: 0.78rem; } .apimcp-card ul li { margin-bottom: 0.5rem; } .apimcp-card ul li span { display: block; color: #6c757d; } .apimcp-card pre { background: #f6f8fa; border: 1px solid #e3e7ee; border-radius: 6px; padding: 0.5rem; margin: 0; white-space: pre-wrap; word-break: break-all; } .apimcp-curl { margin-top: 0.6rem; } .apimcp-curl .apimcp-label { display: block; font-size: 0.72rem; color: #6c757d; margin-bottom: 0.25rem; } .apimcp-link { display: inline-block; margin-top: 0.55rem; font-size: 0.78rem; font-weight: 600; color: #0d6efd; text-decoration: none; } .apimcp-link:hover { text-decoration: underline; } /* Three auth providers side by side keeps this card the same height as the others; stacked buttons were what made the row ragged. */ .apimcp-auth { display: flex; gap: 0.4rem; margin-top: 0.15rem; } .apimcp-auth a { flex: 1 1 0; min-width: 0; display: inline-flex; align-items: center; justify-content: center; gap: 0.3rem; padding: 0.35rem 0.4rem; border: 1px solid #d7dce5; border-radius: 6px; background: #fff; color: #4a5568; font-size: 0.72rem; font-weight: 600; text-decoration: none; } .apimcp-auth a:hover { border-color: #0d6efd; color: #0d6efd; } .apimcp-auth svg { flex: none; } @media (max-width: 575.98px) { .apimcp-card { flex-basis: 100%; } } </style> <h2 class="section-anchor" id="api-mcp"><a href="#api-mcp">Work with this as data</a></h2> <p class="section-blurb"> Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.</p> <div class="apimcp-bar"> <div class="apimcp-card" style="--apimcp-accent: #3098d8;"> <h4>MCP server</h4> <p>One button, every client — Claude, Cursor, VS Code and the rest.</p> <script src="https://install.apicommons.org/button.js" async></script> <mcp-install-button server="https://apis.io/server.json" label="Install the MCP server" color="#3098d8"></mcp-install-button> <p><code>https://apis.io/mcp</code></p> </div> <div class="apimcp-card" style="--apimcp-accent: #6d28d9;"> <h4>Tools for schemas</h4> <details> <summary>4 MCP tools reach this</summary> <ul> <li><code>find_json_schemas</code><span>Browse and filter every JSON Schema in the catalog.</span></li> <li><code>apis_io_search</code><span>START HERE — APIs, providers and tags for one query, each with its total.</span></li> <li><code>resolve</code><span>Turn a domain, URL or GitHub org into the provider it belongs to.</span></li> <li><code>find_cohorts</code><span>Every scored population of providers in the catalog.</span></li> </ul> </details> <a href="https://apis.io/developer/mcp-server/" class="apimcp-link">All 92 tools →</a> </div> <div class="apimcp-card" style="--apimcp-accent: #198754;"> <h4>Call it yourself</h4> <details> <summary>curl for this page</summary> <div class="apimcp-curl"> <span class="apimcp-label">This JSON Schema</span> <pre><code>curl "https://apis.io/api/v1/json-schemas/dogstatsd-event"</code></pre> </div> <div class="apimcp-curl"> <span class="apimcp-label">All schemas</span> <pre><code>curl "https://apis.io/api/v1/json-schemas?limit=25"</code></pre> </div> </details> <p>Discovery needs no key. Ratings and market analysis are Pro.</p> </div><div class="apimcp-card" style="--apimcp-accent: #6c757d;"> <h4>Get an API key</h4> <!-- roadmap#272 — this said "no email required". The intent was "no form to fill in"; what it told a data subject AT THE MOMENT OF COLLECTION was that no email is collected. The callback stores one on every account it creates (auth/index.mjs) and indexes it in the EmailIndex GSI, and a verified email is what joins a second provider to an existing account. The copy has to say what the code does. --> <p>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 <a href="/privacy/">Privacy Policy</a> and <a href="/terms/">Terms</a>.</p> <div class="apimcp-auth"> <a href="https://apis.io/api/v1/auth/login?provider=github"> <svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor" aria-hidden="true"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27s1.36.09 2 .27c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z"/></svg> <span>GitHub</span> </a> <a href="https://apis.io/api/v1/auth/login?provider=google"> <svg viewBox="0 0 18 18" width="14" height="14" aria-hidden="true"><path fill="#4285F4" d="M17.64 9.2c0-.64-.06-1.25-.16-1.84H9v3.48h4.84a4.14 4.14 0 0 1-1.8 2.72v2.26h2.92c1.7-1.57 2.68-3.88 2.68-6.62Z"/><path fill="#34A853" d="M9 18c2.43 0 4.47-.8 5.96-2.18l-2.92-2.26c-.81.54-1.84.86-3.04.86-2.34 0-4.32-1.58-5.03-3.7H.96v2.33A9 9 0 0 0 9 18Z"/><path fill="#FBBC05" d="M3.97 10.72a5.41 5.41 0 0 1 0-3.44V4.95H.96a9 9 0 0 0 0 8.1l3.01-2.33Z"/><path fill="#EA4335" d="M9 3.58c1.32 0 2.5.45 3.44 1.35l2.58-2.58C13.46.89 11.43 0 9 0A9 9 0 0 0 .96 4.95l3.01 2.33C4.68 5.16 6.66 3.58 9 3.58Z"/></svg> <span>Google</span> </a> <a href="https://apis.io/api/v1/auth/login?provider=linkedin"> <svg viewBox="0 0 24 24" width="14" height="14" fill="#0A66C2" aria-hidden="true"><path d="M20.45 20.45h-3.56v-5.57c0-1.33-.03-3.04-1.85-3.04-1.85 0-2.14 1.45-2.14 2.94v5.67H9.35V9h3.41v1.56h.05c.48-.9 1.63-1.85 3.36-1.85 3.6 0 4.27 2.37 4.27 5.45v6.29ZM5.34 7.43a2.06 2.06 0 1 1 0-4.13 2.06 2.06 0 0 1 0 4.13ZM7.12 20.45H3.55V9h3.57v11.45ZM22.22 0H1.77C.79 0 0 .77 0 1.72v20.56C0 23.23.79 24 1.77 24h20.45c.98 0 1.78-.77 1.78-1.72V1.72C24 .77 23.2 0 22.22 0Z"/></svg> <span>LinkedIn</span> </a> </div> <p>A second provider on the same verified email joins the account you already have.</p> </div> </div> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://apis.io/" }, { "@type": "ListItem", "position": 2, "name": "StatsD", "item": "https://apis.io/providers/statsd/" }, { "@type": "ListItem", "position": 3, "name": "DogStatsD Event" } ] } </script> </main> <footer class="footer"> <div class="container"><div class="footer-grid"><div class="footer-col"> <h6 class="footer-col-title">Catalog</h6> <ul class="footer-col-list"><li><a href="https://apis.io/providers/">Providers</a></li><li><a href="https://apis.io/apis/">APIs</a></li><li><a href="https://apis.io/tags/">Tags</a></li><li><a href="https://apis.io/industries/">Industries</a></li><li><a href="https://apis.io/areas/">Areas</a></li><li><a href="https://apis.io/regions/">Regions</a></li><li><a href="https://apis.io/countries/">Countries</a></li><li><a href="https://apis.io/vcs/">Venture Capital</a></li><li><a href="https://apis.io/secondary-market/">Secondary Market</a></li><li><a href="https://apis.io/estates/">API Estates</a></li><li><a href="https://apis.io/capabilities/">Business Capabilities</a></li></ul> </div><div class="footer-col"> <h6 class="footer-col-title">Artifacts</h6> <ul class="footer-col-list"><li><a href="https://apis.io/capabilities/">Business Capabilities</a></li><li><a href="https://apis.io/extensions/">OpenAPI Extensions</a></li><li><a href="https://apis.io/headers/">HTTP Headers</a></li><li><a href="https://apis.io/schemas/">Schemas</a></li><li><a href="https://apis.io/examples/">Examples</a></li><li><a href="https://apis.io/json-structure/">JSON Structure</a></li><li><a href="https://apis.io/collections/">Collections</a></li><li><a href="https://apis.io/arazzos/">Arazzo Workflows</a></li><li><a href="https://apis.io/servers/">MCP Servers</a></li><li><a href="https://apis.io/a2a/">A2A Agent Cards</a></li><li><a href="https://apis.io/ard/">Agent Discovery</a></li><li><a href="https://apis.io/agent-skills/">Agent Skills</a></li></ul> </div><div class="footer-col"> <h6 class="footer-col-title">Signals</h6> <ul class="footer-col-list"><li><a href="https://apis.io/rating/">Kin Score</a></li><li><a href="https://apis.io/security/">Security Posture</a></li><li><a href="https://apis.io/scopes/">OAuth Scopes</a></li><li><a href="https://apis.io/agentic-access/">Agentic Access</a></li><li><a href="https://apis.io/plans/">Plans</a></li><li><a href="https://apis.io/rate-limits/">Rate Limits</a></li><li><a href="https://apis.io/finops/">FinOps</a></li></ul> </div><div class="footer-col"> <h6 class="footer-col-title">Platform</h6> <ul class="footer-col-list"><li><a href="https://apis.io/developer/">Developer Docs</a></li><li><a href="https://apis.io/onboarding/">Onboarding</a></li><li><a href="https://apis.io/unlock/">Data Access</a></li><li><a href="https://apis.io/analytics/">Analytics</a></li><li><a href="https://apis.io/search-terms/">Search Terms</a></li><li><a href="https://apis.io/model-visibility/">Model Visibility</a></li><li><a href="https://apis.io/changelog/">Changelog</a></li></ul> </div><div class="footer-col"> <h6 class="footer-col-title">APIs.io</h6> <ul class="footer-col-list"><li><a href="https://apis.io/about/">About</a></li><li><a href="https://apis.io/blog/">Blog</a></li><li><a href="https://usecommune.com/n/apisio">Newsletter</a></li><li><a href="https://apis.io/add/">Add Your API</a></li><li><a href="https://apis.io/support/">Support</a></li><li><a href="https://github.com/api-search">GitHub</a></li></ul> </div></div><div class="footer-bar"> <span class="footer-copy">© APIs.io</span> <div class="footer-legal"><a href="http://apisjson.org">APIs.json</a><a href="http://apicommons.org">API Commons</a><a href="https://apievangelist.com">API Evangelist</a><a href="https://apis.io/terms/">Terms</a><a href="https://apis.io/privacy/">Privacy</a></div> </div> </div> </footer> <script src="/assets/js/kin-glyph.js"></script> </body> </html>