Open Spanner
SDKs

SDKs

Open Spanner SDK packages and supported operations.

Open Spanner SDKs are for backend services that need to create meters, report usage, query buckets, or export usage data. Create an API key in the dashboard, pass it into the SDK client, and keep the key server-side.

LanguagePackageInstall
Gogithub.com/ssubedir/open-spanner/sdk/gogo get github.com/ssubedir/open-spanner/sdk/go@latest
TypeScript@ssubedir/open-spannernpm install @ssubedir/open-spanner
Pythonopen-spannerpip install open-spanner
C#OpenSpannerdotnet add package OpenSpanner
JavaComing soonComing soon

Quick Example

These snippets assume OPEN_SPANNER_API_KEY contains an API key created from the dashboard.

transport := httptransport.New("localhost:18081", client.DefaultBasePath, []string{"http"})
transport.DefaultAuthentication = httptransport.BearerToken(os.Getenv("OPEN_SPANNER_API_KEY"))
api := client.New(transport, strfmt.Default)

_, err := api.Usages.CreateUsage(
  usages.NewCreateUsageParams().WithRequest(&models.UsageCreateRequest{
    IdempotencyKey: "usage_001",
    Subject:        "org_123",
    Meter:          "api_requests",
    Quantity:       1,
    Metadata: map[string]any{
      "endpoint": "/v1/orders",
      "region":   "us-east",
    },
  }),
)
client.setConfig({
  baseUrl: process.env.OPEN_SPANNER_BASE_URL ?? "http://localhost:18081",
  headers: {
    Authorization: `Bearer ${process.env.OPEN_SPANNER_API_KEY}`,
  },
});

await createUsage({
  body: {
    idempotency_key: "usage_001",
    subject: "org_123",
    meter: "api_requests",
    quantity: 1,
    metadata: {
      endpoint: "/v1/orders",
      region: "us-east",
    },
  },
  throwOnError: true,
});
client = AuthenticatedClient(
    base_url=os.environ.get("OPEN_SPANNER_BASE_URL", "http://localhost:18081"),
    token=os.environ["OPEN_SPANNER_API_KEY"],
    raise_on_unexpected_status=True,
)

metadata = UsageCreateRequestMetadata()
metadata["endpoint"] = "/v1/orders"
metadata["region"] = "us-east"

create_usage.sync(
    client=client,
    body=UsageCreateRequest(
        idempotency_key="usage_001",
        subject="org_123",
        meter="api_requests",
        quantity=1,
        metadata=metadata,
    ),
)
var metadata = new UsageCreateRequest_metadata();
metadata.AdditionalData["endpoint"] = "/v1/orders";
metadata.AdditionalData["region"] = "us-east";

await client.V1.Usages.PostAsync(new UsageCreateRequest
{
    IdempotencyKey = "usage_001",
    Subject = "org_123",
    Meter = "api_requests",
    Quantity = 1,
    Metadata = metadata,
});

The full runnable projects are still available in the repository under examples/rest/basic and examples/stream/basic.

Included Operations

  • Health and readiness checks
  • Meter create, list, read, update, and delete
  • Single usage ingestion
  • Bulk usage ingestion
  • Usage search
  • Direct usage CSV export

SDKs do not manage dashboard users, sessions, API keys, system stats, retention pruning, subjects, ingestion history, queued export jobs, or raw event admin endpoints.

On this page