Create cards using webhooks

This guide shows you how to use incoming webhooks to automatically create and categorize cards in your board from any external system.

Create cards using webhooks
This guide shows you how to use incoming webhooks to automatically create and categorize cards in your board from any external system.
  1. Setup
  2. Sending data to your webhook
  3. Setting dimension values (Processing)
    1. Simple example
    2. Using logic
    3. Creating multiple cards
    4. Finding dimension codes
    5. Going further with Elo
  4. Board filters
  5. Frequently asked questions
  6. Summary

Setup

Webhooks let external tools — form builders, automation platforms (Zapier, Make), notification systems, or custom scripts — create cards in your board via a simple HTTP request. To enable the feature, go to Board tools > Integrations and click on Webhooks > Setup:

webhook-menu-entry.png

In the dialog that opens, enable the feature and give your webhook a name. A unique slug is generated automatically — this slug is part of your webhook URL. You can regenerate it or customize it if you prefer:

webhook-processing-tab.png

Once enabled, your webhook URL is displayed and ready to use. It looks like this:

https://yourproject.klaro.cards/w/your-slug-here

Copy it using the copy button, or grab one of the ready-made code snippets shown below the URL.

Sending data to your webhook

Send a POST request with a JSON body to your webhook URL. Keep the URL private — the slug acts as its secret.

Here's a curl example:

curl -X POST 'https://yourproject.klaro.cards/w/your-slug-here' \
  -H 'Content-Type: application/json' \
  -d '{
    "title": "My card title"
  }'

Most automation platforms (Zapier, Make, n8n, etc.) have built-in HTTP/webhook actions — just paste your URL there and configure the JSON body.

You can send any JSON structure — the payload is transformed into a card using the Elo expression you configure in the Processing tab.

Setting dimension values (Processing)

The Processing tab lets you write an Elo expression that transforms the incoming JSON payload into a card. The expression receives the payload as _ and must return a Tuple whose keys are your dimension codes, and whose values are dimension values.

webhook-config-dialog.png

Simple example

If your external system sends { "name": "Bug report", "body": "Login is broken" }, you can map it to card fields like this:

{
  title: _.name,
  specification: _.body
}

Using logic

You can include conditions to auto-categorize cards. For example, if you have a Priority dimension:

{
  title: _.name,
  specification: _.body,
  priority: if contains(_.name, 'urgent') then 'High' else 'Normal'
}

Creating multiple cards

Your Elo expression can also return an array to create several cards from a single webhook call:

[
  { title: _.primary, specification: _.details },
  { title: concat('Follow-up: ', _.primary) }
]

Finding dimension codes

For the keys of your Elo tuple, use the dimension and value codes as shown in each dimension's configuration screen:

dimension-code.png

dimension-value-code.png

Going further with Elo

Elo supports date handling, string manipulation, and much more. See the full Elo language reference for all available functions and features.

Board filters

As usual in Klaro Cards, board filters provide default values for new cards. If your board has filters set (for example, a specific Kind or Language), cards created by webhooks will inherit those values automatically — no extra configuration needed.

Frequently asked questions

  • What happens if my webhook is disabled?

    Requests are silently ignored. Re-enable the webhook in the configuration dialog to resume processing.

  • What if my Elo expression has an error?

    The card won't be created. Check your Elo syntax and test with a simple expression like { title: _.title } first.

  • Can I create cards on multiple boards?

    Yes — set up a separate webhook on each board. Each board has its own slug and Elo expression.

Summary

Go back

Article status changed.

Article status changed.

Article status changed.