Facebook Pixel
Fit'DistanceDocumentation
Open the app
On this page

Student for 90 days → a review request

Every Monday, ask for a Google review from the students who joined three months ago, after a first run that sends nothing, with n8n or Make.

Every Monday at 9 am, the students who joined three months ago get a message in the app that asks them for a Google review. This use case writes in your name: it needs a key with Students › Read (students:read) and Messages › Write (messaging:write), and an offer that includes writes. Create the key in the app, terms of use accepted.

What this use case does

  1. Trigger: every Monday at 9 am. The window runs from 97 to 90 days ago: seven days, so each student is asked once.
  2. Students: GET /students with limit=50, every page. Keep those whose joined_at is in the window, unless their contract is PAUSED or EXPIRED.
  3. Send: one POST /operations/messaging.send per student kept.
curl -X POST https://api.fitdistance.io/api/partner/v1/operations/messaging.send \
  -H "Authorization: Bearer fd_live_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: avis-42-2026-10-26" \
  -d '{"text": "Hi Léa, …", "studentId": 42}'

The Idempotency-Key is avis-<id>-<YYYY-MM-DD>, with the date of the run: a replay the same day is refunded. See Writes and idempotency. If your tool is off on a Monday, the students of that window are not caught up.

The message

Hi Léa, we've been working together for three months. If you have two minutes, your Google review would help me a lot: https://g.page/r/XXXXXXXX/review. Thank you!

A review is asked of every student of the window, never only of the satisfied ones, and never bought: Google forbids soliciting only positive reviews and offering anything in exchange. The message stays yours: read it and change it before you enable sending, without making it depend on how satisfied the student is. Your link is in your Google Business Profile, on a computer: Read reviews, Get more reviews, the share icon, then Copy.

What it costs

A page read costs one credit, debited before the call; each message sent costs one. With 100 students: 2 pages read with limit=50, 1 with limit=200, then one message per student of the week. A refused parameter still costs a credit; a 401, a 403 or a 429 costs nothing; a replay is refunded.

A first run that sends nothing

messaging.send has no preview by studentId: dry_run: true gives a 400 DRY_RUN_UNSUPPORTED, free. So the first run lists the students without messaging them, for the price of the reads only.

In n8n

  1. Choose Import from URL… and paste https://fitdistance.io/documentation/api/cas-pratiques/avis-google-90-jours.n8n.json, or download the workflow and choose Import from File…. Pick the Fit'Distance API credential from Connect n8n in each HTTP Request node.
  2. Put your review link at the top of the code of Students to remind: while XXXXXXXX is still in it, the node stops. The text is in French: replace it with the English message above.
  3. Run the workflow and read the output of Students to remind: one item per student, with its text.

Sending writes to real students

Send message ships disabled: enable it only after this first run. The Idempotency-Key carries the date of the day: a run by hand on another day shifts the window and may write twice to the same student. Once sending is enabled, let the schedule work.

  1. Enable Send message, then activate the workflow. It sends at most one message per second.

The loop is the one of Connect n8n: More students? is the If node and Students, next page reads the next page. The hours and the windows follow the time zone of the workflow (Timezone in its settings, New York by default).

In Make

  1. HTTP › Make a request (schedule: every Monday at 9 am): GET on https://api.fitdistance.io/api/partner/v1/students, limit = 200, Parse response set to Yes.
  2. Iterator on data, then a filter: joined_at later than or equal to {{addDays(now; -97)}} and earlier than {{addDays(now; -90)}}, contract_status different from PAUSED and EXPIRED.
  3. Read the result of the filter, then add HTTP › Make a request: POST on /operations/messaging.send, Idempotency-Key = avis-{{id}}-{{formatDate(now; YYYY-MM-DD)}}, Body content type application/JSON, Body input method JSON string, body {"text": "…", "studentId": {{id}}}.

Make reads only 200 students; the n8n workflow reads every page. Reference: students, sending a message.

Next pageFollow a group of students automaticallyTag a group of students, read their pending check-ins every morning, write the feedback and set the check-in to done.