Skip to main content

SDKs

Shroud provides official client libraries for Python and TypeScript. Both wrap the REST API with typed helpers for common workflows like waiting for OTPs and destroying profiles.

Python SDK​

Installation​

pip install shroud-sdk

Requirements​

  • Python 3.9+
  • No additional runtime dependencies

Basic usage​

from shroud import Shroud

client = Shroud(api_key="shr_sk_your_key")

profile = client.profiles.create(
budget=50.00,
capabilities=["card", "phone", "email"]
)

print(profile.card.number)
print(profile.phone.digits)
print(profile.email.address)

otp = client.webhooks.wait_for_sms(profile.phone.id, timeout=30)
print(f"OTP: {otp.code}")

profile.destroy()

Async support​

from shroud import AsyncShroud

client = AsyncShroud(api_key="shr_sk_your_key")

async def run_agent():
profile = await client.profiles.create(budget=25.00)
otp = await client.webhooks.wait_for_sms(profile.phone.id)
await profile.destroy()

CrewAI integration​

from shroud.integrations import CrewAIToolkit

toolkit = CrewAIToolkit(api_key="shr_sk_your_key")
agent = Agent(tools=toolkit.get_tools())

TypeScript SDK​

Installation​

npm install @shroud/sdk

Requirements​

  • Node.js 18+
  • TypeScript 5+ recommended

Basic usage​

import { Shroud } from '@shroud/sdk';

const client = new Shroud({ apiKey: 'shr_sk_your_key' });

const profile = await client.profiles.create({
budget: 50.0,
capabilities: ['card', 'phone', 'email'],
});

console.log(profile.card.number);
console.log(profile.phone.digits);
console.log(profile.email.address);

const sms = await client.webhooks.waitForSms(profile.phone.id, {
timeout: 30_000,
});

console.log(`OTP: ${sms.extractedOtp}`);
await profile.destroy();

Express webhook handler​

import { createWebhookHandler } from '@shroud/sdk';

app.post('/webhooks/shroud', createWebhookHandler({
secret: process.env.SHROUD_WEBHOOK_SECRET!,
onSmsReceived: (event) => {
console.log('OTP received:', event.extractedOtp);
},
onEmailReceived: (event) => {
console.log('Magic link:', event.extractedUrl);
},
}));

Error handling​

ExceptionHTTP codeDescription
AuthenticationError401Invalid or expired API key
BudgetExceededError402Card transaction exceeds remaining budget
RateLimitError429Too many requests, retry after backoff
ProfileNotFoundError404Profile has been destroyed or does not exist