Server-side SDKs

Custom-domain SDKs.
Native in your stack.

Typed clients for JavaScript, PHP and Python, with framework packages that wire configuration and webhook verification into the conventions you already use.

No browser API keysNo implicit retriesRaw-body webhook checks

Pick the client. Keep the model.

Each SDK exposes destinations, domains, webhooks, widget sessions and usage without inventing a framework-specific domain abstraction.

Node.js 20+

@subdomainto/node

TypeScript types, custom fetch, structured API errors and constant-time webhook verification.

PHP 7.4+

subdomainto/sdk

Framework-independent PSR-18 client with typed models and dedicated exceptions.

Python 3.9+

subdomainto

Typed HTTPX client, context-manager support and signed webhook verification from raw bytes.

One task, three languages

Install, create, then render the DNS records.

Choose the stack you ship. The tabs change one complete, copyable path: installation, client, domain creation and webhook verification.

domain.ts

$ npm install @subdomainto/node

import { SubdomainTo, verifyWebhook } from '@subdomainto/node'

const client = new SubdomainTo({
  apiKey: process.env.SUBDOMAINTO_API_KEY!
})
const domain = await client.domains.create(
  'portal.acme.eu',
  'customer-42-domain',
  { destinationId }
)

domain.dnsRecords // render these to the customer
verifyWebhook(rawBody, signature, webhookSecret)

Framework integration where it helps.

Packages handle dependency injection, configuration and verified webhook handoff. Your business logic still talks to the same typed client.

JS

Express, NestJS, Next.js, Nuxt

Server factories, injectable clients and raw-body webhook helpers.

@subdomainto/express · nestjs · next · nuxt
PHP

Symfony and Laravel

Autowiring or container bindings, environment configuration and verified controller middleware.

subdomainto/symfony-bundle · subdomainto/laravel
PY

Django and FastAPI

Framework configuration, dependency patterns and webhook verification examples.

subdomainto-django · subdomainto-fastapi
Transport retry
Your application decides
Idempotency key
Explicit on every creation
API error
Status, code, request ID
Webhook tolerance
300 seconds by default
Production defaults

The SDK refuses to hide network reality.

Transport failures stay distinct from API responses. The original response body remains available, and framework packages validate signatures before your controller handles an event.

Choose with confidence

What the packages do—and do not do.

Are these browser SDKs?

No. They are server-side clients. Use a server-created widget session when a customer must enter a hostname inside your application.

Do framework packages replace the core client?

No. They configure and inject it, then add framework-native webhook verification or helpers.

Can I use another HTTP stack?

Node accepts a custom fetch; PHP uses PSR-18 and PSR-17; Python accepts a custom httpx.Client.

Where are compatibility versions documented?

Each installation guide names its supported runtime and framework versions before the setup instructions.

Same contract underneath

Start typed or inspect the REST API first.

Use a server-side SDK when it fits your stack. The API remains the source of truth for resources, statuses and errors.