Build with NuLayers
Everything you need to integrate tools into your AI agents. From quickstart to production-ready patterns.
5-minute setup
Sign up, copy your key, make your first call.
Framework agnostic
Works with AI SDK, LangChain, CrewAI, or raw HTTP.
Production-ready
Retries, rate limits, and audit logs built in.
Quickstart
Make your first tool execution in under a minute. Get an API key from your dashboard, then run any tool with a single HTTP call.
Currently Live Tools
Web Search and HTTP Client are fully functional. Additional integrations (Slack, Salesforce, Stripe, etc.) are being connected and will return mock responses until live.
curl -X POST YOUR_APP_URL/api/v1/execute \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"tool": "web-search",
"action": "search",
"input": {
"query": "latest AI agent frameworks",
"limit": 5
}
}'Authentication
All requests require a Bearer token in the Authorization header. Generate API keys from your dashboard.
Keep your keys secret
Never expose API keys in client-side code. Use environment variables and rotate keys regularly.
Execute a tool
Use the official SDKs for type-safe access from Node.js or Python.
// Using fetch (Node.js / Browser)
const response = await fetch(process.env.NULAYERS_API_URL + "/api/v1/execute", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.NULAYERS_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
tool: "web-search",
action: "search",
input: { query: "latest AI agent frameworks", limit: 5 },
}),
})
const result = await response.json()
console.log(result.output)import os
import requests
response = requests.post(
os.environ["NULAYERS_API_URL"] + "/api/v1/execute",
headers={
"Authorization": f"Bearer {os.environ['NULAYERS_API_KEY']}",
"Content-Type": "application/json",
},
json={
"tool": "web-search",
"action": "search",
"input": {"query": "latest AI agent frameworks", "limit": 5},
},
)
print(response.json())List tools
Discover available tools and their schemas programmatically.
curl YOUR_APP_URL/api/v1/tools \
-H "Authorization: Bearer YOUR_API_KEY"
# Response
{
"data": [
{
"slug": "web-search",
"name": "Web Search",
"actions": ["search", "news", "images"],
"category": "Search"
},
...
]
}Framework adapters
Drop NuLayers tools directly into your favorite agent framework.
// Using with Vercel AI SDK
import { generateText, tool } from "ai"
// Define NuLayers as a tool
const webSearch = tool({
description: "Search the web for information",
parameters: z.object({ query: z.string() }),
execute: async ({ query }) => {
const res = await fetch(process.env.NULAYERS_API_URL + "/api/v1/execute", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.NULAYERS_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
tool: "web-search",
action: "search",
input: { query, limit: 5 },
}),
})
return res.json()
},
})Error handling
All errors return a structured response with a stable code and human-readable message. Retry with exponential backoff for rate_limited and upstream_unavailable.
{
"error": {
"code": "invalid_input",
"message": "Field 'query' is required",
"tool": "web-search",
"action": "search"
}
}