Libraries & code examples

Grab a client. Or copy three lines.

Every library on this page is generated straight from the OpenAPI spec, so method names match the reference one-to-one — login(), listOrders(), getOrder(). Prefer raw HTTP? The quickstart below runs in any language with no dependencies.

9 SDKs 7 quickstarts OpenAPI 3.0 24 endpoints Self-contained zips

Quickstart · no SDK

Log in, then call anything.

The same two steps in seven languages: exchange your login for a 30-minute bearer token, then send it on every request.

# 1 — exchange your login for a 30-minute bearer token
TOKEN=$(curl -s https://api.storekeeper.me/api/auth/login \
  -H 'Content-Type: application/json' \
  -d '{"account":"demo","email":"you@example.com","password":"..."}' \
  | jq -r .token)

# 2 — send it on every other request
curl -s "https://api.storekeeper.me/api/orders?from=2026-07-01&limit=25" \
  -H "Authorization: Bearer $TOKEN"
<?php
$base = 'https://api.storekeeper.me';

// 1 — log in → 30-minute bearer token
$ch = curl_init("$base/api/auth/login");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS => json_encode([
        'account' => 'demo', 'email' => 'you@example.com', 'password' => '...',
    ]),
    CURLOPT_RETURNTRANSFER => true,
]);
$token = json_decode(curl_exec($ch), true)['token'];

// 2 — call any endpoint with it
$ch = curl_init("$base/api/orders?from=2026-07-01&limit=25");
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => ["Authorization: Bearer $token"],
    CURLOPT_RETURNTRANSFER => true,
]);
$orders = json_decode(curl_exec($ch), true);
print_r($orders['data']);
const BASE = 'https://api.storekeeper.me';

// 1 — log in → 30-minute bearer token
const { token } = await fetch(`${BASE}/api/auth/login`, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    account: 'demo', email: 'you@example.com', password: '...',
  }),
}).then((r) => r.json());

// 2 — call any endpoint with it
const orders = await fetch(`${BASE}/api/orders?from=2026-07-01&limit=25`, {
  headers: { Authorization: `Bearer ${token}` },
}).then((r) => r.json());

console.log(orders.data);
import requests

BASE = "https://api.storekeeper.me"

# 1 — log in → 30-minute bearer token
token = requests.post(f"{BASE}/api/auth/login", json={
    "account": "demo", "email": "you@example.com", "password": "...",
}).json()["token"]

# 2 — call any endpoint with it
orders = requests.get(
    f"{BASE}/api/orders",
    params={"from": "2026-07-01", "limit": 25},
    headers={"Authorization": f"Bearer {token}"},
).json()

print(orders["data"])
using System.Net.Http.Json;
using System.Text.Json.Nodes;

var http = new HttpClient { BaseAddress = new Uri("https://api.storekeeper.me") };

// 1 — log in → 30-minute bearer token
var login = await http.PostAsJsonAsync("/api/auth/login",
    new { account = "demo", email = "you@example.com", password = "..." });
var token = (await login.Content.ReadFromJsonAsync<JsonNode>())!["token"]!.ToString();

// 2 — call any endpoint with it
http.DefaultRequestHeaders.Authorization = new("Bearer", token);
var orders = await http.GetFromJsonAsync<JsonNode>(
    "/api/orders?from=2026-07-01&limit=25");

Console.WriteLine(orders!["data"]);
import java.net.URI;
import java.net.http.*;

var http = HttpClient.newHttpClient();
String base = "https://api.storekeeper.me";

// 1 — log in → 30-minute bearer token (raw HTTP; use the SDK for typed models)
var res = http.send(HttpRequest.newBuilder(URI.create(base + "/api/auth/login"))
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(
        "{\"account\":\"demo\",\"email\":\"you@example.com\",\"password\":\"...\"}"))
    .build(), HttpResponse.BodyHandlers.ofString());
String token = res.body().replaceAll(".*\"token\":\"([^\"]+)\".*", "$1");

// 2 — call any endpoint with it
var orders = http.send(HttpRequest.newBuilder(
        URI.create(base + "/api/orders?from=2026-07-01&limit=25"))
    .header("Authorization", "Bearer " + token)
    .build(), HttpResponse.BodyHandlers.ofString());

System.out.println(orders.body());
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "net/http"
)

const base = "https://api.storekeeper.me"

func main() {
    // 1 — log in → 30-minute bearer token
    body, _ := json.Marshal(map[string]string{
        "account": "demo", "email": "you@example.com", "password": "...",
    })
    res, _ := http.Post(base+"/api/auth/login", "application/json", bytes.NewReader(body))
    var login struct {
        Token string `json:"token"`
    }
    json.NewDecoder(res.Body).Decode(&login)

    // 2 — call any endpoint with it
    req, _ := http.NewRequest("GET", base+"/api/orders?from=2026-07-01&limit=25", nil)
    req.Header.Set("Authorization", "Bearer "+login.Token)
    orders, _ := http.DefaultClient.Do(req)
    defer orders.Body.Close()

    var out map[string]any
    json.NewDecoder(orders.Body).Decode(&out)
    fmt.Println(out["data"])
}

Download an SDK

Typed clients, one per language.

Each zip is a self-contained client with a class per endpoint group (AuthApi, OrdersApi, …) and its own README with a runnable example. Unzip and install locally — nothing is published to a package registry yet.

PHP

PHP

Composer · Guzzle · PSR-4

288 KB
unzip storekeeper-php-sdk.zip
cd storekeeper-php && composer install
Download .zip
TS

JavaScript / TypeScript

npm · fetch · ESM + types

128 KB
unzip storekeeper-typescript-sdk.zip
npm install ./storekeeper-typescript
Download .zip
PY

Python

pip · urllib3 · type hints

245 KB
unzip storekeeper-python-sdk.zip
pip install ./storekeeper-python
Download .zip
C#

C# / .NET

.NET 8 · HttpClient

285 KB
unzip storekeeper-csharp-sdk.zip
dotnet add reference \
  storekeeper-csharp/src/Storekeeper.ApiClient/Storekeeper.ApiClient.csproj
Download .zip
JV

Java

Maven · java.net.http · 11+

322 KB
unzip storekeeper-java-sdk.zip
cd storekeeper-java && mvn install
Download .zip
GO

Go

Go module · net/http

250 KB
unzip storekeeper-go-sdk.zip
# import github.com/storekeeper-company/storekeeper-api-go/storekeeper
Download .zip
RS

Rust

Cargo · reqwest · async

108 KB
unzip storekeeper-rust-sdk.zip
# Cargo.toml: storekeeper = { path = "storekeeper-rust" }
Download .zip
KT

Kotlin

Gradle · OkHttp · JVM

138 KB
unzip storekeeper-kotlin-sdk.zip
cd storekeeper-kotlin && ./gradlew build
Download .zip
SW

Swift

SwiftPM · URLSession · async

93 KB
unzip storekeeper-swift-sdk.zip
# add storekeeper-swift/Package.swift as a local SwiftPM dependency
Download .zip

How to use one. Configure the client with your bearer token, then call the method that matches the reference — e.g. Python: AuthApi().login(...) for the token, then OrdersApi(client).list_orders(...). Full examples live in each zip's README and mirror the interactive reference.

Roll your own

Any language, from the spec.

All nine above are generated with openapi-generator from /api/doc.json. Point it at that URL to build a client in Ruby, Dart, Scala, C++, or anything else it supports.

Ruby Dart Scala C++ Elixir Objective-C Perl R Groovy See all →
# same toolchain we use — Ruby, for example
docker run --rm -v "$PWD:/out" \
  openapitools/openapi-generator-cli generate \
  -i https://api.storekeeper.me/api/doc.json \
  -g ruby \
  -o /out/storekeeper-ruby

Now go build.

Try calls live in the browser, or read the flows end to end.