Skip to main content

When to use this page

If you’re building a custom integration, a scheduled job, or a non-MCP agent, or you just want to confirm your PAT works before pasting it into Claude, this page walks you through the API with curl. Every endpoint shown here is also exposed via MCP if you’d rather work that way; see the Quickstart for that path. The base URL is:
Every request needs:

1. Verify auth

Set your token:
Confirm the API recognizes it:
Expected response:
If you see 401 PAT_MALFORMED, the token format is wrong. If you see a 401 with no code, the token is correctly shaped but doesn’t resolve to an active key. Either way, generate a fresh one in Settings → API Tokens.

2. Check your tier and credits

Tier and credits gate write operations. Always check before a batch:
The credits response includes canCreateProject, projectsRemaining, and nextReset so you can plan around your monthly allocation.

3. List your projects

Response is an array of project summaries with status flags (hasAuditAnalysis, hasDeliverables) and counts so you can see workflow progress at a glance.

4. Create a project

Costs 1,000 credits. Returns 201 with the new project.
Capture the project ID:

5. Trigger the audit analysis

This is the expensive call. The direct synthesis endpoint runs synchronously for ~10-15 minutes, most clients should use the async endpoint + polling instead (see below). If you do call it directly, set a very generous timeout and know that a timed-out request may still have completed server-side:
Response includes { analysis, requestData, message }. If your project already has current document and interview analysis records, you can use the async endpoint and poll the returned job:
Capture the job ID:
Poll until status is "completed" or "failed". To check the synchronous endpoint’s current project-level status:
Returns "running" while in flight, the full payload when complete.

6. Read the deliverables

After analysis completes:
The response is wrapped in { success: true, data: ... }. The data object contains the executive summary, opportunity matrix, risk assessment, and stakeholder memos. For just the opportunities (most common agent query):

7. Capture a note into Nucleus

Nucleus ingests text from outside sources via captures. After a client call, post the transcript:
Response wraps the capture in { "capture": { ... } } with status: "pending". Extraction runs async (~15–60s), poll the capture detail to see structured items appear:
status: "processed" and a non-zero items count means extraction finished.

8. Search Nucleus memories

Each memory carries a confidence score and a source type. Treat detected patterns under 0.8 as hypotheses.

9. Convert a lead

If you have inbound leads from a ReadyLink survey, list and convert them:
Re-converting an already-converted lead returns 400 (not 409). Check surveyStatus !== 'converted' before calling.

Error handling, in one place

StatusWhat it meansWhat to do
200 / 201 / 204SuccessContinue
400Validation failed; check code (e.g. EMPTY_PATCH, DESCRIPTION_TOO_LONG)Fix the request body
401 PAT_MALFORMEDToken format invalidGenerate a new token
401 (no code)Token doesn’t resolveToken revoked or expired; generate a new one
402Insufficient credits (lead conversion only)Buy credits or wait for monthly reset
403 PAT_SCOPE_INSUFFICIENTWrong scope (write needed)New token with read + write
403 PAT_ROUTE_NOT_ALLOWEDRoute isn’t on the agent allowlistUse the web app for that one
404Resource not found, OR you don’t own it (RLS)Check the ID and your ownership
429Rate limit hitHonor Retry-After, back off
500 / 502 / 503Server side or kill switchRetry with exponential backoff; if persistent, contact support
A full code reference is in Authentication → Error codes.

Putting it together: a 5-line cron

A daily Slack brief in pure shell + curl + jq:
That’s the entire integration. No MCP, no agent, no SDK, just curl and your shell.

What’s next