---
name: givegigs-crm
description: Manage personal or organization GG CRM contacts, deals, tasks and activities; collaborate with teammates and request reviewed AI drafts.
---

# GG CRM

Base URL: `https://givegigs.com`. Authenticate with `Authorization: Bearer givegigs-...` or `X-API-Key`. Keys act as their owner; personal records stay private, and organization workspaces enforce CRM role permissions. GET requires `read`; POST, PATCH, and DELETE require `write` plus any CRM role permission. Send JSON with `Content-Type: application/json`.

## Records

`GET /api/tools/crm/workspaces` returns personal and organization workspaces with permissions. For an organization, pass `?organizationId=<id>` to CRM endpoints. `GET /api/tools/crm` returns up to 500 records with `nextCursor`; pass `?cursor=<nextCursor>` to continue. `?includeTrash=1` includes deleted records. Each record has `id`, `kind`, `data`, `version`, and timestamps. Kinds are `contact`, `deal`, `task`, and `activity`. See `/crm` for fields and workflows.

Create with `POST /api/tools/crm` and `{ "record": { ...recordData } }`. Update with `{ "id": "...", "version": 1, "record": { ...recordData } }`. Use the returned `version` from reads; a stale update returns 409. `DELETE /api/tools/crm` soft-deletes with `{ "id": "...", "version": 1 }`. `POST /api/tools/crm/bulk` supports version-checked archive, assign, priority, deal-stage, task-completion, contact do-not-contact, and restore actions for up to 100 records. Refresh after conflicts. Invalid fields return 400.

## AI drafts

`POST /api/tools/crm/assistant` with `{ "contactId": "...", "action": "brief" | "email" | "plan" | "proposal" | "meeting" | "risks" | "tasks" }` returns reviewable text (or structured task suggestions). AI drafts are suggestions only; the endpoint does not send email or change CRM records. AI use consumes the account's configured quota. Outreach draft actions are refused for contacts marked do-not-contact.

## Team collaboration

With `organizationId`, `GET /api/tools/crm/members` lists CRM access and `PATCH` manages grants for organization owners/admins. Roles are `NONE`, `VIEWER`, `COMMENTER`, and `EDITOR`; owners and admins inherit editor access. `GET /api/tools/crm/collaboration` reads events, comments for `?recordId=<id>`, or your unresolved mention inbox with `?inbox=1`. `POST` adds a comment or resolves/reopens a discussion; mention only current workspace members. `POST /api/tools/crm/merge` merges 1–4 duplicate contacts into a version-matched primary contact; it preserves DNC suppression, linked records, and comments, and moves duplicates to trash. `POST /api/tools/crm/backup` imports a `gg-crm-v2` backup of up to 500 records into the selected workspace. The importer remaps linked IDs and resets DNC screening and assignees.

## EasyDNC

`POST /api/tools/crm/dnc` with `{ "contactId": "...", "apiKey": "<your EasyDNC key>", "confirmed": true }` performs one paid lookup (currently documented default $0.025; provider account pricing applies). Require explicit user confirmation before calling. The EasyDNC key is passed in JSON body and forwarded in the provider Authorization header; never place it in a URL, logs, saved record, or agent config. The provider lookup can be charged even when a network error occurs; do not automatically retry. Only valid US/Canada phone numbers are accepted. A negative result is not legal permission to call; honor the CRM do-not-contact flag.

Rate limits are 100 reads and 20 writes per minute per account. CRM storage requires the deployed database migration. Browser-only 4weird ports (audio, paint, slices, work prep, counter, SEO and writing) have no agent REST API; their browser data is not accessible through these endpoints. The authenticated CryptArtist terminal is at `/api/tools/cryptartist/terminal` and permits only `help`, `echo`, `date`, and `workspace status`.
