Documentation

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.

bash
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.

Node.js / TypeScript
// 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)
Python
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.

bash
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.

Vercel AI SDK
// 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()
  },
})
Vercel AI SDK
LangChain (JS/Python)
CrewAI
OpenAI Agents SDK
Mastra
Custom (HTTP)

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.

json
{
  "error": {
    "code": "invalid_input",
    "message": "Field 'query' is required",
    "tool": "web-search",
    "action": "search"
  }
}

Need help?

Join our developer community or talk to our solutions team.