What Does This Article Cover?
Kordiam webhooks send data about stories and events to other systems when they are created, changed or deleted, as long as they have one of the webhook's trigger statuses. You may want to receive this data in automation tools such as Make or n8n. These tools handle incoming webhooks differently from a CMS, and some of them cannot receive all of Kordiam's requests.
This article explains what Kordiam expects from the receiving system, how to check your tool in a few minutes, and what currently works with Make and n8n.
This article is only about sending data from Kordiam to another tool. Importing data into Kordiam is not affected: you can use the Kordiam API from any of these tools.
Related articles:
- Setting Up the Webhook-Connection explains how to configure a webhook in Kordiam.
- Global Export Integration (Webhooks) describes the requests and data Kordiam sends.
How Does Kordiam Send Data to Your Webhook?
Kordiam treats the URL you enter as a base address and adds a path to it. Which path depends on what happened to the story:
| Event | Method | Address Kordiam calls |
|---|---|---|
| Connection test | HEAD | {your URL}/element |
| Story created | POST | {your URL}/element |
| Story updated | PUT | {your URL}/element/{external ID} |
| Story deleted | DELETE | {your URL}/element/{external ID} |
Enter the URL without /element. Kordiam adds it.
The connection test only checks that the address can be reached and that your credentials are accepted. A successful test does not guarantee that updates and deletions will reach your tool.
The external ID is the ID of the item in the receiving system. When a story is created, the receiving system should answer with this ID, for example {"id": "1234"}. Kordiam stores it and adds it to the address for every later update and deletion. If no ID is returned, updates and deletions are sent with an empty ID. In that case you can set the external ID via the Kordiam API.
In short, the receiving system must accept all four requests under one base URL, and it should return the external ID when a story is created.
How Can I Check Whether My Tool Is Compatible?
You can test any tool in a few minutes, before building a workflow and without involving Kordiam.
- Create a webhook in your tool and copy its URL.
- Use an API client such as Postman to send a POST request to {your URL}/element.
- Send a PUT request to {your URL}/element/1234.
- Check whether both requests arrived in your tool.
If both arrive, your tool can receive Kordiam's webhooks. If either request is rejected, for example with "not found", "not registered" or "access denied", your tool cannot receive the full set of requests.
To see exactly what Kordiam sends, you can point a webhook at a free inspection service such as webhook.site first.
Can I Use Make (Formerly Integromat)?
Not for receiving Kordiam webhooks. Make only accepts requests on the exact webhook URL it generates. Because Kordiam adds /element to that URL, Make rejects every request, including the connection test, with an "Access denied" error.
This is not a configuration problem and cannot be changed in Make's settings. See What Are My Options? below.
You can still use Make to send data into Kordiam via the Kordiam API.
Can I Use n8n?
Partly. We tested n8n Cloud. New stories arrive in n8n, and n8n can return the external ID, which Kordiam stores. Updates and deletions cannot be received with a single Kordiam webhook.
The reason: n8n only accepts requests on an exact path. To accept a variable ID, the path needs a placeholder such as /element/:id. On n8n Cloud, a path with a placeholder is published under its own, separate base URL, and the placeholder cannot be optional. Kordiam uses one base URL per webhook, so it can reach either the part of your workflow for new stories or the part for updates and deletions, but not both.
Setting Up n8n for New Stories
- Add a Webhook node. Set the path to your own value followed by /element, for example 1a2b3c4d/element.
- Enable Allow Multiple HTTP Methods and select POST and HEAD. HEAD is needed for Kordiam's connection test.
- Set Respond to Using 'Respond to Webhook' Node.
- Add a Respond to Webhook node after the step that creates the item in your target system. Set Respond With to JSON and return the new item's ID, for example {"id": "{{ $json.id }}"}.
- Set Authentication to Header Auth and enter a header name and value of your choice.
- Activate the workflow and copy the Production URL, not the Test URL.
- In Kordiam, create a webhook with the connection type Custom Header. Enter the Production URL without /element, plus the same header name and value.
If you change a webhook path in n8n later, deactivate and reactivate the workflow. Otherwise n8n keeps listening on the old path, and requests from Kordiam are not received.
What About Zapier and Other Automation Tools?
The Zapier app for Kordiam imports data into Kordiam. It does not receive Kordiam webhooks.
Zapier, Microsoft Power Automate and similar hosted tools generate a fixed webhook URL. We therefore expect them to behave like Make or n8n. Please run the check described above before you build a workflow.
What Are My Options?
If your tool cannot receive all of Kordiam's requests, these approaches work:
- Your own endpoint. Any service where you can define routes yourself, such as a small web service run by your IT team, can accept /element and /element/{external ID} directly.
- A forwarding service in front of your automation tool. It receives all requests from Kordiam, moves the external ID from the address into a header or the request body, and forwards everything to your tool's fixed webhook URL. This works with Make, n8n and similar tools, but you need to host and maintain the forwarding service.
- Retrieving data instead of receiving it. Your tool can query the Kordiam API at regular intervals. For on-premise systems, the Message Queue integration notifies your system about changes, which then retrieves the data via the API.
If your systems are behind a firewall, allow the IP addresses used by Kordiam.
For an overview of all integration options, see Options for integrating Kordiam with a CMS.
Note for Developers: Webhook Data and API Data Differ
The data Kordiam sends via webhook and the data the Kordiam API returns for the same story are two different formats. The API does not simply add fields to the webhook data. Field names, structures and values can differ.
Examples:
| Data | Webhook | Kordiam API |
|---|---|---|
| External ID | externalElement.id | externalElement.externalId |
| Task assignee | assignee (ID and name) | user (ID, name, email, supplier ID, external ID) |
| Confirmation status | confirmationStatus.id, e.g. "No feedback requested" | confirmationStatus.code, e.g. "Not requested" |
| Groups | all groups with parent and selected flags | selected groups only |
| Publication platform | platform (ID only) | platform (ID and name) |
| Publication date | single, with start date and time | schedule, with date and kind |
Build your processing of incoming webhooks against the Global Export Integration (Webhooks) description, and your API calls against the API documentation. Do not reuse one data model for both.
These differences are intended.
Questions?
If you are unsure whether your tool is compatible, or need help choosing an approach, please contact the Customer Success team at support@kordiam.io.
Comments
0 comments
Please sign in to leave a comment.