Wire up your integrations
You have an admin seat and you have been asked to connect First Six to the university's systems. This guide is the running order. Each step links to the reference page with the full contract; what this page adds is the sequence, the dependencies between the pieces, and the parts that are not yours to do.
The whole integration surface is deliberately small. First Six is not an LMS and not a student record system: it reads a roster, it emits events about help requests, and it renders content your staff author. There is no bulk read API for student data, by design.
About 2 hours of hands-on work, spread across the two weeks before launch.
Engineers, IT integration staff, and solution architects at an institution, holding an admin seat in the First Six console. If you are a staff member setting up cohorts and content rather than plumbing, you want Get your cohort ready instead.
The order, and why it is this order
Each step unblocks the next, so working out of order wastes time:
- SSO first. Nobody, including you, can do anything else properly until staff can sign in as themselves. Staff sign-in is SSO-only.
- Then the roster (SIS). Students must exist before they can be put in a cohort, and cohorts must exist before content targets them.
- Then the outbound integrations (webhooks, help-desk, crisis alerts). These carry events about students, so they only produce anything once there are students.
- Event feeds last. They are additive and safe to add at any point, so they never need to block a launch.
The OIDC client secret is set by First Six in the deployment environment, never in the console and never in a config row you can read. And the initial tenant provisioning (creating the institution, the first admin) happens on the First Six side before you get your seat. If either is missing, that is a support conversation, not a task on your list.
Walk through it
- Register First Six in your identity provider
Create an OIDC app registration in Entra, Okta, or Google Workspace. You own this step entirely: it mints the client ID and client secret. Register the redirect URI exactly as First Six gives it to you, in the form
https://<your-console-host>/auth/sso/<your-slug>/callback. A mismatch here is the single most common sign-in failure, and the error your IdP returns is usually unhelpful about it.Send the client ID and the discovery URL to First Six, and send the client secret by a channel that is not email. Full flow, including the claims we read: the OIDC flow.
- Test SSO with a real account, not a test one
Once First Six confirms the config is in, sign in with a genuine staff account from your directory. Some providers send a UPN rather than an email address, and only a real login surfaces that. SSO links a sign-in to a staff row that already exists; it does not create accounts, so invite the staff member first or the link has nothing to attach to.
- Get your SIS secret from the console
In the console, go to Settings → Integrations → Connect your student system. Generate the secret there. It is shown once: store it in your secret manager immediately, because it is stored as a hash and cannot be read back.
You can rotate or revoke it yourself from the same screen. Rotating invalidates the previous value straight away, so schedule it for a window where your feed is not mid-run.
- Push a roster with dry_run first
POST /api/sis/syncwithAuthorization: Bearer <your secret>, the targetcohort_id, and your student rows. Send"dry_run": trueon the first run. You get back a validation report (would_create,would_update,unknown_program_codes,unknown_campuses,duplicate_emails, plus per-row issues) and nothing is written.Treat that report as the pre-go-live roster check. Unknown programme codes and campuses are the usual finding, and both are fixed on your side by matching the values the console already holds, not by inventing new ones. Full body shape: the SIS endpoint.
- If you run block or term teaching, push the term calendar too
Universities on a rolling term model (six-week blocks and similar) also
POST /api/sis/enrolments, which accepts three optional sections in one body:terms(the calendar),units(the unit catalogue, including each unit'slms_url), andenrolments(per-term, per-unit rows). Same bearer auth.dry_runwrites nothing at all here: the enrolment rows are validated and reported, and the terms and units sections are skipped and reported rather than applied.Push this at term boundaries or nightly. A term rollover then rotates every student's arc automatically off the calendar, with no manual step in the console.
- Point outbound webhooks at your systems
Settings → Integrations is also where outbound webhooks live. First Six POSTs help-request lifecycle events (
help_request.created,help_request.crisis,help_request.assigned,help_request.resolvedand the rest) to a URL you control, HMAC-signed so you can verify authenticity, with retry and backoff on failure.Use the Test button before you rely on it: it exercises the real delivery path against your endpoint. Verify the signature on your side from day one rather than trusting the source IP. Contract and signing details: webhooks.
- Wire the crisis and help-desk channels deliberately
These are separate from generic webhooks and they matter more. Crisis alerts fan out to an always-on staff email, and optionally to a Slack or Microsoft Teams incoming webhook and your help-desk queue. Configure them under Settings → Crisis (crisis alerting) and Settings → Integrations (help desk), and use the test action on each.
Test these with a real recipient watching. A crisis path that silently fails is worse than one you never configured, because everyone assumes it works.
- Add event feeds if you have them
If campus events already live in a calendar system, subscribe First Six to the iCal feed rather than re-authoring events by hand. The feed syncs on a schedule and staff can force a sync from the console. Purely additive, so it is safe to add after launch: the event feed.
- Decide on a vanity subdomain
Optional, and cosmetic rather than functional, but it changes the URL students see. It needs a DNS record from your team plus configuration on the First Six side, so raise it early if you want it live for launch: custom subdomains.
Quick checklist
Common questions
Is there an API to read student data out of First Six?
No, and that is deliberate rather than a gap. The integration surface is inbound (roster, calendar, enrolments) plus outbound events (webhooks). There is no bulk student-read API, because a general-purpose read API over student welfare data is exactly the thing our isolation model exists to prevent. For reporting, staff export from the console; for a full tenant export, that is a contractual path through First Six. See the public surface.
Where do I get an API key for the endpoints?
The SIS endpoints authenticate with a per-institution bearer secret you generate yourself in Settings → Integrations. There is no separate API key system and no OAuth client-credentials flow for tenant integrations. A secret issued to your institution can only ever write your institution's data: the endpoints are institution-scoped server-side, so a leaked secret cannot reach another university.
Can I push course content, announcements, or assessments?
No. The SIS endpoint accepts the term calendar, the unit catalogue, and
enrolments, never content payloads. First Six is the door to your LMS, not a
copy of it: each unit carries an lms_url and that is the door students walk
through. If an integration design asks to mirror LMS content here, push back
on it.
What happens if my SIS push contains a student who has left?
Send your current roster and treat the push as the source of truth for who is enrolled. Removing a student from the platform entirely is an institution decision actioned through First Six, not something a sync silently performs, because a disappearing student can also mean a broken feed.
How do I test all of this without touching real students?
Ask First Six for a non-production tenant, and use dry_run on both SIS
endpoints for anything roster-shaped. The webhook and channel test actions in
the console exercise the real delivery paths without needing a real help
request to exist.
Who do I contact when an endpoint returns 401?
Check the obvious three first: the Authorization: Bearer header is present
and correctly formed, the secret has not been rotated out from under your
job, and the institution slug in the body matches the secret you are using.
The response body names the reason. If all three are right, raise it with
First Six.
Related
The fastest answer is usually one question away.