Install our app for a better experience!

Connect Pabbly, Zapier, or Make

Automation Setup — Pabbly, Zapier & Make

All three tools do the same thing: send an HTTP POST to https://<your-platform-host>/api/v1/provision/student/ with your X-API-Key header and a JSON body. Use whichever your team already has.

First get an API key (Complete Onboarding Walkthrough → Step 1) and note the courses names or course_ids your products map to (GET /api/v1/courses/).

Map your products to courses first

Write this table down before building the workflow. It is the only decision you need to make.

Your product Send Duration
IELTS 6‑month plan "courses": ["ielts"] "tenure_months": 6
PTE + IELTS bundle "courses": ["pte_academic", "ielts"] "tenure_months": 3
IELTS Weekend Batch "course_ids": [371] leave out (the course's own default)
IELTS renewal, bought before expiry "courses": ["ielts"], "extend_access": true "tenure_months": 3

Always send external_ref with the order id: it lets you trace a student back to the order, and it is required for extend_access.

Pabbly Connect

  1. Trigger — your source app, e.g. WooCommerce → Order Completed, or your membership plugin's "member activated" event.
  2. Action — API by Pabbly (HTTP request):
  3. Method: POST
  4. URL: https://<your-platform-host>/api/v1/provision/student/
  5. Headers: X-API-Key = <your-key>, Content-Type = application/json
  6. Payload type: JSON / Raw: json { "email": "{{billing_email}}", "first_name": "{{billing_first_name}}", "last_name": "{{billing_last_name}}", "courses": ["ielts"], "tenure_months": 6, "external_ref": "{{order_id}}", "source": "pabbly" } Replace the {{…}} tokens with the fields Pabbly shows for your trigger.
  7. Different products → different courses: add a Router (or one Filter per product) before the action, and give each path its own courses/course_ids and tenure_months.
  8. Test the action. A 201 or 200 with "status": "success" means the student is in.
  9. Turn the workflow on.

Zapier

  1. Trigger — your source app event.
  2. Action — Webhooks by Zapier → POST:
  3. URL: https://<your-platform-host>/api/v1/provision/student/
  4. Payload Type: json
  5. Data: one row per field: email, first_name, last_name, courses (e.g. ielts, or ielts, gmat for several), tenure_months (e.g. 6), external_ref (the order id), source (zapier).
  6. Headers: X-API-Key = <your-key>
  7. Use Paths if different products need different courses.
  8. Test & turn on.

Zapier sends every value as text. That's fine: "6", "true" and "ielts, gmat" are all accepted.

Make.com

  1. Trigger — your source module.
  2. HTTP → Make a request:
  3. URL: https://<your-platform-host>/api/v1/provision/student/
  4. Method: POST
  5. Headers: X-API-Key = <your-key>
  6. Body type: Raw, Content type: application/json, Request content: json { "email": "{{1.email}}", "first_name": "{{1.first_name}}", "courses": ["ielts"], "tenure_months": 6, "external_ref": "{{1.order_id}}", "source": "make" }
  7. Parse response: Yes, so later modules can read email.status or set_password_url.
  8. Use a Router if different products need different courses.
  9. Run once to test, then switch scheduling on.

Choosing how the student signs in

By default the student gets an email with a link to set their own password, and your workflow never handles a secret. Two alternatives, matching the Add Student page:

Add to the body Result
"password_mode": "generate" The platform makes a password, emails it to the student, and returns it in credentials.password so you can show it on a thank-you page.
"username": "priya.n", "password": "Monsoon-Study-42!" The account uses exactly those details, and the student is emailed them.

Either way the student is asked to change the password at first sign-in. If your own system already creates the account elsewhere, note that an email that already has an account keeps its own username and password: the API will not overwrite them.

Handling the response in your workflow

You see Do
200/201, "status": "success" Done.
200, "status": "already_provisioned" Done: this was a repeat.
email.status is failed or suppressed Optional: alert your team, or email the student yourself with set_password_url.
400 Stop. Fix the mapping (the error text says which field). Don't retry unchanged.
401 / 403 Stop. Check the key, or ask your platform administrator.
500 Retry later. It is safe.

Sending your own welcome email

Set "send_welcome_email": false and add a step after the API call that sends your email containing set_password_url from the response. That link works for 3 days (set_password_expires_at). It is only returned for accounts your organization created through the API; anyone else can use Forgot password on the login page.

Test from the command line

curl -s -X POST https://<your-platform-host>/api/v1/provision/student/ \
  -H "X-API-Key: <your-key>" -H "Content-Type: application/json" \
  -d '{
        "email": "you@yourcompany.com",
        "first_name": "Test",
        "last_name": "Student",
        "courses": ["ielts"],
        "tenure_months": 1,
        "external_ref": "manual_test_1"
      }'

Expect 201 with "status": "success", and a welcome email in that inbox. Send the same request again: you get "already_provisioned" and no second email.