Corlys · Webhooks
Connect Corlys to n8n
Corlys sends journal entries to webhook addresses you set up yourself. This page describes what arrives and gives you a ready n8n workflow that appends each entry to an Obsidian daily note.
Endpoints
You can add as many endpoints as you need. Each one has an address, an optional token, a content type and a way of sending:
- Content: the entry as text, or the recording as an audio file. Text is the default, for typed and dictated entries alike. Audio is meant for receivers that want to transcribe themselves.
- Sending: automatically, or only when you tap send in the entry.
Photos and locations are not sent. Entries imported from Day One are not sent either.
Text endpoints
A text endpoint receives one POST per new entry, as soon as you close it. The body is JSON:
{
"id": "5B0C7C0E-6B1F-4F0B-9C55-2F3E7A0D9A11",
"title": "Walk by the harbour",
"text": "Cold coffee, **great** light.\n\n- Boats\n- Wind",
"createdAt": "2026-10-11T07:42:10Z"
}
| Field | Content |
|---|---|
id | Stays the same when you send an entry again. Use it to avoid duplicates. |
title | The short title the app gave the entry. |
text | The entry in your own words, typed or dictated. Formatted entries arrive as Markdown; underline arrives as <u>. |
createdAt | Date and time of the entry in ISO 8601, in UTC. You can change it in the app. |
The app transcribes on the device, so a text endpoint needs no audio and no speech service.
Audio endpoints
An audio endpoint receives one POST per dictation as multipart/form-data. Each dictation is sent on its own.
| Field | Content |
|---|---|
data | The recording as an M4A file (audio/mp4). n8n’s Webhook node exposes it as the binary property data. |
createdAt | Date and time in ISO 8601. |
duration | Length of the recording in seconds, with one decimal. |
language | Language code of the dictation. |
A dictation lasts up to ten minutes.
Token and response
- If you set a token for an endpoint, it arrives as
Authorization: Bearer <token>. The token is stored in the keychain of your device. - Any
2xxresponse counts as sent. For other codes the app shows themessagefield of a JSON response. - The result of the last attempt is shown in the entry, where you can also send again.
Reaching n8n from your phone
The app sends to https:// addresses. Plain http:// is accepted only for Tailscale addresses (100.64.0.0/10), so a home server without a certificate works through Tailscale.
Example: Obsidian daily note
This workflow appends each entry to the Obsidian daily note of the day it was written. It needs a self-hosted n8n that can see your vault as a folder, for example a Docker volume -v /path/to/vault:/files/vault.
- In n8n, choose Workflows → Import from file and pick
n8n-obsidian-daily-note.json. - Open Prepare entry and set
DAILY_NOTES_DIR(default/files/vault/Daily) andHEADING(default## Journal). Daily notes are expected asYYYY-MM-DD.md. - Create a Header Auth credential with the name
Authorizationand the valueBearer <a long random token>. Select it in Entry webhook. - Set the workflow timezone in the workflow settings. It decides which day an entry written around midnight belongs to.
- Activate the workflow and copy the production URL of the webhook.
- In Corlys: Settings → Webhooks → Add endpoint, content Transcript, sending automatic, the URL and the token from step 3.
The file contains no credentials. The folder and the heading in it are defaults; change them to match your vault.
What lands in the note
## Journal
### 09:15 · Walk by the harbour
<!-- entry:5b0c7c0e-6b1f-4f0b-9c55-2f3e7a0d9a11 -->
Cold coffee, **great** light.
The workflow only appends. It never rewrites what is already in the note, and it creates the note if it does not exist yet. The comment line is how it recognises an entry it has already written, so sending the same entry twice does not add it twice.
What the workflow answers
201when the entry was written.200when the entry was already in the note.400with amessagewhen the fieldtextis missing or empty.