Client SDKs

Official SDKs wrap the REST API with a typed client, request builders, and framework integration, so you don’t hand-roll HTTP calls and JSON shapes.

SDK Stack Package Repository
Laravel SDK PHP 8.2+, Laravel 11/12 letopis/laravel-sdk (Packagist) max-trifonov/letopis-laravel-sdk
Node SDK Node.js 18+, TypeScript 5+ letopis-node (npm) max-trifonov/letopis-node-sdk

No SDK for your stack yet? The REST API is the contract both SDKs are built on — see Write API and Read API, or generate a client from the OpenAPI 3.1 spec.


Laravel SDK

composer require letopis/laravel-sdk
php artisan vendor:publish --tag=letopis-config
LETOPIS_BASE_URL=https://your-letopis-instance.example.com
LETOPIS_API_KEY=hm_live_...
use Letopis\Laravel\Facades\Letopis;

Letopis::ingest('crm.deals', 'd-1')
    ->authorId('42')
    ->state(['title' => 'Deal #1', 'amount' => 250, 'status' => 'open']);

$history = Letopis::history('crm.deals', 'd-1')->limit(50)->get();

Includes an Eloquent model observer (HasLetopisHistory trait or config-driven, no model changes needed) to record changes automatically, plus a Letopis::fake() testing helper. Covers ingest, batch, history, point-in-time reads, activities/flows, rules, webhook signature verification, hash-chain :verify, and admin endpoints.

Full docs: github.com/max-trifonov/letopis-laravel-sdk


Node SDK

npm install letopis-node
import { LetopisClient } from 'letopis-node'

const letopis = new LetopisClient({
  baseUrl: 'https://your-letopis-instance.example.com',
  apiKey: 'hm_live_...',
})

await letopis.ingest('crm.deals', 'd-1')
  .authorId('42')
  .state({ title: 'Deal #1', amount: 250, status: 'open' })

const history = await letopis.history('crm.deals', 'd-1').limit(50).get()

Typed request builders for ingest, batch, history, point-in-time reads, activities/flows, rules, and admin endpoints. Zero runtime dependencies (native fetch).

Full docs: github.com/max-trifonov/letopis-node-sdk