{
  "slug": "sdk/curl",
  "title": "cURL examples",
  "description": "Send Cuitty events from any shell with a single curl invocation.",
  "url": "https://cuitty.com/docs/sdk/curl",
  "markdown_url": "https://cuitty.com/docs/sdk/curl.md",
  "json_url": "https://cuitty.com/docs/sdk/curl.json",
  "frontmatter": {
    "title": "cURL examples",
    "description": "Send Cuitty events from any shell with a single curl invocation.",
    "order": 6,
    "section": "SDK",
    "updatedAt": "2026-04-27"
  },
  "headings": [
    {
      "depth": 1,
      "slug": "curl-examples",
      "text": "cURL examples"
    },
    {
      "depth": 2,
      "slug": "send-an-audit-event",
      "text": "Send an audit event"
    },
    {
      "depth": 2,
      "slug": "health-check",
      "text": "Health check"
    },
    {
      "depth": 2,
      "slug": "idempotent-retries",
      "text": "Idempotent retries"
    }
  ],
  "body_markdown": "# cURL examples\n\nFor one-off scripts, CI hooks, and shell-only environments, the wire protocol is reachable from a plain `curl`.\n\n## Send an audit event\n\n```bash\nBODY='{\n  \"events\": [{\n    \"type\": \"audit\",\n    \"ts\": \"2026-04-27T12:34:56Z\",\n    \"data\": {\n      \"actor\": \"alice@example.com\",\n      \"action\": \"secret.rotate\",\n      \"resource\": \"stripe.live_key\"\n    }\n  }]\n}'\n\nSIG=$(printf '%s' \"$BODY\" \\\n  | openssl dgst -sha256 -hmac \"$CUITTY_WEBHOOK_SECRET\" -hex \\\n  | awk '{print $2}')\n\ncurl -X POST https://app.cuitty.com/api/ingest \\\n  -H \"Authorization: Bearer $CUITTY_API_KEY\" \\\n  -H \"X-Cuitty-Signature: $SIG\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"$BODY\"\n```\n\n## Health check\n\n```bash\ncurl https://app.cuitty.com/api/health\n```\n\n## Idempotent retries\n\nAdd an `X-Cuitty-Idempotency-Key` header (any UUID). The portal deduplicates retries with the same key for 24 hours.\n\n```bash\ncurl -X POST https://app.cuitty.com/api/ingest \\\n  -H \"X-Cuitty-Idempotency-Key: $(uuidgen)\" \\\n  ...\n```",
  "body_html": "<h1 id=\"curl-examples\">cURL examples</h1>\n<p>For one-off scripts, CI hooks, and shell-only environments, the wire protocol is reachable from a plain <code>curl</code>.</p>\n<h2 id=\"send-an-audit-event\">Send an audit event</h2>\n<pre class=\"astro-code github-dark\" style=\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex=\"0\" data-language=\"bash\"><code><span class=\"line\"><span style=\"color:#E1E4E8\">BODY</span><span style=\"color:#F97583\">=</span><span style=\"color:#9ECBFF\">'{</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">  \"events\": [{</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">    \"type\": \"audit\",</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">    \"ts\": \"2026-04-27T12:34:56Z\",</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">    \"data\": {</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">      \"actor\": \"alice@example.com\",</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">      \"action\": \"secret.rotate\",</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">      \"resource\": \"stripe.live_key\"</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">    }</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">  }]</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">}'</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">SIG</span><span style=\"color:#F97583\">=</span><span style=\"color:#E1E4E8\">$(</span><span style=\"color:#79B8FF\">printf</span><span style=\"color:#9ECBFF\"> '%s'</span><span style=\"color:#9ECBFF\"> \"</span><span style=\"color:#E1E4E8\">$BODY</span><span style=\"color:#9ECBFF\">\"</span><span style=\"color:#79B8FF\"> \\</span></span>\n<span class=\"line\"><span style=\"color:#F97583\">  |</span><span style=\"color:#B392F0\"> openssl</span><span style=\"color:#9ECBFF\"> dgst</span><span style=\"color:#79B8FF\"> -sha256</span><span style=\"color:#79B8FF\"> -hmac</span><span style=\"color:#9ECBFF\"> \"</span><span style=\"color:#E1E4E8\">$CUITTY_WEBHOOK_SECRET</span><span style=\"color:#9ECBFF\">\"</span><span style=\"color:#79B8FF\"> -hex</span><span style=\"color:#79B8FF\"> \\</span></span>\n<span class=\"line\"><span style=\"color:#F97583\">  |</span><span style=\"color:#B392F0\"> awk</span><span style=\"color:#9ECBFF\"> '{print $2}'</span><span style=\"color:#E1E4E8\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color:#B392F0\">curl</span><span style=\"color:#79B8FF\"> -X</span><span style=\"color:#9ECBFF\"> POST</span><span style=\"color:#9ECBFF\"> https://app.cuitty.com/api/ingest</span><span style=\"color:#79B8FF\"> \\</span></span>\n<span class=\"line\"><span style=\"color:#79B8FF\">  -H</span><span style=\"color:#9ECBFF\"> \"Authorization: Bearer </span><span style=\"color:#E1E4E8\">$CUITTY_API_KEY</span><span style=\"color:#9ECBFF\">\"</span><span style=\"color:#79B8FF\"> \\</span></span>\n<span class=\"line\"><span style=\"color:#79B8FF\">  -H</span><span style=\"color:#9ECBFF\"> \"X-Cuitty-Signature: </span><span style=\"color:#E1E4E8\">$SIG</span><span style=\"color:#9ECBFF\">\"</span><span style=\"color:#79B8FF\"> \\</span></span>\n<span class=\"line\"><span style=\"color:#79B8FF\">  -H</span><span style=\"color:#9ECBFF\"> \"Content-Type: application/json\"</span><span style=\"color:#79B8FF\"> \\</span></span>\n<span class=\"line\"><span style=\"color:#79B8FF\">  -d</span><span style=\"color:#9ECBFF\"> \"</span><span style=\"color:#E1E4E8\">$BODY</span><span style=\"color:#9ECBFF\">\"</span></span></code></pre>\n<h2 id=\"health-check\">Health check</h2>\n<pre class=\"astro-code github-dark\" style=\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex=\"0\" data-language=\"bash\"><code><span class=\"line\"><span style=\"color:#B392F0\">curl</span><span style=\"color:#9ECBFF\"> https://app.cuitty.com/api/health</span></span></code></pre>\n<h2 id=\"idempotent-retries\">Idempotent retries</h2>\n<p>Add an <code>X-Cuitty-Idempotency-Key</code> header (any UUID). The portal deduplicates retries with the same key for 24 hours.</p>\n<pre class=\"astro-code github-dark\" style=\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex=\"0\" data-language=\"bash\"><code><span class=\"line\"><span style=\"color:#B392F0\">curl</span><span style=\"color:#79B8FF\"> -X</span><span style=\"color:#9ECBFF\"> POST</span><span style=\"color:#9ECBFF\"> https://app.cuitty.com/api/ingest</span><span style=\"color:#79B8FF\"> \\</span></span>\n<span class=\"line\"><span style=\"color:#79B8FF\">  -H</span><span style=\"color:#9ECBFF\"> \"X-Cuitty-Idempotency-Key: $(</span><span style=\"color:#B392F0\">uuidgen</span><span style=\"color:#9ECBFF\">)\"</span><span style=\"color:#79B8FF\"> \\</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">  ...</span></span></code></pre>",
  "links_out": []
}