Skip to main content

🔍 Going further with the Kraaft API

Have you activated the API and created your key? Head over to How to use the Kraaft API to get started ⚡

This article gathers the subtleties you only discover by testing the API in depth — keep it handy if your Make scenario gets stuck, if a field looks odd, or if you can’t find a conversation created via the API 🕵️


📦 The API resources, in detail

  • 🗂️ Workspaces — lists the workspaces accessible with your key

  • 📋 Schemas — gives you the structure of a report (the fields, and for choice fields, the mapping between each id and its label)

  • 📝 Records — lists, reads, creates and updates the reports of a given schema

  • 💬 Conversations (Rooms) — reads, creates and updates a conversation, manages its members, and sends messages (text and files)

  • Events — lists past events or stays connected to receive them in real time, as soon as a report changes


🤖 Connecting to Make, n8n or Zapier

  • Make — install the Kraaft app directly from make.kraaft.co: authentication happens via OAuth, in one click, no need to copy an API key by hand anymore

  • 🔧 n8n, Zapier and others — no native Kraaft connector yet: use your tool’s HTTP or API request module, with your Kraaft API key as a Bearer token


🔒 The 4 key roles, what they actually do

Every API key has a role, just like a regular Kraaft user: External, Standard, Administrator, Owner 👤 But their real behavior has a few surprises ⬇️

  • 🚫 Externalcannot create a conversation (missing "Room.create" error). It can only act (send a message, create a report) in conversations it’s already a member of

  • ⚠️ Standard — can create a conversation, BUT is not automatically added as a member! Remember to call the endpoint that adds a member to the conversation right after — with an Admin/Owner key, or another key that’s already a member, otherwise the Standard key stays locked out of reading or writing to the conversation it just created

  • Administrator & Owner — full access to the workspace, without needing to be a member of a conversation: they see and edit every non-private conversation, even ones they just created

💡 The right move if you’re stuck: if your Make scenario with a Standard key "sees nothing" or "breaks right after creating a conversation", it’s very likely this conversation-membership trap — not a bug. Two options: use an Admin/Owner key for that scenario, or have your key added as a member by someone who already has access to the conversation.


🆔 Resolving an ID into a label

Choice fields (status, categories…) and user fields don’t return the label shown in the app — only a technical identifier 🔢

  • For a choice field: fetch the report’s schema (GET Schema) — each option lists its id and label, you just need to match them up

  • For a user: no automatic API solution — there’s no endpoint that returns a user’s name or email from their ID. Ask our support for an export of your workspace’s IDs to match them up


🧩 Understanding list and table fields via the API

For a report with simple fields (text, number, checkbox, date, choice, photo), the schema gives you all the data directly. For list and table fields — common in reports (timesheets, materials, inspections) — the structure is more complex 🧩

Example: a weekly timesheet. In the app, the "Weekly timesheet" field shows one section per day (Monday, Tuesday…) with several fields each. Through the API, this same field returns:

"weekly_timesheet": { "type": "multiple", "ofType": "recordId", "value": ["id_monday", "id_tuesday", "id_wednesday", ...] }

In short: the API works well for simple fields, but not yet in detail for list and table fields — the precise content of each row isn’t directly accessible.


⚡ Filtering and real time: what exists

Two advanced capabilities exist and are worth knowing about, without going into detail here (the developers.kraaft.co docs cover all of it):

  • 🔍 Server-side filtering — report and event lists accept a filter parameter (for example: only reports whose status changed) instead of fetching everything and sorting it yourself

  • 📡 Real-time events — besides polling the API at regular intervals, you can stay connected and receive every change as it happens (handy for a reactive integration, e.g. notifying an ERP in under a second)


🚫 What’s still not possible today

⚠️ Not yet possible via the API

  • 🗑️ Deleting a report or a conversation — only archiving a conversation is possible, not deletion

  • 👤 Automatically retrieving the name or email of a user from their ID — ask our support for an export if you need it (see above)


💬 Need help?

Did this answer your question?