Hello World
Build your first automation in 5–10 minutes: a webhook that receives a POST, transforms the body, and stores the result. Zero credentials required.
The point is to feel the plugin loop end-to-end: describe what you want in plain English, watch Claude build and commit it, send a webhook, ask what happened. Real integrations come next.
What you'll build
A webhook automation that:
- Receives an HTTP POST.
- Uppercases the request body.
- Saves the result to APIANT's built-in keyvalue storage under the key
last_message.
No external accounts. No API keys. The trigger and both actions ship with the platform.
Prerequisites
- Plugin installed and
/apiant-setupreports healthy. See Install the Plugin if you haven't done that yet. - A terminal with
curlavailable — macOS, Linux, or Windows.
Step 1 — Describe what you want
In Claude Code, ask for the integration in plain English:
"Build a hello-world automation: when a webhook fires, uppercase the request body and save the result to keyvalue storage under the key
last_message."
Claude reads that and starts the build. If it doesn't already know your first name, it asks once and reuses the answer for version history on every automation you commit.
Step 2 — Watch Claude build
Claude works through the build in phases. It looks up the catalog to find a webhook trigger, an uppercase text transform, and a keyvalue-write action, drafts the automation, and reviews it for at-risk field mappings. With nothing dicey in this build (no dates, no phone numbers, no currency), Claude commits without pausing.
If Claude has to make a judgement call (which transform variant to pick, what keygroup to use), it tells you what it picked and keeps going. It only stops to ask if it genuinely cannot proceed.
Step 3 — Read the commit response
When the commit lands, Claude prints two URLs to the chat:
Your automation has been saved. You can review it here:
https://yourtenant.apiant.com/automation-editor.html?edit_automation_uuid=7f3a...Here is your webhook URL — paste it into your app's webhook settings:
https://yourtenant.apiant.com/webhook/7f3a..._a91c...
The first link opens the automation in the visual editor. The second is the endpoint your test request will hit. The path is <system-domain>/webhook/<automation_uuid>_<trigger_assembly_instance_uuid>. Once committed, that URL is yours until you delete the trigger.
Step 4 — Send a test webhook
Use the webhook URL from the previous step:
curl -X POST https://yourtenant.apiant.com/webhook/7f3a..._a91c... \
-H "Content-Type: text/plain" \
-d "hello world"
You'll get an HTTP 200 back immediately. The 200 means APIANT accepted the POST and queued it for routing — not that the automation ran. Routing happens asynchronously on the server.
Step 5 — Ask what happened
In Claude Code:
"What did the last execution do?"
Claude pulls the run history and walks each step with its input and output, ending with the overall status. If the run succeeded, you'll see the trigger's body, the uppercased value, and the keyvalue write — same data, three steps.
You just built, tested, and inspected an automation end-to-end without writing a line of code. Same loop, same shape: describe in chat, get a live URL, send traffic, ask what happened. It scales to a 30-step Salesforce-to-HubSpot sync.
What you learned
- Drafts and commits are first-class. Automations live as drafts until Claude commits them. Each commit is a numbered version — you can roll back, diff, and replay.
- Webhook URLs are deterministic. The path is
<system-domain>/webhook/<automation_uuid>_<trigger_assembly_instance_uuid>. Once committed, the same URL is yours until you delete the trigger. - Plain-English ask is the interface. You describe the integration; Claude picks the trigger, the actions, the field mappings, and the storage scope. The visual editor is where you review and tweak.
Troubleshooting
The curl returns 200 but the automation doesn't appear to run. APIANT accepts every well-formed POST and queues it — a 200 is not proof of execution. The most common cause is that the automation isn't active yet. Ask Claude "set this automation active", then resend the curl. Then ask "what did the last execution do?" to confirm.
The curl returns 503 with a maintenance message. The system is rejecting webhooks platform-wide. This is a sandbox state, not your fault. Wait a minute and retry, or ask Claude to check tenant health.
Asking Claude to test it before sending any traffic. The webhook trigger has no payload schema until something has POSTed to it. Claude tries to replay one from history first, but on a brand-new hello-world there's nothing to replay. Claude asks you to send the curl. Send it, then ask "what did the last execution do?" — once a real payload has been ingested, testing from chat works on subsequent runs.
Claude says it can't find a webhook, uppercase, or keyvalue operation in the catalog.
The plugin or your tenant catalog is out of date. Run /apiant-setup again. If the APIANT skills aren't loaded at all, reinstall the plugin from the Connect to Claude Code menu in the Automation Editor.
The keyvalue write succeeded but you can't find the value.
Keyvalue writes from an automation default to scope=automation and are namespaced by the automation's UUID. Ask Claude "read last_message from this automation's keyvalue storage" — it will issue the matching read with the right scope.
Cleanup. When you're done, say "delete the hello-world automation". Claude lists matches, confirms, and deletes.
Next
API Authentication — pick an instant-API-key service and build your first integration with a real external system.