Loading...
Loading...
Complete guide to using @openserv-labs/client for managing agents, workflows, triggers, and tasks on the OpenServ Platform. Covers provisioning, authentication, x402 payments, ERC-8004 on-chain identity, and the full Platform API. IMPORTANT - Always read the companion skill openserv-agent-sdk alongside this skill, as both packages are required to build any agent. Read reference.md for the full API reference.
npx skill4agent add openserv-labs/skills openserv-client@openserv-labs/clientreference.mdtroubleshooting.mdexamples/npm install @openserv-labs/clientprovision()run()provision()run()examples/agent.tsKey Point:is idempotent. Call it every time your app starts - no need to checkprovision()first.isProvisioned()
provision()agent.instance.openserv.jsonworkflowname'Viral Content Engine''Crypto Alpha Scanner''Life Catalyst Pro'goalworkflow: {
name: 'Deep Research Pro',
goal: 'Research any topic in depth, synthesize findings from multiple sources, and produce a comprehensive report with citations',
trigger: triggers.webhook({ waitForCompletion: true, timeout: 600 }),
task: { description: 'Research the given topic' }
}provision()const agent = new Agent({ systemPrompt: '...' })
await provision({
agent: {
instance: agent, // Calls agent.setCredentials() automatically
name: 'my-agent',
description: '...'
},
workflow: { ... }
})
// agent now has apiKey and authToken set - ready for run()
await run(agent)OPENSERV_API_KEYinterface ProvisionResult {
agentId: number
apiKey: string
authToken?: string
workflowId: number
triggerId: string
triggerToken: string
paywallUrl?: string // For x402 triggers
apiEndpoint?: string // For webhook triggers
}PlatformClientimport { PlatformClient } from '@openserv-labs/client'
// Using API key
const client = new PlatformClient({
apiKey: process.env.OPENSERV_USER_API_KEY
})
// Or using wallet authentication
const client = new PlatformClient()
await client.authenticate(process.env.WALLET_PRIVATE_KEY)reference.mdclient.agents.*client.workflows.*client.triggers.*client.tasks.*client.integrations.*client.payments.*client.web3.*triggersimport { triggers } from '@openserv-labs/client'
// Webhook (free, public endpoint)
triggers.webhook({
input: { query: { type: 'string', description: 'Search query' } },
waitForCompletion: true,
timeout: 600
})
// x402 (paid API with paywall)
triggers.x402({
name: 'AI Research Assistant',
description: 'Get comprehensive research reports on any topic',
price: '0.01',
timeout: 600,
input: {
prompt: {
type: 'string',
title: 'Your Request',
description: 'Describe what you would like the agent to do'
}
}
})
// Cron (scheduled)
triggers.cron({
schedule: '0 9 * * *', // Daily at 9 AM
timezone: 'America/New_York'
})
// Manual (platform UI only)
triggers.manual()Important: Always setto at least 600 seconds (10 minutes) for webhook and x402 triggers. Agents often take significant time to process requests — especially in multi-agent workflows or when performing research, content generation, or other complex tasks. A low timeout (e.g., 180s) will cause premature failures. When in doubt, err on the side of a longer timeout. For multi-agent pipelines with many sequential steps, consider 900 seconds or more.timeout
triggers.x402({
name: 'Content Writer',
description: 'Generate polished content on any topic',
price: '0.01',
input: {
topic: {
type: 'string',
title: 'Content Topic',
description: 'Enter the subject you want covered'
},
style: {
type: 'string',
title: 'Writing Style',
enum: ['formal', 'casual', 'humorous'],
default: 'casual'
}
}
})┌───────────── minute (0-59)
│ ┌───────────── hour (0-23)
│ │ ┌───────────── day of month (1-31)
│ │ │ ┌───────────── month (1-12)
│ │ │ │ ┌───────────── day of week (0-6, Sunday=0)
* * * * *0 9 * * **/5 * * * *0 9 * * 1-5import { getProvisionedInfo, clearProvisionedState } from '@openserv-labs/client'
// Get stored IDs and tokens
const info = getProvisionedInfo('my-agent', 'My Awesome Workflow')
// Clear state (forces fresh creation)
clearProvisionedState()discoverServices()PlatformClientimport { PlatformClient } from '@openserv-labs/client'
const client = new PlatformClient() // no API key or wallet needed
const services = await client.payments.discoverServices()
for (const service of services) {
console.log(`${service.name}: $${service.x402Pricing}`)
console.log(`URL: ${service.webhookUrl}`)
}curl -X POST https://api.openserv.ai/webhooks/trigger/TOKEN \
-H "Content-Type: application/json" \
-d '{"query": "hello world"}'const result = await client.payments.payWorkflow({
triggerUrl: 'https://api.openserv.ai/webhooks/x402/trigger/TOKEN',
input: { prompt: 'Hello world' }
})| Variable | Description | Required |
|---|---|---|
| User API key (from platform) | Yes* |
| Wallet for SIWE auth | Yes* |
| Custom API URL | No |
import { PlatformClient } from '@openserv-labs/client'
const client = new PlatformClient()
await client.authenticate(process.env.WALLET_PRIVATE_KEY)
const erc8004 = await client.erc8004.registerOnChain({
workflowId: result.workflowId,
privateKey: process.env.WALLET_PRIVATE_KEY!,
name: 'My Agent',
description: 'What this agent does'
})
console.log(`Agent ID: ${erc8004.agentId}`) // "8453:42"
console.log(`Explorer: ${erc8004.blockExplorerUrl}`)
console.log(`Scan: ${erc8004.scanUrl}`) // "https://www.8004scan.io/agents/base/42"chainIdrpcUrlreference.mdawait client.workflows.delete({ id: workflowId })
await client.agents.delete({ id: agentId })
clearProvisionedState()# Check if updates are available
npx skills check
# Update all installed skills to latest versions
npx skills updatenpx skills add openserv-labs/skills