ThunkMetrc is a generator-driven SDK platform for the Metrc API. This repository contains the scraping/spec pipeline, schema generation, internal tooling models, and publishable SDKs for C#, Go, TypeScript, Python, Java, Kotlin, and Rust.
- Quick Start
- SDK Package Matrix
- Generation Pipeline
- Live Scrape Workflow
- Publishing Workflow
- Language Guides
- Core Docs
Recommended pattern:
- Use the language-specific
wrapperpackage for typed API calls. - Use the
clientpackage only when you want raw request/response control. - Use the high-level
thunkmetrcpackage for convenience sync/helpers where available.
TypeScript wrapper example:
import { MetrcClient } from '@thunkier/thunkmetrc-client';
import { MetrcWrapper } from '@thunkier/thunkmetrc-wrapper';
const client = new MetrcClient({
baseUrl: 'https://sandbox-api-or.metrc.com',
vendorKey: process.env.METRC_VENDOR_KEY!,
userKey: process.env.METRC_USER_KEY!,
});
const wrapper = new MetrcWrapper(client);
const facilities = await wrapper.facilities.getFacilities();
console.log(`Facilities: ${facilities.length}`);| Language | Client | Wrapper (recommended) | High-level package |
|---|---|---|---|
| C# | ThunkMetrc.Client |
ThunkMetrc.Wrapper |
ThunkMetrc |
| Go | github.com/thunkier/thunkmetrc/sdks/thunkmetrc-go/client |
github.com/thunkier/thunkmetrc/sdks/thunkmetrc-go/wrapper |
github.com/thunkier/thunkmetrc/sdks/thunkmetrc-go/thunkmetrc |
| TypeScript | @thunkier/thunkmetrc-client |
@thunkier/thunkmetrc-wrapper |
@thunkier/thunkmetrc |
| Python | thunkmetrc-client |
thunkmetrc-wrapper |
thunkmetrc |
| Java | io.github.thunkier:thunkmetrc-client |
io.github.thunkier:thunkmetrc-wrapper |
io.github.thunkier:thunkmetrc |
| Kotlin | io.github.thunkier:thunkmetrc-kotlin-client |
io.github.thunkier:thunkmetrc-kotlin-wrapper |
io.github.thunkier:thunkmetrc-kotlin |
| Rust | thunkmetrc-client |
thunkmetrc-wrapper |
thunkmetrc |
Note: Go module paths now live under sdks/thunkmetrc-go/....
The end-to-end flow is:
- Live scrape source docs into
specs/source/scraped/postman/. - Build normalized Bruno specs in
specs/generated/bruno/. - Generate schemas in
specs/generated/schemas/. - Generate internal tooling assets.
- Generate SDKs under
sdks/thunkmetrc-*.
Most-used commands:
task gen:spec
task gen:schema
task gen:internal
task gen:sdks
task build:all
task test:alltask gen:spec proxies to tools gen specs and supports scraper controls.
Examples:
# Scrape selected states only
task gen:spec -- --states=ca,co,or
# Tune HTTP behavior
task gen:spec -- --states=ca --timeout-seconds=60 --max-retries=4 --retry-backoff-ms=800
# Regenerate from existing local scrape files
task gen:spec -- -skip-scrapeAvailable knobs:
-states-concurrency-timeout-seconds-max-retries-retry-backoff-ms-user-agent-skip-scrape
Publishing is handled by .github/workflows/publish-sdks.yml.
Trigger modes:
- Tag push matching
v* - Manual
workflow_dispatch
Each publish job regenerates codegen outputs before publishing language packages.
MIT. See LICENSE.