Skip to content

.NET SDK Quickstart

Run fully managed ASP.NET Core extensions with the Kiket.SDK NuGet package.

1. Install

dotnet add package Kiket.SDK

Targets .NET 8.0+. Add LangVersion=latest to your project file for best experience.

2. Configure environment

Variable Description
KIKET_WEBHOOK_SECRET Verifies inbound payloads (X-Kiket-Signature).
KIKET_WORKSPACE_TOKEN Used by the HTTP client for REST calls.
KIKET_BASE_URL (optional) Defaults to https://kiket.dev.
KIKET_SDK_TELEMETRY_URL (optional) Mirror telemetry elsewhere.
KIKET_SDK_TELEMETRY_OPTOUT=1 (optional) Disable telemetry.
KIKET_SECRET_<KEY> Inject manifest secrets (e.g., KIKET_SECRET_API_TOKEN).

3. Register handlers

using Kiket.SDK;

var sdk = new KiketSDK(new SDKConfig
{
    WebhookSecret = Environment.GetEnvironmentVariable("KIKET_WEBHOOK_SECRET"),
    WorkspaceToken = Environment.GetEnvironmentVariable("KIKET_WORKSPACE_TOKEN"),
    ExtensionId = "com.example.marketing",
    ExtensionVersion = "1.0.0"
});

sdk.Register("issue.created", "v1", async (payload, context) =>
{
    var summary = payload["issue"]["title"].ToString();
    await context.Endpoints.LogEventAsync("issue.created", new Dictionary<string, object?>
    {
        ["summary"] = summary
    });
    await context.Secrets.SetAsync("WEBHOOK_TOKEN", Guid.NewGuid().ToString());
    return new { ok = true };
});

sdk.Register("workflow.sla_status", "v1", async (payload, context) =>
{
    var projectId = payload["issue"]["project_id"].ToString();
    var events = await context.Endpoints.SlaEvents(projectId!).ListAsync(new SlaEventsListOptions
    {
        State = "imminent",
        Limit = 5
    });
    if (events?.Data?.Count == 0) return new { ok = true };
    return new { acknowledged = true };
});

sdk.Run("127.0.0.1", 8080);

4. Telemetry & feedback

var sdk = new KiketSDK(new SDKConfig
{
    TelemetryEnabled = true,
    FeedbackHook = record =>
    {
        Console.WriteLine($"[telemetry] {record.Event}@{record.Version} {record.Status} ({record.DurationMs}ms)");
    }
});

Telemetry automatically posts to /api/v1/ext/telemetry using the runtime token from webhook payloads. Set KIKET_SDK_TELEMETRY_OPTOUT=1 to disable.

5. Add a setup wizard (optional)

Create a guided setup experience by adding a setup section to your manifest:

.kiket/extension.yaml
model_version: "1.0"
extension:
  id: com.example.marketing
  name: Marketing Hub
  version: 1.0.0
  delivery: http
  callback:
    url: ${EXTENSION_BASE_URL}
    secret: env.KIKET_WEBHOOK_SECRET

  configuration:
    AZURE_CONNECTION_STRING:
      type: string
      secret: true
      required: true
      label: Azure Connection String
    storage_container:
      type: string
      default: kiket-data
      label: Storage Container Name

  setup:
    - secrets:
        id: azure
        title: Connect Azure Storage
        collect:
          - AZURE_CONNECTION_STRING
    - configure:
        id: storage
        title: Configure Storage
        collect:
          - storage_container
    - test:
        id: verify
        title: Verify Connection
        endpoint: /test-azure

See the Setup Wizard Guide for all step types.

6. Next steps