Facebook Pixel
Fit'DistanceDocumentation
Open the app
On this page

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

  1. The link: in the form, type /hidden to insert a hidden field block, and name it student_id: without it, the answer has no student id. Then you send the form to the student, for example https://tally.so/r/<form>?student_id=123. The student's id appears in the address of their file in the app, or in GET /students. The name student_id is written exactly like that. The value of student_id can 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.
  2. Tally: on every answer, it sends n8n an event with data.responseId, data.formName and data.fields. Each field has a label, a type and a value; the hidden field has the type HIDDEN_FIELDS.
  3. The note: a POST /operations/students.note_create writes Formulaire <name> du <date> :, then one question : answer line 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.

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

  1. 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 the Fit'Distance API credential from Connect n8n in the HTTP Request node.
  2. Replace the fitdistance-form path of the Webhook with a name only you know, and change-this-secret in 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.
  3. In Tally, publish the form, open Integrations, choose Connect on Webhooks and paste https://<your-n8n>/webhook/<path>. With Add HTTP headers, add the header X-Webhook-Secret, with the same text: without it, the workflow writes nothing.
  4. 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

  1. Tally › Watch New Responses.
  2. A filter: student_id is not empty. Without it, an answer with no student_id calls the API and costs a credit.
  3. HTTP › Make a request: POST on https://api.fitdistance.io/api/partner/v1/operations/students.note_create, Idempotency-Key = note- followed by the id of the response, Body content type application/JSON, Body input method Data structure: a structure with two fields, studentId of type number, with the hidden field student_id, and content of 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.

Next pageThe Monday recap, on Telegram or WhatsAppEvery Monday at 8 am, get your week's recap on Telegram: new students, workouts, check-ins and habits, with n8n or Make.