A form submission → a note on the student's file
Every answer to a Tally form becomes a private note on the student's file, with n8n or Make.
Every time a student fills in your Tally form, the answers become a private note on their file. This use case writes in your name, without notifying the student: it needs a key with Students › Write (students:write) and an offer that includes writes. Create the key in the app, terms of use accepted.
What this use case does
- The link: in the form, type
/hiddento insert a hidden field block, and name itstudent_id: without it, the answer has no student id. Then you send the form to the student, for examplehttps://tally.so/r/<form>?student_id=123. The student'sidappears in the address of their file in the app, or inGET /students. The namestudent_idis written exactly like that. The value ofstudent_idcan be read and changed in the address: add a question "Your first name", which will be written in the note, to see at a glance who answered. - Tally: on every answer, it sends n8n an event with
data.responseId,data.formNameanddata.fields. Each field has alabel, atypeand avalue; the hidden field has the typeHIDDEN_FIELDS. - The note: a
POST /operations/students.note_createwritesFormulaire <name> du <date> :, then onequestion : answerline per answered field, hidden fields left out.
curl -X POST https://api.fitdistance.io/api/partner/v1/operations/students.note_create \
-H "Authorization: Bearer fd_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: note-2wgx4n" \
-d '{"studentId": 123, "content": "Formulaire Bilan de mi-parcours du 2026-10-26 :\nComment tu te sens ? : Bien"}'The Idempotency-Key is note-<responseId>, the id of the response: a response that Tally sends again is written once and costs nothing more, as long as the key is kept, 24 to 48 hours. See Writes and idempotency.
What you read in the app
The note appears in the student's file, notes tab, like a note written by hand. It stays private: the student does not see it.
What it costs
A note costs one credit, debited before the call: one per answer. An argument the operation's schema refuses is refunded; a 401, a 403 or a 429 costs nothing; a replay is refunded. A student_id that is not one of your students gives a 404 NOT_FOUND, billed.
A link without student_id
In n8n, a link pasted without student_id, or with anything but a positive whole number, breaks nothing: Has a student id? sends the answer to No student id. The workflow stops without writing, and nothing is billed. The answer stays in Tally. In Make, the filter of step 2 plays that role.
In n8n
- Choose Import from URL… and paste
https://fitdistance.io/documentation/api/cas-pratiques/formulaire-note-eleve.n8n.json, or download the workflow and choose Import from File…. Pick theFit'Distance APIcredential from Connect n8n in the HTTP Request node. - Replace the
fitdistance-formpath of the Webhook with a name only you know, andchange-this-secretin Secret matches? with a long random text, then activate the workflow. The webhook address is a password: if it leaks, change the path, because with the address and the secret, every forged call would write a note for one credit. - In Tally, publish the form, open Integrations, choose Connect on Webhooks and paste
https://<your-n8n>/webhook/<path>. With Add HTTP headers, add the headerX-Webhook-Secret, with the same text: without it, the workflow writes nothing. - Fill in the form with your
?student_id=<id>link and read the student's file.
Tally expects a 2xx within 10 seconds; the webhook answers at once, and a wrong secret gets the same answer, but nothing is written. The heading of the note is at the top of the code of Format the note, in French: replace it with your own. Choice answers show as text, not ids.
With Calendly
In n8n, the Calendly Trigger node replaces the Webhook and Secret matches?, and returns the Calendly body without body. The link becomes ?utm_content=123. Format the note reads payload: the student in payload.tracking.utm_content, a string, and the key note- followed by the invitee id, the end of payload.uri, which the guard checks instead of responseId. The note becomes "Appointment booked on …".
In Make
- Tally › Watch New Responses.
- A filter:
student_idis not empty. Without it, an answer with nostudent_idcalls the API and costs a credit. - HTTP › Make a request:
POSTonhttps://api.fitdistance.io/api/partner/v1/operations/students.note_create,Idempotency-Key=note-followed by the id of the response, Body content typeapplication/JSON, Body input methodData structure: a structure with two fields,studentIdof type number, with the hidden fieldstudent_id, andcontentof type text, with the answers. Make escapes quotes and line breaks in them itself.
Tally › Watch New Responses registers its webhook address with Tally itself, through your Tally connection: there is no header to add, and that address, which your form never shows, plays the role of the secret.
Reference: adding a note.