Pro-code corner of the trifecta

Build on Turtini.In any IDE. From any code.

A typed Public API. A real npm SDK. An MCP server your AI agent picks up automatically. A live-dev CLI. Pull-to-host that ships your code to your domain. Whether you're a career developer, a vibe-coder, an AI-IDE power user, or a marketplace module author — you build, we host the platform underneath.

Works withCursorClaude CodeWindsurfContinueLovableBoltv0Replit Agent

Who it's for

Developers, vibe-coders, integrators, module authors.

AI-IDE users (Cursor, Claude Code, Windsurf)

Plug @turtini/mcp into your IDE and the agent becomes org-aware. It reads your CRM, drafts articles, lists events — without you pasting context.

Claude Code integration

Vibe-coders (Lovable, Bolt, v0, Replit Agent)

Push your site to a GitHub repo and pull-to-host serves it from your domain. Add Turtini's real CRM, accounting, and auth alongside — no rewrite required.

Pull-to-host walkthrough

External developers + integrators

Bearer-authed REST API, typed SDK, OpenAPI spec, webhooks. Sync Turtini into Salesforce, NetSuite, your warehouse, or your own backend.

API + SDK docs

Marketplace module authors

Build a Turtini module with our Module SDK, ship it through the marketplace, charge what you want. Typed hooks, design tokens, server-side actions.

Marketplace guide

The pro-code surface

Six layers, one platform.

Each layer is independent. Use the API alone, just the MCP server, or compose all six. Nothing forces you down a single path.

Public API

Read & write your org's data from anywhere

A typed, Bearer-authenticated REST API at api.turtini.com. CRM contacts, articles, events, accounts, opportunities — paginated reads, idempotent writes, OpenAPI-described surface.

Read the API docs
  • 5 modules with typed reads + writes; more rolling out
  • Org-scoped API keys with per-module read/write scopes
  • Idempotency-Key header on every write — retries are safe
  • OpenAPI 3.1 spec at /v1/openapi.json — generate a client in 50+ languages
@turtini/sdk

Typed TypeScript client

One npm package. Hooks for marketplace modules, a Turtini class for the Public API, design tokens, all in subpath exports so each part tree-shakes independently. Browser-safe, Node 18+, Deno, Cloudflare Workers.

View on npm
  • Zero peer dependencies on the API client side
  • Auto-pagination via async iterators: `for await (const c of t.contacts.iter())`
  • Auto-generated Idempotency-Key UUIDs per write — overridable
  • Typed errors: AuthenticationError, RateLimitError, IdempotencyConflictError, …
@turtini/mcp

MCP server for your IDE's AI agent

Wire Turtini into Cursor, Claude Code, Windsurf, or Continue and your agent reads + writes your org's data while it codes. Ten Model-Context-Protocol tools mirroring the Public API surface.

Claude Code integration
  • auth_whoami, contact_list, contact_create, article_list, article_create, …
  • org_context_query — natural-language Q&A grounded in your real org state
  • Scope-bound: the agent can only do what the API key can do
  • One-line setup: `npx -y @turtini/mcp`
turtini-dev serve

Live local dev with your real org data

A CLI command that runs a local proxy. Static-site dev with API calls injected server-side, SSE live reload, no API key in the browser bundle. Lovable, Bolt, Vite, hand-rolled HTML — they all just work.

View on npm
  • `turtini-dev serve --dir ./dist` — auto-detects your build dir
  • Code calls `/__turtini/v1/contacts`; the CLI injects auth
  • SSE-based live reload watches the dir on disk
  • `--spa` for client-routed apps (React Router, Vue Router)
Pull-to-host

Connect a GitHub repo, ship to your domain

Push to the connected branch and Turtini auto-deploys to your custom domain. Static-only V1 with vulnerability scanning, preview URLs for non-main branches, and a one-click GitHub Action bootstrap if your site needs a build step.

How it works
  • GitHub webhook → Trees API pull → vuln scan → GCS → Cloudflare edge
  • Preview URLs: <branch>--<siteId>.preview.turtini.com
  • Vulnerability scanner blocks deploys with committed secrets (AWS, Stripe, GitHub, OpenAI, Anthropic, Google)
  • Auto-bootstrap of `.github/workflows/turtini-deploy.yml` for npm-build sites
Browser IDE

Code your Turtini-connected app in the browser

A full Monaco editor in your browser, connected to a GitHub repo, with an AI chat agent that reads + edits code on confirm and a live preview. Lovable / Bolt-style code generation, deployed to your Turtini-hosted domain — no local install required.

Open the IDE
  • File tree | Monaco editor | AI chat | live preview, all in one tab
  • Sandboxed runner with your turtini-dev token pre-installed
  • Autosave per buffer + persistent session — close the tab, pick up where you left off
  • One-click "Deploy" — push to GitHub, build, ship to your connected domain in under a minute
Wally bridge

Natural-language org context for any AI agent

POST a question, get a grounded answer. The org-context endpoint pairs with @turtini/mcp so AI agents in IDEs can ask org-level questions ("what shipped this week?") without you hand-feeding context.

  • POST /v1/org-context/query → grounded summary
  • Backed by Anthropic's Claude with prompt caching (~80% token discount on repeats)
  • System prompt includes modules enabled, top-line counts, recent activity
  • Model is told to refuse invented numbers — directs callers to typed endpoints

Quick start

Pick your entry point.

TypeScript SDK

npm install @turtini/sdk
import { Turtini } from '@turtini/sdk'

const t = new Turtini({ apiKey: process.env.TURTINI_API_KEY! })

// Read — auto-paginated iterator
for await (const c of t.contacts.iter()) console.log(c.email)

// Write — idempotency key auto-generated
await t.contacts.create({
  firstName: 'Ada',
  lastName:  'Lovelace',
  email:     '[email protected]',
})

// Org-level natural-language Q&A
const { answer } = await t.context.query('what shipped this week?')

MCP server (Cursor / Windsurf)

~/.cursor/mcp.json
{
  "mcpServers": {
    "turtini": {
      "command": "npx",
      "args":    ["-y", "@turtini/mcp"],
      "env":     { "TURTINI_API_KEY": "turtini_<your-key>" }
    }
  }
}

MCP server (Claude Code)

Official plugin
# 5-second install — wires the MCP server + ships /turtini slash command
claude plugin install github.com/Turtini/claude-code-plugin

# Then in any Claude Code session:
/turtini

# (Walks you through key minting, env var, and verification.)

Local dev server

npm install -g @turtini/cli
# In your AI-coded site dir
turtini-dev login
turtini-dev serve

# Then in your client code:
const res = await fetch('/__turtini/v1/contacts')

Curl

No install — Bearer auth
curl https://api.turtini.com/v1/contacts \
  -H "Authorization: Bearer turtini_<your_key>"

# OpenAPI spec — public, no auth
curl https://api.turtini.com/v1/openapi.json

The trifecta

Build the way you want — Turtini scales with you.

Most platforms force a choice: lock yourself into no-code (visual builders, vendor walls) or rebuild from scratch in code. Turtini gives you all three corners on one data model.

No-code

Builder + Wally + marketplace templates

Drag-and-drop sites and runbooks. Wally ("Hey Wally…") runs your ops via voice or chat. One-click templates from the marketplace.

Browse the modules

AI-coded

Pull-to-host + IDE workflow + Wally action cards

AI generates your site; we host it at your domain. Wally proposes confirmable action cards. Push to GitHub, Turtini deploys.

Set up pull-to-host

Pro-code

SDK + Public API + MCP + live dev

Bearer-authed REST API, typed SDK, MCP server for IDE agents, OpenAPI spec, local dev CLI. The whole platform is programmable.

View on npm

FAQ

Common questions.

Is the API rate-limited?

Yes — 500 requests / minute / key with a 24-hour idempotency cache on writes. The SDK retries 429s with exponential backoff automatically. Need more? Get in touch — sustained high volume is a sales conversation, not a paywall.

Can I use the SDK from a browser?

Yes for read scopes; the SDK warns once if you use a write scope from a browser context (don't ship a write key in client JS). For browser apps, use a server-side proxy or our turtini-dev CLI.

Does pull-to-host run npm install for me?

No — by design. Running arbitrary build commands inside our infra is a privilege-escalation surface (postinstall scripts, supply-chain attacks). Instead we auto-bootstrap a GitHub Action workflow that builds in your CI and pushes the output to a branch we watch. Free, secure, standard practice.

How do preview URLs work?

Push to a branch that's not your connected primary, and Turtini deploys it to <branch>--<siteId>.preview.turtini.com. They auto-clean after 14 days of inactivity. Your production domain only ever serves the connected primary.

What does the vulnerability scanner check?

Pure-JS regex scan over every file before upload. Critical findings (committed AWS/Stripe/GitHub/OpenAI/Anthropic/Google credentials, PEM private keys) block the deploy. Warnings (eval, password assignments, JWTs) surface in the UI without blocking. Skip lists for example/sample/test paths.

Will my marketplace module survive Turtini upgrades?

Yes — the Module SDK contract is versioned. Modules pinned to a major version stay compatible within that major. Same as the Public API surface.

How do I get my own data out?

The whole point. The Public API exposes every record we hold for you. GitHub Export pushes Builder sites to your repo as static files. The org-context bridge gives AI agents read-grounded summaries. We don't lock anything in.

Start building.

Create an org (free), mint an API key, install @turtini/sdk. Or wire @turtini/mcp into your IDE and let your agent do the heavy lifting.

Turtini uses cookies to improve your experience, analyze site traffic, and personalize content. By clicking Accept, you consent to our use of cookies. Privacy Policy

Wally

Your Turtini assistant

Hi, I'm Wally!

Ask me anything about Turtini — features, pricing, how things work, and more.

or

Already have an account? Sign in

Wally can make mistakes — verify important info.