@OPENQUOTESTACK/SDK

Bring quotes into your own application.

A typed server-side REST client with stable resource representations, useful errors and explicit request semantics.

Read the platform.
Submit a quote.

List and fetch estimators, estimates and leads. Create estimates against published definitions; the server calculates the result and retains its revision.

Cursor pagination, scoped API keys, timeouts and structured errors are part of the contract. Browser cookies are never sent. Keep the key on your server.

SDK configuration and error handling
quotes.ts / server-sidetypescript
import { OpenQuoteStack } from "@openquotestack/sdk";

const oqs = new OpenQuoteStack({
  baseUrl: "https://quotes.example.com",
  apiKey: process.env.OPENQUOTESTACK_API_KEY!
});

const page = await oqs.estimators.list({ limit: 25 });
const estimator = await oqs.estimators.get(page.data[0]!.id);

const quote = await oqs.estimates.create(
  { estimatorId: estimator.id, answers },
  { idempotencyKey: "persistent-request-id" }
);

Retries need
an identity.

Persist and reuse an idempotency key and the original request body when retrying. A missing key generates a new UUID per call. The SDK does not perform automatic request retries.

OpenQuoteStackError exposes HTTP status, code, request ID and optional retry-after information. Transport errors use status 0 without leaking credentials.

REST API and scope enforcement

Verify what arrives.

The SDK also verifies timestamped webhook signatures against unchanged raw bytes. After verification, deduplicate event IDs in durable storage.

receive.tstypescript
import { verifyWebhook } from "@openquotestack/sdk";

const valid = await verifyWebhook(
  secret, signatureHeader, rawRequestBytes
);
Signing protocol and receiver example

Build one complete integration.

Follow the server-side walkthrough for a complete Moving request, publication pinning, scoped credentials and safe retries.

Create estimates from your server

OPEN SOURCE / OPEN POSSIBILITIES

Pricing logic
should belong to you.