Skip to main content

Python client for 2s.io — 575+ pay-per-call tools for AI agents: ground-truth data, AI gateway, agent infra (storage, locks, queues, watchers). x402 USDC on Base/Solana, no API keys, upto usage billing, free trials.

Project description

2sio (Python)

Python client for 2s.io — 575+ pay-per-call tools for AI agents: more ground-truth data than any other x402 API, a full AI gateway (chat, image, multi-model consensus), and agent infrastructure (wallet-scoped storage, locks, queues, schedules, watchers). USDC on Base or Solana via x402.

upto billing (new on 2s): AI endpoints also accept the x402 upto scheme — authorize the quoted max, get settled for your actual usage (a real on-chain example settled at 1/42nd of the quote). Exact-scheme calls work unchanged.

pip install 2sio

🎁 Try before you buy — free, no wallet

Verify any endpoint before funding a wallet. trial=True makes free calls (one per endpoint per hour, no key, no signup):

from twosio import TwoS

trial = TwoS(trial=True)
print(trial.validate.iban(iban="GB82WEST12345698765432").data["items"][0]["valid"])
# real result; once/hour/endpoint, then raises TwoSError(code="TRIAL_EXHAUSTED")

Pass private_key=... (below) to pay per call for unlimited access.

🔔 Watchers — get woken up, don't poll

Most endpoints are reads. Watchers flip that: arm one once and we POST you a signed callback the instant something happens — a wallet moves, a stock crosses your price, a company reports earnings. No polling loop. Flat $0.05 to arm; callbacks are EIP-191-signed (verify offline) and retried with exponential backoff, with a pull backstop via watchers.status.

res = client.watchers.stock_price(
    ticker="AAPL", conditionType="above", threshold=250,
    callbackUrl="https://your-agent.app/hooks/aapl",
)
print(res.data["items"][0]["watcherId"])  # we POST your payload here the moment AAPL crosses $250
# also: client.watchers.crypto_address_activity(...), client.watchers.earnings(...)

Quick start

import os
from twosio import TwoS

# private_key is an EVM key (0x...) holding USDC on Base mainnet.
client = TwoS(private_key=os.environ["EVM_PRIVATE_KEY"])

r = client.patents.search(q="neural network", limit=5)
print(r.data["hits"][0]["title"])
print("paid:", r.cost_usd, "USDC, tx:", r.settlement["tx_hash"])

Settles on Base mainnet in ~2 seconds. Prices start at $0.001/call.

If you'd rather construct the signer yourself (e.g. for a custodial KMS-backed wallet), pass it directly:

from eth_account import Account
signer = Account.from_key(os.environ["EVM_PRIVATE_KEY"])
client = TwoS(signer=signer)

What's included

An ever-expanding catalog of 570+ endpoints across 112+ groups (live count in the directory), namespaced by group — spanning AI (incl. multi-model consensus), agent primitives, control plane (distributed locks, durable queues, scheduled callbacks, pub/sub), storage (key-value / documents / vectors / private blobs), watchers (signed push callbacks), security (CVE / KEV / EPSS, IOC, exploits), identity resolution (ID crosswalks), patents & trademarks, law & sanctions, government & public records, finance & treasury, vehicles & aviation, health & medical, business & GLEIF/KYB, energy & agriculture, maritime & telecom, geo / weather / earth, space, science & papers, property & licenses, internet, crypto, music & news, and data validators / utilities:

client.patents.search(q="...")
client.security.cve(id="CVE-2024-3094")
client.crypto.address_validate(chain="eth", address="0xd8dA...")
client.ai.summarize(url="https://example.com")
client.law.sanctions_check(name="John Smith")
client.business.entity_match(name="Acme Corp")
client.geocode.address(query="350 5th Ave, New York, NY")
client.weather.zip(zip="94103")
# ... and 530+ more

Full catalog: https://2s.io/api/directory. OpenAPI: https://2s.io/api/openapi.

Safety

  • The client refuses to sign payments above max_price_usd. There is no default cap (max_price_usd defaults to inf) — set it to opt into a ceiling.
  • Optional on_payment_requested hook for per-call approval.
client = TwoS(
    private_key=os.environ["EVM_PRIVATE_KEY"],
    max_price_usd=0.05,
    on_payment_requested=lambda info: info["amount_usd"] < 0.02,
)

Errors

  • TwoSError — HTTP error from 2s.io.
  • PaymentRefusedError — local refusal (price cap or hook).

License

MIT.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

2sio-1.80.2.tar.gz (75.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

2sio-1.80.2-py3-none-any.whl (72.7 kB view details)

Uploaded Python 3

File details

Details for the file 2sio-1.80.2.tar.gz.

File metadata

  • Download URL: 2sio-1.80.2.tar.gz
  • Upload date:
  • Size: 75.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for 2sio-1.80.2.tar.gz
Algorithm Hash digest
SHA256 77355485d14df9566a2c0f93a5f3fda4b4c062a142dc0649c438de30e501ad46
MD5 b232e97f55c9d1b382251b524675a5af
BLAKE2b-256 b3e50d3624f5fa0861ba2361051c84057634d23b429870d4d834c2eb2c7d135b

See more details on using hashes here.

File details

Details for the file 2sio-1.80.2-py3-none-any.whl.

File metadata

  • Download URL: 2sio-1.80.2-py3-none-any.whl
  • Upload date:
  • Size: 72.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for 2sio-1.80.2-py3-none-any.whl
Algorithm Hash digest
SHA256 94711975a7cdc04beeb332c8636593281d3ba10290ed24b6b3c9572b26ddb5f8
MD5 1566a8c41fed9d7a4a675a23d65180f6
BLAKE2b-256 2703e55c5f0aca4e58f84ffde6fb3f14797e6c193c53bdb14e9e3195da7943e2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page