CF
Carter Intel
CF
Carter Intel

Carter Intel API

crm.bensmith.co

Full programmatic access to every feature — contacts, properties, pipeline, campaigns, signals, voice commands, and webhooks. All tRPC procedures use the /api/trpc batch endpoint. REST endpoints are available for tracking, webhooks, and file uploads.

Base URL: https://crm.bensmith.co
Auth: API key (Bearer) or OAuth cookie
53 endpoints · 14 routers
tRPC 11 + superjson · CORS open

Authentication

API Key (recommended) — Generate a key in Settings → API Keys. Pass it as a Bearer token in the Authorization header on every request. Works from any origin (CORS fully open). All protectedProcedure endpoints are accessible.

OAuth cookie — For browser-based access. Complete the Manus OAuth flow; the session cookie is set automatically. Include credentials: 'include' on every fetch.

// ── Option A: API Key (recommended for external tools) ──────────────────────
// Pass your key in the Authorization header — no cookies or OAuth required.
const res = await fetch("https://crm.bensmith.co/api/trpc/briefing.today?batch=1&input=" +
  encodeURIComponent(JSON.stringify({ "0": { json: null } })), {
  headers: {
    "Authorization": "Bearer ci_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "Content-Type": "application/json",
  }
});
const data = await res.json();

// ── Option B: OAuth session cookie (browser / same-origin) ───────────────────
// After completing the Manus OAuth flow, the session cookie is set automatically.
// Include credentials on every request:
const res2 = await fetch("https://crm.bensmith.co/api/trpc/briefing.today?batch=1&input=...", {
  credentials: "include",
  headers: { "Content-Type": "application/json" },
});

QUERY tRPC Query Format

Queries use GET requests with encoded input.

// tRPC Query (GET) — batch format
const url = "https://crm.bensmith.co/api/trpc/contacts.list?batch=1&input=" +
  encodeURIComponent(JSON.stringify({
    "0": { json: { page: 1, pageSize: 50, search: "panattoni", warmOnly: false } }
  }));

const res = await fetch(url, {
  headers: { "Authorization": "Bearer ci_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" }
});
const data = await res.json();
// data[0].result.data.json → { items: [...], total: 1234 }

MUTATION tRPC Mutation Format

Mutations use POST requests with JSON body.

// tRPC Mutation (POST) — batch format
const res = await fetch("https://crm.bensmith.co/api/trpc/contacts.addOne?batch=1", {
  method: "POST",
  headers: {
    "Authorization": "Bearer ci_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "0": {
      json: {
        firstName: "John", lastName: "Smith",
        title: "VP Acquisitions", company: "Panattoni Development",
        email: "[email protected]", contactType: "BTS Developer",
      }
    }
  })
});
const data = await res.json();
// data[0].result.data.json → { id: 29815, firstName: "John", ... }
Carter Intel API · crm.bensmith.co · Updated May 2026tRPC Docs Resend Docs