this_file: README.md
typekit2
typekit2 is a modern Python client and Fire CLI for the Adobe Fonts API formerly known as the Typekit API.
It replaces the abandoned typekit package’s Python 2 code and setup.py packaging with Python 3.10+, pyproject.toml, HTTPS header authentication, .env support, offline tests, and Git-tag-derived versions.
Install
uv add typekit2
For local development:
uv sync
Create .env from the supplied example, or export the key directly:
cp .env.example .env
export TYPEKIT_API_KEY='your-token'
Create or copy the token from Adobe’s official API Token page.
python-dotenv loads .env without overriding an existing environment variable. Never commit .env; it is ignored.
Python API
from typekit2 import Typekit
client = Typekit() # reads TYPEKIT_API_KEY
kits = client.list_kits()
family = client.get_font_family("pcpv")
variations = client.get_font_variations("pcpv")
library = client.get_library("full", page=1, per_page=50)
An explicit key is also supported:
client = Typekit(api_key="...")
The compatibility keyword api_token= is accepted, but new code should use api_key= or TYPEKIT_API_KEY.
Kit workflow
created = client.create_kit(
"Example",
["example.com", "www.example.com"],
[{"id": "pcpv", "subset": "all", "variations": ["n4", "i4"]}],
)
kit_id = created["kit"]["id"]
client.update_kit(kit_id, name="Example renamed")
client.add_font(kit_id, "gkmg", variations=["n4", "n7"])
client.publish_kit(kit_id)
Publishing is asynchronous. Adobe documents that CDN propagation may take several minutes.
CLI
The installed typekit2 command and python -m typekit2 expose the same Fire CLI. Results are stable JSON.
typekit2 doctor
typekit2 kits
typekit2 kit abc123
typekit2 kit abc123 --published=true
typekit2 family pcpv
typekit2 variations pcpv
typekit2 libraries
typekit2 library full --page=1 --per-page=50
typekit2 kit-fonts gav0zux --matching=halyard
Safe batch removal
Preview the exact slug/name/ID resolution and resulting family count without writing:
typekit2 plan-remove-fonts gav0zux halyard-display,halyard-micro,halyard-text
Apply the removal while proving every unrequested family ID remains, then publish:
typekit2 remove-fonts gav0zux halyard-display,halyard-micro,halyard-text --publish=true
The result reports the resolved IDs, before/after counts, preservation check, and publish status. Unknown names abort the whole operation before its first write. --ignore-missing=true makes reruns idempotent; --dry-run=true provides another preview path. A timed-out DELETE is reconciled against the draft before continuing, and a timed-out publish is reconciled against the published kit rather than retried blindly.
Other mutating commands remain explicit:
typekit2 create-kit Example --domains=example.com,www.example.com
typekit2 add-font abc123 pcpv --variations=n4,i4 --subset=all
typekit2 update-kit abc123 --name='Renamed kit'
typekit2 publish-kit abc123
typekit2 remove-font abc123 pcpv
typekit2 remove-kit abc123
For --families, pass a JSON list:
typekit2 create-kit Example \
--domains=example.com \
--families='[{"id":"pcpv","subset":"all","variations":["n4","i4"]}]'
Run typekit2 --help or python -m typekit2 --help for generated Fire help.
All successful command results are JSON. Errors exit nonzero through Fire and never include the API key. For an API read not yet covered by a high-level command, use the authenticated read-only escape hatch:
typekit2 request-get families/pcpv
typekit2 request-get libraries/full --params='{"page":2,"per_page":25}'
API behavior
- Requests use
https://typekit.com/api/v1/json. - Authentication uses the documented
X-Typekit-Tokenheader; keys never enter URLs or CLI output. - Kit writes use URL-encoded Rails-style nested parameters.
- A 30-second timeout is applied by default and can be changed with
Typekit(timeout=...). - HTTP, JSON, and documented API errors raise
TypekitAPIError. update_kitsends only supplied fields; omitted fields are not replaced accidentally.
See docs/API.md for the method-to-endpoint map and links to Adobe’s authoritative documentation.
Development
./test.sh
The suite is offline: it uses request doubles and never creates, publishes, or deletes a real kit.
Releases
Versions come from Git tags through hatch-vcs; generated typekit2/__version__.py is explicitly ignored. To validate, commit/tag/push the next semantic version, build fresh distributions, and publish with uv:
./publish.sh
Set PUBLISH_SKIP_UPLOAD=1 to exercise the Git release and artifact verification flow without uploading to PyPI. UV_PUBLISH_TOKEN supplies a PyPI token when Trusted Publishing is unavailable.
License and provenance
MIT. The project began as typekit-python by Suchan Lee; typekit2 is its Python 3 modernization.
Repository: github.com/fontlaborg/typekit2-python
Metadata
Release files for typekit2 2.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| typekit2-2.0.1.tar.gz | 59.7 kB | Without provenance | Details for typekit2-2.0.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| typekit2-2.0.1-py3-none-any.whl | Python 3 | none | any | Details for typekit2-2.0.1-py3-none-any.whl |
Total release size: 72.8 kB
Release files / typekit2-2.0.1.tar.gz
| Download URL | typekit2-2.0.1.tar.gz |
|---|---|
| Size | 59.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0c1067db2115406febcbbce8cb9eab5b200dffb9c126464d967cc5b9638612e7
|
|
BLAKE2b-256 checksum How to use checksums |
fe8d5d4abfc3e93b52468eab1a874a25a38564680c288b880ead849da3d10be2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / typekit2-2.0.1-py3-none-any.whl
| Download URL | typekit2-2.0.1-py3-none-any.whl |
|---|---|
| Size | 13.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ff086680dcfdc086149205f22488acbbf2e83692db363f305fb0ca419af31ef0
|
|
BLAKE2b-256 checksum How to use checksums |
1ac53a5183e8b74bd1588187a285400ed307ab20fb26a7c7fe194f378c27f15d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for typekit2 2.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.