{
  "slug": "sdk/go",
  "title": "Go SDK",
  "description": "Send Cuitty events from Go services with a context-aware client.",
  "url": "https://cuitty.com/docs/sdk/go",
  "markdown_url": "https://cuitty.com/docs/sdk/go.md",
  "json_url": "https://cuitty.com/docs/sdk/go.json",
  "frontmatter": {
    "title": "Go SDK",
    "description": "Send Cuitty events from Go services with a context-aware client.",
    "order": 3,
    "section": "SDK",
    "updatedAt": "2026-04-27"
  },
  "headings": [
    {
      "depth": 1,
      "slug": "go-sdk",
      "text": "Go SDK"
    },
    {
      "depth": 2,
      "slug": "planned-api",
      "text": "Planned API"
    },
    {
      "depth": 2,
      "slug": "wire-protocol-equivalent-today",
      "text": "Wire-protocol equivalent today"
    },
    {
      "depth": 2,
      "slug": "live-performance-numbers",
      "text": "Live performance numbers"
    },
    {
      "depth": 2,
      "slug": "see-also",
      "text": "See also"
    }
  ],
  "body_markdown": "# Go SDK\n\n> **Status: Preview.** The Go SDK is on the Phase 3 roadmap. Use the [wire protocol](/docs/reference/wire-protocol) until then.\n\n## Planned API\n\n```go\nc := cuitty.New(cuitty.Config{\n    PortalURL: \"https://app.cuitty.com\",\n    ProjectID: id,\n    APIKey:    key,\n})\n\nc.Audit(ctx, cuitty.AuditEvent{\n    Actor:    \"alice@example.com\",\n    Action:   \"secret.rotate\",\n    Resource: \"stripe.live_key\",\n})\n```\n\n## Wire-protocol equivalent today\n\n```go\npackage main\n\nimport (\n    \"bytes\"\n    \"crypto/hmac\"\n    \"crypto/sha256\"\n    \"encoding/hex\"\n    \"net/http\"\n    \"os\"\n)\n\nfunc main() {\n    body := []byte(`{\"events\":[{\"type\":\"audit\",\"ts\":\"2026-04-27T12:00:00Z\",\"data\":{\"actor\":\"alice@example.com\",\"action\":\"secret.rotate\",\"resource\":\"stripe.live_key\"}}]}`)\n    mac := hmac.New(sha256.New, []byte(os.Getenv(\"CUITTY_WEBHOOK_SECRET\")))\n    mac.Write(body)\n    sig := hex.EncodeToString(mac.Sum(nil))\n\n    req, _ := http.NewRequest(\"POST\", \"https://app.cuitty.com/api/ingest\",\n        bytes.NewReader(body))\n    req.Header.Set(\"Authorization\", \"Bearer \"+os.Getenv(\"CUITTY_API_KEY\"))\n    req.Header.Set(\"Content-Type\", \"application/json\")\n    req.Header.Set(\"X-Cuitty-Signature\", sig)\n\n    http.DefaultClient.Do(req)\n}\n```\n\n## Live performance numbers\n\nSee live benchmarks at [https://benchmarks.cuitty.com/sdks/go](https://benchmarks.cuitty.com/sdks/go).\n\n## See also\n\n- [Wire protocol](/docs/reference/wire-protocol)\n- [SDK parity & divergence](/docs/sdk/parity)",
  "body_html": "<h1 id=\"go-sdk\">Go SDK</h1>\n<blockquote>\n<p><strong>Status: Preview.</strong> The Go SDK is on the Phase 3 roadmap. Use the <a href=\"/docs/reference/wire-protocol\">wire protocol</a> until then.</p>\n</blockquote>\n<h2 id=\"planned-api\">Planned API</h2>\n<pre class=\"astro-code github-dark\" style=\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"color:#E1E4E8\">c </span><span style=\"color:#F97583\">:=</span><span style=\"color:#E1E4E8\"> cuitty.</span><span style=\"color:#B392F0\">New</span><span style=\"color:#E1E4E8\">(</span><span style=\"color:#B392F0\">cuitty</span><span style=\"color:#E1E4E8\">.</span><span style=\"color:#B392F0\">Config</span><span style=\"color:#E1E4E8\">{</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    PortalURL: </span><span style=\"color:#9ECBFF\">\"https://app.cuitty.com\"</span><span style=\"color:#E1E4E8\">,</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    ProjectID: id,</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    APIKey:    key,</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">})</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">c.</span><span style=\"color:#B392F0\">Audit</span><span style=\"color:#E1E4E8\">(ctx, </span><span style=\"color:#B392F0\">cuitty</span><span style=\"color:#E1E4E8\">.</span><span style=\"color:#B392F0\">AuditEvent</span><span style=\"color:#E1E4E8\">{</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    Actor:    </span><span style=\"color:#9ECBFF\">\"alice@example.com\"</span><span style=\"color:#E1E4E8\">,</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    Action:   </span><span style=\"color:#9ECBFF\">\"secret.rotate\"</span><span style=\"color:#E1E4E8\">,</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    Resource: </span><span style=\"color:#9ECBFF\">\"stripe.live_key\"</span><span style=\"color:#E1E4E8\">,</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">})</span></span></code></pre>\n<h2 id=\"wire-protocol-equivalent-today\">Wire-protocol equivalent today</h2>\n<pre class=\"astro-code github-dark\" style=\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex=\"0\" data-language=\"go\"><code><span class=\"line\"><span style=\"color:#F97583\">package</span><span style=\"color:#B392F0\"> main</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color:#F97583\">import</span><span style=\"color:#E1E4E8\"> (</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">    \"</span><span style=\"color:#B392F0\">bytes</span><span style=\"color:#9ECBFF\">\"</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">    \"</span><span style=\"color:#B392F0\">crypto/hmac</span><span style=\"color:#9ECBFF\">\"</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">    \"</span><span style=\"color:#B392F0\">crypto/sha256</span><span style=\"color:#9ECBFF\">\"</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">    \"</span><span style=\"color:#B392F0\">encoding/hex</span><span style=\"color:#9ECBFF\">\"</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">    \"</span><span style=\"color:#B392F0\">net/http</span><span style=\"color:#9ECBFF\">\"</span></span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">    \"</span><span style=\"color:#B392F0\">os</span><span style=\"color:#9ECBFF\">\"</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color:#F97583\">func</span><span style=\"color:#B392F0\"> main</span><span style=\"color:#E1E4E8\">() {</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    body </span><span style=\"color:#F97583\">:=</span><span style=\"color:#E1E4E8\"> []</span><span style=\"color:#F97583\">byte</span><span style=\"color:#E1E4E8\">(</span><span style=\"color:#9ECBFF\">`{\"events\":[{\"type\":\"audit\",\"ts\":\"2026-04-27T12:00:00Z\",\"data\":{\"actor\":\"alice@example.com\",\"action\":\"secret.rotate\",\"resource\":\"stripe.live_key\"}}]}`</span><span style=\"color:#E1E4E8\">)</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    mac </span><span style=\"color:#F97583\">:=</span><span style=\"color:#E1E4E8\"> hmac.</span><span style=\"color:#B392F0\">New</span><span style=\"color:#E1E4E8\">(sha256.New, []</span><span style=\"color:#F97583\">byte</span><span style=\"color:#E1E4E8\">(os.</span><span style=\"color:#B392F0\">Getenv</span><span style=\"color:#E1E4E8\">(</span><span style=\"color:#9ECBFF\">\"CUITTY_WEBHOOK_SECRET\"</span><span style=\"color:#E1E4E8\">)))</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    mac.</span><span style=\"color:#B392F0\">Write</span><span style=\"color:#E1E4E8\">(body)</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    sig </span><span style=\"color:#F97583\">:=</span><span style=\"color:#E1E4E8\"> hex.</span><span style=\"color:#B392F0\">EncodeToString</span><span style=\"color:#E1E4E8\">(mac.</span><span style=\"color:#B392F0\">Sum</span><span style=\"color:#E1E4E8\">(</span><span style=\"color:#79B8FF\">nil</span><span style=\"color:#E1E4E8\">))</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    req, _ </span><span style=\"color:#F97583\">:=</span><span style=\"color:#E1E4E8\"> http.</span><span style=\"color:#B392F0\">NewRequest</span><span style=\"color:#E1E4E8\">(</span><span style=\"color:#9ECBFF\">\"POST\"</span><span style=\"color:#E1E4E8\">, </span><span style=\"color:#9ECBFF\">\"https://app.cuitty.com/api/ingest\"</span><span style=\"color:#E1E4E8\">,</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">        bytes.</span><span style=\"color:#B392F0\">NewReader</span><span style=\"color:#E1E4E8\">(body))</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    req.Header.</span><span style=\"color:#B392F0\">Set</span><span style=\"color:#E1E4E8\">(</span><span style=\"color:#9ECBFF\">\"Authorization\"</span><span style=\"color:#E1E4E8\">, </span><span style=\"color:#9ECBFF\">\"Bearer \"</span><span style=\"color:#F97583\">+</span><span style=\"color:#E1E4E8\">os.</span><span style=\"color:#B392F0\">Getenv</span><span style=\"color:#E1E4E8\">(</span><span style=\"color:#9ECBFF\">\"CUITTY_API_KEY\"</span><span style=\"color:#E1E4E8\">))</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    req.Header.</span><span style=\"color:#B392F0\">Set</span><span style=\"color:#E1E4E8\">(</span><span style=\"color:#9ECBFF\">\"Content-Type\"</span><span style=\"color:#E1E4E8\">, </span><span style=\"color:#9ECBFF\">\"application/json\"</span><span style=\"color:#E1E4E8\">)</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    req.Header.</span><span style=\"color:#B392F0\">Set</span><span style=\"color:#E1E4E8\">(</span><span style=\"color:#9ECBFF\">\"X-Cuitty-Signature\"</span><span style=\"color:#E1E4E8\">, sig)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    http.DefaultClient.</span><span style=\"color:#B392F0\">Do</span><span style=\"color:#E1E4E8\">(req)</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">}</span></span></code></pre>\n<h2 id=\"live-performance-numbers\">Live performance numbers</h2>\n<p>See live benchmarks at <a href=\"https://benchmarks.cuitty.com/sdks/go\">https://benchmarks.cuitty.com/sdks/go</a>.</p>\n<h2 id=\"see-also\">See also</h2>\n<ul>\n<li><a href=\"/docs/reference/wire-protocol\">Wire protocol</a></li>\n<li><a href=\"/docs/sdk/parity\">SDK parity &#x26; divergence</a></li>\n</ul>",
  "links_out": [
    "/docs/reference/wire-protocol",
    "https://benchmarks.cuitty.com/sdks/go",
    "/docs/sdk/parity"
  ]
}