One spec. Three shipping clients.
Six more on the way.
TypeScript devs: use @solidnumber/cli/sdk today. Everyone else: generate a typed client from the live OpenAPI spec — or wait for the native SDK for your language.
Available today
Real packages on real registries. Every number below comes from the live product.
Solid# CLI
@solidnumber/cliTerminal + TypeScript library. 80+ commands, 13 global flags, doctor, did-you-mean, shell completion. Also importable as a library for programmatic use.
npm i -g @solidnumber/cliMCP Server
@solidnumber/mcp608 tools across 36 categories. Claude Code, Cursor, Windsurf connect via stdio. One config file, Bearer-token auth, tenant-scoped.
npx -y @solidnumber/mcpTypeScript library quickstart
@solidnumber/cli is dual-purpose: a CLI binary and an importable TypeScript library. Same auth, same api-client, same type definitions.
// Already installed @solidnumber/cli as a CLI tool?
// The same package is an importable TypeScript library.
import { apiClient, handleApiError } from '@solidnumber/cli/sdk';
// Auth is read from ~/.solid/config.json (or SOLID_API_KEY env var)
// For CI/CD, pass a one-shot token:
// import { setOverrideToken } from '@solidnumber/cli/sdk';
// setOverrideToken(process.env.SOLID_API_KEY!);
try {
const { data } = await apiClient.get('/api/v1/crm/contacts', {
params: { limit: 50, search: 'acme' }
});
console.log(`Found ${data.items.length} contacts`);
} catch (err) {
const apiErr = handleApiError(err);
console.error(`${apiErr.code}: ${apiErr.message}`);
}Already running the CLI in your project? Just import from it.
Dry-run interceptor, auth refresh, version-skew warnings — all active via the same flags.
Full .d.ts coverage. apiClient, handleApiError, setOverrideToken all typed.
Generate a client for any language
The full OpenAPI 3.0 spec is public at api.solidnumber.com/openapi.json. Any code generator that speaks OpenAPI can produce a typed client — no waiting on a native SDK.
# Any language — generate a typed client from the live spec
# TypeScript (openapi-typescript)
npx openapi-typescript https://api.solidnumber.com/openapi.json \
--output src/solid-types.ts
# Python (openapi-python-client)
openapi-python-client generate --url https://api.solidnumber.com/openapi.json
# Go (oapi-codegen)
oapi-codegen -package solid \
https://api.solidnumber.com/openapi.json > solid.gen.go
# Ruby (openapi-generator)
openapi-generator generate -g ruby \
-i https://api.solidnumber.com/openapi.json -o ./solid-rubyRegenerate on CI. The spec updates every deploy. Use it as the contract between backend + client; let semantic-release + code-gen enforce breaking-change policy.
Native SDKs — on the roadmap
Waitlist openWe'd rather ship a great TypeScript SDK today than six mediocre SDKs that rot. These are prioritized by waitlist demand — add your vote.
solidnumber (PyPI)github.com/solidnumber/go-sdksolidnumber (RubyGems)solidnumber/sdk (Packagist)com.solidnumber:sdkSolidNumber.Sdk (NuGet)Use the CLI to ping the founder directly — tells us which SDK to build first:
solid feedback "I want the Python SDK — shipping {use case} on {stack}"What every Solid# SDK includes
Bearer-token auth, automatic refresh, one-shot tokens for CI (never persisted to disk).
Error envelope: code, message, details[], request_id. Typed error classes per HTTP status.
Every mutating call accepts Idempotency-Key. Same key replays for 24h.
Reads X-RateLimit-Remaining + Retry-After, backs off, respects 429 automatically.
Preview every mutation server-side before committing. Built into the CLI + TS SDK today.
Every call auto-scopes to the API key’s company_id. You can’t cross-read tenants.
limit/offset + has_more. CLI and TS SDK expose fetchAll() for transparent pagination.
HMAC-SHA256 verify helpers. Code snippets for Node, Python, Go on /docs/api.
Start building today
@solidnumber/cli 1.9.24 · @solidnumber/mcp 1.0.1TypeScript + CLI shipping now. MCP for AI editors shipping now. Language SDKs on the roadmap — or roll your own from the OpenAPI spec today.