Python SDK for Vercel
Project description
vercel-sdk
Python SDK for Vercel.
Installation
pip install vercel-sdk
Requirements
- Python 3.10+
Usage
Headers and request context
from vercel.headers import geolocation, ip_address
# In a framework handler, pass request.headers
city_info = geolocation(request)
client_ip = ip_address(request.headers)
Runtime Cache
The SDK talks to Vercel’s Runtime Cache when the following env vars are present; otherwise it falls back to an in-memory cache.
RUNTIME_CACHE_ENDPOINT: base URL of the runtime cache API (e.g. https://cache.vercel.com/...)RUNTIME_CACHE_HEADERS: JSON object of headers to send (e.g. '{"authorization": "Bearer "}')- Optional:
SUSPENSE_CACHE_DEBUG=trueto log fallback behavior
from vercel.cache import get_cache
def main():
cache = get_cache(namespace="demo")
cache.delete("greeting")
cache.set("greeting", {"hello": "world"}, {"ttl": 60, "tags": ["demo"]})
value = cache.get("greeting") # dict or None
cache.expire_tag("demo") # invalidate by tag
main()
OIDC (Vercel project tokens)
If the VERCEL_OIDC_TOKEN header is not present, the SDK will try to refresh a token using the local Vercel CLI session and your project configuration.
from vercel.oidc import get_vercel_oidc_token, decode_oidc_payload
def main():
token = get_vercel_oidc_token()
payload = decode_oidc_payload(token)
sub = payload.get("sub")
main()
Notes:
- Requires a valid Vercel CLI login on the machine running the code for refresh.
- Project info is resolved from
.vercel/project.json.
Blob Storage
The SDK includes a Blob client for uploading, listing, downloading, copying, and deleting objects in Vercel Blob.
- Required: set
BLOB_READ_WRITE_TOKENor passtokenwhen constructing a client
Async usage:
import asyncio
from vercel.blob import AsyncBlobClient
async def main():
client = AsyncBlobClient() # uses BLOB_READ_WRITE_TOKEN from env
# Upload bytes
uploaded = await client.put(
"examples/assets/hello.txt",
b"hello from python",
access="public",
content_type="text/plain",
)
# Inspect metadata, list, download bytes, then delete
meta = await client.head(uploaded.url)
listing = await client.list_objects(prefix="examples/assets/")
content = await client.get(uploaded.url)
await client.delete([b.url for b in listing.blobs])
asyncio.run(main())
Synchronous usage:
from vercel.blob import BlobClient
client = BlobClient() # or BlobClient(token="...")
# Create a folder entry, upload a local file, list, then download
client.create_folder("examples/assets", overwrite=True)
uploaded = client.upload_file(
"./README.md",
"examples/assets/readme-copy.txt",
access="public",
content_type="text/plain",
)
listing = client.list_objects(prefix="examples/assets/")
client.download_file(uploaded.url, "/tmp/readme-copy.txt", overwrite=True)
Examples
See examples/ for runnable scripts:
runtime_cache_basic.py: set/get with fallback to in-memorycache_tags.py: tag-based invalidationbuild_cache_env.py: shows behavior when cache env vars are setblob_storage.py: end-to-end blob operations (sync and async)fastapi_oidc_plus_cache/: small FastAPI demo wiring headers/oidc
Development
- Lint/typecheck/tests:
uv pip install -e .[dev]
uv run ruff format --check && uv run ruff check . && uv run mypy src && uv run pytest -v
- CI runs lint, typecheck, examples as smoke tests, and builds wheels.
- Publishing: push a tag (
vX.Y.Z) that matchesproject.versionto publish via PyPI Trusted Publishing.
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vercel_sdk-0.0.8.tar.gz.
File metadata
- Download URL: vercel_sdk-0.0.8.tar.gz
- Upload date:
- Size: 31.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c03f368f643421160fe5f6e72d11d0b885a6d830557f7357a5eff0d1429b5038
|
|
| MD5 |
f8d06f5903b10434c6be18f0e5b7e9d7
|
|
| BLAKE2b-256 |
447c00de5aba41fdfd4c71525d7771f52da76bc17cef27d97ebc76a721dd6541
|
Provenance
The following attestation bundles were made for vercel_sdk-0.0.8.tar.gz:
Publisher:
publish.yml on vercel/vercel-py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vercel_sdk-0.0.8.tar.gz -
Subject digest:
c03f368f643421160fe5f6e72d11d0b885a6d830557f7357a5eff0d1429b5038 - Sigstore transparency entry: 620288524
- Sigstore integration time:
-
Permalink:
vercel/vercel-py@1b9a43cb5a4dfeca46cf0171664c002c079cd4f2 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/vercel
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1b9a43cb5a4dfeca46cf0171664c002c079cd4f2 -
Trigger Event:
push
-
Statement type:
File details
Details for the file vercel_sdk-0.0.8-py3-none-any.whl.
File metadata
- Download URL: vercel_sdk-0.0.8-py3-none-any.whl
- Upload date:
- Size: 40.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6162d4943c98caaa462162022c32c881fc9dd00e3eeff7a11b2161a0a83e9ed0
|
|
| MD5 |
a0a74629b95e5865c018daafe788af4c
|
|
| BLAKE2b-256 |
dda04ba7b207141314a5ac1e341d45e40875c21e6e4222a3c150bb155a787098
|
Provenance
The following attestation bundles were made for vercel_sdk-0.0.8-py3-none-any.whl:
Publisher:
publish.yml on vercel/vercel-py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vercel_sdk-0.0.8-py3-none-any.whl -
Subject digest:
6162d4943c98caaa462162022c32c881fc9dd00e3eeff7a11b2161a0a83e9ed0 - Sigstore transparency entry: 620288526
- Sigstore integration time:
-
Permalink:
vercel/vercel-py@1b9a43cb5a4dfeca46cf0171664c002c079cd4f2 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/vercel
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1b9a43cb5a4dfeca46cf0171664c002c079cd4f2 -
Trigger Event:
push
-
Statement type: