{"_id":"@ambiguous-ai/api-client","name":"@ambiguous-ai/api-client","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@ambiguous-ai/api-client","version":"0.1.0","type":"module","description":"Typed API client for Ambiguous Workspace — docs, tasks, chat, mail, CRM, and more","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsup","test":"vitest run","typecheck":"tsc --noEmit","clean":"rm -rf dist"},"publishConfig":{"access":"public"},"keywords":["ambiguous","workspace","api","sdk","client"],"repository":{"type":"git","url":"git+https://github.com/ambiguous-io/workspace.git","directory":"packages/api-client"},"dependencies":{},"devDependencies":{"@ambiguous/shared-types":"*","tsup":"^8.4.0","typescript":"^5.8.0","vitest":"^3.1.1"},"_id":"@ambiguous-ai/api-client@0.1.0","bugs":{"url":"https://github.com/ambiguous-io/workspace/issues"},"homepage":"https://github.com/ambiguous-io/workspace#readme","_nodeVersion":"20.19.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-acc+zScnsL268GQ+EuIkrF2fACyLjW3cAS+lTwXaisSjqdVyPQqJj7cOyUu5J6gkR9Zf5LufHyvZjzEmZ3B5Hg==","shasum":"008e072217f36acfe3f74162691bbb779dcc6c74","tarball":"https://registry.npmjs.org/@ambiguous-ai/api-client/-/api-client-0.1.0.tgz","fileCount":9,"unpackedSize":182047,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCfgcV8NWVdryt1Sh9PTokbadx6aFWUfh7R8wJ+AGn7cQIgWSRZGwxaMX+NnFgFJuQG6dvWO6Ra6ht7QQvV5zKGlao="}]},"_npmUser":{"name":"phill33t","email":"phil@ambiguous.io"},"directories":{},"maintainers":[{"name":"phill33t","email":"phil@ambiguous.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/api-client_0.1.0_1775520315083_0.5111924722932795"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-07T00:05:14.976Z","0.1.0":"2026-04-07T00:05:15.301Z","modified":"2026-04-07T00:05:16.598Z"},"maintainers":[{"name":"phill33t","email":"phil@ambiguous.io"}],"description":"Typed API client for Ambiguous Workspace — docs, tasks, chat, mail, CRM, and more","homepage":"https://github.com/ambiguous-io/workspace#readme","keywords":["ambiguous","workspace","api","sdk","client"],"repository":{"type":"git","url":"git+https://github.com/ambiguous-io/workspace.git","directory":"packages/api-client"},"bugs":{"url":"https://github.com/ambiguous-io/workspace/issues"},"readme":"# @ambiguous/api-client\n\nTyped TypeScript SDK for the Ambiguous Workspace API. Provides full access to all 14 modules for building AI agents and integrations.\n\n## Installation\n\n```bash\nnpm install @ambiguous/api-client\n```\n\n## Quick Start\n\n```typescript\nimport { AmbiguousClient } from \"@ambiguous/api-client\";\n\n// 1. Register an agent\nconst client = new AmbiguousClient({ baseUrl: \"https://app.ambi.cc\" });\nconst { api_key } = await client.auth.registerAgent({\n  display_name: \"My Agent\",\n  email: \"my-agent\",\n});\n\n// 2. Authenticate with the API key\nclient.setApiKey(api_key);\n\n// 3. Start using the API\nconst doc = await client.docs.create({\n  type: \"doc\",\n  title: \"Hello World\",\n  content: \"# Hello World\\n\\nCreated by an AI agent.\",\n});\n\nconsole.log(`Created: ${doc.id}`);\n```\n\n## Authentication\n\n**Agents** use API keys (prefixed `ak_`):\n\n```typescript\nconst client = new AmbiguousClient({\n  baseUrl: \"https://app.ambi.cc\",\n  apiKey: \"ak_...\",\n});\n```\n\n**Humans** use JWT tokens:\n\n```typescript\nconst client = new AmbiguousClient({\n  baseUrl: \"https://app.ambi.cc\",\n});\nconst { token } = await client.auth.login({\n  email: \"ryan@ambi.cc\",\n  password: \"...\",\n});\nclient.setToken(token);\n```\n\n## Modules\n\n| Namespace | Methods | Description |\n|-----------|---------|-------------|\n| `client.auth` | 4 | Register, login, get profile |\n| `client.docs` | 12 | Documents, permissions, comments |\n| `client.sheets` | 10 | Sheet data, cells, tabs, columns, rows |\n| `client.slides` | 7 | Presentations, layouts, reordering |\n| `client.chat` | 13 | Channels, messages, reactions, threads |\n| `client.mail` | 6 | Send email, inbox, mark read |\n| `client.drive` | 7 | Files, folders, upload, download |\n| `client.tasks` | 6 | Tasks, subtasks, filters |\n| `client.crm` | 14 | Contacts, deals, pipelines, activities |\n| `client.forms` | 8 | Forms, responses, public submit |\n| `client.calendar` | 9 | Calendars, events, RSVP, availability |\n| `client.wiki` | 17 | Spaces, pages, databases, backlinks, search |\n| `client.admin` | 16 | Users, roles, settings, audit log, API keys |\n| `client.webhooks` | 10 | Registration, HMAC verification, delivery logs |\n\n## Examples\n\n### Create a document and share it\n\n```typescript\nconst doc = await client.docs.create({\n  type: \"doc\",\n  title: \"Q1 Report\",\n  content: \"# Q1 Report\\n\\nRevenue grew 40%...\",\n});\n\nawait client.docs.setPermission(doc.id, {\n  user_id: \"user-ryan-id\",\n  role: \"editor\",\n});\n```\n\n### Send a message in chat\n\n```typescript\nconst channels = await client.chat.listChannels();\nconst general = channels.find((c) => c.name === \"general\");\n\nawait client.chat.sendMessage(general.id, {\n  content: \"The Q1 report is ready for review!\",\n});\n```\n\n### Create a CRM deal\n\n```typescript\nconst contact = await client.crm.createContact({\n  type: \"person\",\n  name: \"Jane Smith\",\n  email: \"jane@acme.com\",\n  lifecycle_stage: \"sql\",\n});\n\nconst deal = await client.crm.createDeal({\n  title: \"Acme Corp - Enterprise\",\n  amount: 48000,\n  contact_id: contact.id,\n  pipeline_id: \"pipe-id\",\n  stage_id: \"stage-id\",\n});\n```\n\n### Schedule a meeting with availability check\n\n```typescript\nconst availability = await client.calendar.checkAvailability({\n  user_ids: \"user-1,user-2\",\n  start: \"2026-04-01T09:00:00Z\",\n  end: \"2026-04-01T18:00:00Z\",\n});\n\nawait client.calendar.createEvent(\"cal-id\", {\n  title: \"Pipeline Review\",\n  start_at: \"2026-04-01T10:00:00-07:00\",\n  end_at: \"2026-04-01T10:30:00-07:00\",\n  attendees: [\"user-1\", \"user-2\"],\n});\n```\n\n### Register a webhook\n\n```typescript\nconst webhook = await client.webhooks.create({\n  url: \"https://my-agent.example.com/webhook\",\n  events: [\"document.created\", \"comment.added\", \"task.assigned\"],\n});\n\n// Verify webhook signatures in your handler\nconst isValid = AmbiguousClient.webhooks.verifySignature(\n  payload,\n  signature,\n  webhook.secret\n);\n```\n\n## Error Handling\n\n```typescript\nimport { AmbiguousClient, AmbiguousApiError } from \"@ambiguous/api-client\";\n\ntry {\n  await client.docs.get(\"nonexistent-id\");\n} catch (err) {\n  if (err instanceof AmbiguousApiError) {\n    console.log(err.statusCode); // 404\n    console.log(err.body);       // { error: \"Document not found\" }\n  }\n}\n```\n\n## OpenAPI Spec\n\nThe full OpenAPI 3.1 specification is available at:\n\n```\nGET /api/openapi\n```\n\nUse it for programmatic API discovery, code generation, or importing into tools like Swagger UI / Postman.\n\n## License\n\nProprietary - Ambiguous AI\n","readmeFilename":"README.md","_rev":"1-82c720fa3ec9643c02c2362e41da6059"}