API reference
SDKs
1 min read
The API is plain HTTP, so any language with a JSON client can talk to it. We maintain official SDKs for TypeScript and Python that wrap auth + retries + typed responses.
TypeScript / JavaScript
npm install @designdrop/sdkimport { Designdrop } from '@designdrop/sdk';
const dd = new Designdrop({ token: process.env.DESIGNDROP_TOKEN });
// Submit + poll a generation job
const { jobId } = await dd.jobs.create({
type: 'extract_design_system',
input: { url: 'https://stripe.com' },
});
const result = await dd.jobs.waitFor(jobId);
console.log(result.designSystem);waitFor polls every 400ms, respects rate-limit headers, and returns the terminal state (succeeded or failed). Use dd.jobs.get(jobId) if you want to drive your own polling.
The SDK ships full TypeScript types — every endpoint's request and response is checked at compile time.
Python
pip install designdropfrom designdrop import Designdrop
dd = Designdrop(token="...")
job_id = dd.jobs.create(type="extract_design_system", input={"url": "https://stripe.com"})
result = dd.jobs.wait_for(job_id)
print(result.design_system)Same surface as the TypeScript SDK, snake_cased per Python convention.
Community SDKs
The wire format is documented enough that community ports work. Known maintained ports:
- Go — github.com/designdrop-community/designdrop-go
- Ruby — rubygems.org/gems/designdrop
- Rust — crates.io/crates/designdrop
These aren't first-party but tend to track our official SDKs closely.
Rolling your own
If you'd rather call the API directly, every endpoint is documented in Endpoints with request + response shapes. The wire protocol is stable; we'll deprecate fields with at least a 6-month sunset.