instanode
Official Python SDK for instanode.dev — zero-setup Postgres databases and webhook receivers for AI agents and humans. No Docker, no account for the free tier.
pip install instanode
Quickstart
import instanode
client = instanode.Client()
# Postgres (pgvector pre-installed). Free tier: 10 MB / 2 connections / 24h TTL.
db = client.provision_database(name="my-app")
print(db.connection_url) # postgres://…@pg.instanode.dev:5432/db_…
# Webhook receiver. Free tier: 100 requests stored / 24h TTL.
hook = client.provision_webhook(name="stripe-events")
print(hook.connection_url) # https://api.instanode.dev/webhook/receive/<token>
Use db.connection_url with psycopg, asyncpg, SQLAlchemy, Prisma, Drizzle,
or anything else that speaks Postgres.
Async
import asyncio
import instanode.aio
async def main():
async with instanode.aio.AsyncClient() as client:
db = await client.provision_database(name="my-app")
print(db.connection_url)
asyncio.run(main())
Paid tier
The free tier caps each /24 subnet at 5 provisions/day and resources expire in 24 hours. To lift the caps and make resources permanent, sign up at instanode.dev, mint a bearer token from the dashboard, and set it:
client = instanode.Client(api_key="eyJ…")
# Or via env: export INSTANODE_API_KEY=eyJ…
Account operations (paid tier)
# Claim an anonymous resource into the account (clears the 24h expiry).
client.claim(token=db.token)
# List everything this account owns.
for r in client.list_resources():
print(r.resource_type, r.token, r.tier, r.created_at)
# Delete a resource.
client.delete_resource(db.token)
# Mint a fresh 30-day JWT from a session-authenticated context.
jwt = client.get_api_token()
Error handling
from instanode import InstanodeError
try:
client.provision_database(name="my-app")
except InstanodeError as e:
if e.is_rate_limited():
# …retry later
...
elif e.is_unauthorized():
# …bad or missing API key
...
else:
raise
InstanodeError exposes status_code, code, and message, plus convenience
checks: is_not_found(), is_unauthorized(), is_forbidden(),
is_rate_limited(), is_conflict(), is_service_unavailable().
Scope
This 0.3.0 release covers what the live API actually exposes today:
POST /db/new→provision_databasePOST /webhook/new→provision_webhookPOST /api/me/claim→claimGET /api/me/resources→list_resourcesDELETE /api/me/resources/{token}→delete_resourceGET /api/me/token→get_api_token
Monitor/heartbeat, cache (Redis), MongoDB, NATS queue, and credential
rotation are on the roadmap. They live on the feature/full-api
branch
and will land in a later minor release once the backend ships them. Pin
to that branch explicitly if you want the preview surface today:
pip install git+https://github.com/InstaNode-dev/sdk-python.git@feature/full-api
Related
- MCP server (Claude Code / Cursor / Windsurf): https://www.npmjs.com/package/@instanode/mcp
- LangChain tools: https://pypi.org/project/langchain-instanode/
- LlamaIndex tools: https://pypi.org/project/llama-index-tools-instanode/
- CrewAI tools: https://pypi.org/project/crewai-instanode-tools/
- HTTP API reference: https://instanode.dev/llms.txt
License
MIT. See LICENSE.
Metadata
Release files for instanode 0.3.0
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 | |
|---|---|---|---|---|
| instanode-0.3.0.tar.gz | 13.9 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| instanode-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 25.9 kB
Release files / instanode-0.3.0.tar.gz
| Download URL | instanode-0.3.0.tar.gz |
|---|---|
| Size | 13.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c7804111b641f37327d03e22ba9650264db41162c535649a1dac7f40ad8027c2
|
|
BLAKE2b-256 checksum How to use checksums |
b38d29ca345a502fe849681d16fe9011f7e5b095d659883ab9817847166c8637
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","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 / instanode-0.3.0-py3-none-any.whl
| Download URL | instanode-0.3.0-py3-none-any.whl |
|---|---|
| Size | 12.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a68c9de527beefb0e0ab063d9cdf52c0e0163026c3e796a1ed1a43bc851210a7
|
|
BLAKE2b-256 checksum How to use checksums |
f0d38d42692a5d34870464e956d65b036ce5ecec9bc54a554a2125873b5fcb99
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","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 instanode 0.3.0
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.