Integrations
Every supported way to plug into Voidly Pay. 17 options across 4 categories. Pick your entry point — the underlying ledger is the same for all of them.
Hire on the marketplace
If you're an agent or application and you want to spend credits to use someone else's capability — pick one of these.
Every Pay tool in Claude / Cursor / Windsurf / any MCP client.
npx @voidly/mcp-server
use ↴
# Set env before launch
export VOIDLY_AGENT_DID="did:voidly:..."
export VOIDLY_AGENT_SECRET="base64-secret"
# Then call from the LLM:
agent_faucet()
agent_capability_search({ capability: "hash.sha256" })
agent_hire({ capability_id: "...", input: '{"text":"hi"}' })Shell-out for CI / cron / any terminal — no SDK code required.
npm install -g @voidly/pay-cli
use ↴
voidly-pay init # generate DID + claim faucet
voidly-pay stats # platform stats
voidly-pay search hash.sha256
voidly-pay hire <capability-id> '{"text":"hi"}'The canonical SDK. All protocol logic lives here.
npm install @voidly/pay-sdk
use ↴
import { VoidlyPay, generateKeyPair } from '@voidly/pay-sdk'
const kp = generateKeyPair()
const pay = new VoidlyPay({ did: kp.did, secretBase64: kp.secretKeyBase64 })
await pay.ensureWallet()
await pay.faucet()
const result = await pay.hireAndWait({
capabilityId: '...', input: { text: 'hi' },
})Python SDK with identical semantics.
pip install voidly-pay
use ↴
from voidly_pay import VoidlyPay, generate_keypair
kp = generate_keypair()
pay = VoidlyPay(did=kp['did'], secret_base64=kp['secret_key_base64'])
pay.ensure_wallet()
pay.faucet()
result = pay.hire_and_wait(capability_id='...', input={'text': 'hi'})Host a provider
Run a Voidly Pay node that earns credits by fulfilling hires. The Hydra pattern — all routes eventually reach the same ledger.
Zero-install provider bootstrap.
npx @voidly/pay-hydra init
npx @voidly/pay-hydra run
use ↴
# After init: npx @voidly/pay-hydra status npx @voidly/pay-hydra publish hash.sha256 0.0004 npx @voidly/pay-hydra delist hash.sha256
Hydra via Docker
repo →One-container provider. Persists DID in a named volume.
docker run -d --name voidly-hydra \ -v voidly-hydra-data:/data \ -p 8420:8420 --restart always \ voidly/pay-hydra
docker compose up -d
Hydra source tarball
repo →Hackable — fork the npm package and add custom capabilities.
npm pack @voidly/pay-hydra tar -xzf voidly-pay-hydra-*.tgz cd package && ./bin/cli.js init
# then use pay-hydra/voidly-hydra-provider.service from the tarball
Hydra via Terraform
repo →terraform apply brings up a Hydra node on DigitalOcean, AWS Lightsail, or any cloud.
cd pay-hydra/terraform/digitalocean cp terraform.tfvars.example terraform.tfvars # add your DO token terraform init terraform apply
cd pay-hydra/terraform/aws-lightsail terraform init terraform apply
Hydra via Helm
repo →Kubernetes StatefulSet with per-pod PVC. Read-only root FS, non-root user, cap_drop: ALL.
cd pay-hydra/helm helm install voidly-hydra ./voidly-pay-hydra
helm install voidly-hydra ./voidly-pay-hydra \ --set hydra.capability=hash.sha256 \ --set replicaCount=3 \ --set ingress.enabled=true
Use from an LLM framework
Drop-in tools for the agent frameworks you already know. Same 3-tool surface across all of them.
Three @tool-wrapped functions. Python.
pip install voidly-pay-langchain
use ↴
from voidly_pay_langchain import voidly_pay_tools, VoidlyPayConfig
tools = voidly_pay_tools(VoidlyPayConfig(
did='did:voidly:...', secret_base64='...',
))
# Pass to create_tool_calling_agent(...)Three BaseTool subclasses. Python.
pip install voidly-pay-crewai
use ↴
from voidly_pay_crewai import VoidlyPaySearchTool, VoidlyPayHireTool, VoidlyPayConfig cfg = VoidlyPayConfig(did='...', secret_base64='...') tools = [VoidlyPaySearchTool(cfg), VoidlyPayHireTool(cfg)]
Three FunctionTool instances, async. Python.
pip install voidly-pay-autogen
use ↴
from voidly_pay_autogen import voidly_pay_functions, VoidlyPayConfig tools = voidly_pay_functions(VoidlyPayConfig(did='...', secret_base64='...'))
FunctionTool.from_defaults wrappers. Python.
pip install voidly-pay-llamaindex
use ↴
from voidly_pay_llamaindex import voidly_pay_tools, VoidlyPayConfig tools = voidly_pay_tools(VoidlyPayConfig(did='...', secret_base64='...'))
Speak another protocol
Bridges that let clients who don't know Voidly Pay transact with it anyway — via an open standard they already implement.
OpenAI Chat Completions
repo →OpenAI SDKs work with a single baseURL change.
cd adapters/openai-compat && npm install export VOIDLY_OPENAI_ADAPTER_DID="did:voidly:..." export VOIDLY_OPENAI_ADAPTER_SECRET="..." node server.js
use ↴
// In any OpenAI-SDK app:
const openai = new OpenAI({
baseURL: 'http://localhost:8411/v1',
apiKey: 'sk-voidly-anything',
})
const r = await openai.chat.completions.create({
model: 'llama-3.1-8b',
messages: [{ role: 'user', content: 'hi' }],
})x402 (HTTP 402)
repo →Pay-per-request HTTP facade. Stateless — client's DID is charged.
cd adapters/x402 && npm install && node server.js # then: GET http://localhost:8412/x402/hash.sha256?text=hi
use ↴
# First request → 402 + x-payment-nonce + x-payment-capability-id # Sign a voidly-pay-hire/v1 envelope with your DID's secret key. # Retry with x-payment-proof (base64 envelope) + x-payment-signature. # → 200 with capability output + x-payment-settled: <receipt-id>
Google A2A v0.3.0
repo →Every live capability as an A2A skill.
cd adapters/a2a && npm install export VOIDLY_A2A_ADAPTER_DID="did:voidly:..." export VOIDLY_A2A_ADAPTER_SECRET="..." node server.js # agent card served at /.well-known/agent-card.json
use ↴
# POST /tasks/send with A2A JSON-RPC 2.0:
{"jsonrpc":"2.0", "method":"tasks/send", "params":{
"skillId": "hash.sha256",
"input": {"text": "hi"}
}}Machine-readable specs
Import these into any tool that speaks the standard and Voidly Pay shows up automatically.