People

Accounts, students, guardians, staff and the invitations that mint them.

47 endpoints

GET /v3/account #
bearer driver_app beneficiary_app pass_app pass_web device credential

Response

Returns { "data": [Account] } with meta.next_cursor for the next page.

FieldTypeConstraints
idstring (uuid)required
first_namestringoptional
middle_namestring | nulloptional
last_namestring | nulloptional
phonestring | nulloptional
emailstring | nulloptional
genderstring | nulloptional
kyc_statusstring | nulloptional
statusstringoptional
external_refstring | nulloptional
created_atstring (date-time)optional
walletsWalletSummary[]optional
updated_atstring (date-time)required
deletedbooleanrequired
GET /v3/account/{id} #
bearer driver_app beneficiary_app pass_app pass_web device credential

Path parameters

NameTypeNotes
idstring

Response

Returns { "data": AccountDetail }.

FieldTypeConstraints
idstring (uuid)required
first_namestringrequired
middle_namestring | nullrequired
last_namestring | nullrequired
phonestring | nullrequired
kyc_statusstring | nullrequired
statusstringrequired
external_refstring | nullrequired
studentsobject[]required
walletsobject[]required
POST /v3/app/account #
bearer driver_app beneficiary_app people.create device credential

Request body

FieldTypeConstraints
first_namestringrequiredmax length 100
middle_namestring | nulloptionalmax length 100
last_namestring | nulloptionalmax length 100
phonestring | nulloptionalmax length 20
emailstring | nulloptionalmax length 254
genderstring | nulloptionalmale female unspecified
national_idstring | nulloptionalmax length 32
external_refstring | nulloptionalmax length 64
wallet_type_idstring | nulloptional

Response

Returns { "data": AccountDetail }.

FieldTypeConstraints
idstring (uuid)required
first_namestringrequired
middle_namestring | nullrequired
last_namestring | nullrequired
phonestring | nullrequired
kyc_statusstring | nullrequired
statusstringrequired
external_refstring | nullrequired
studentsobject[]required
walletsobject[]required
POST /v3/app/account/{id}/student #
bearer driver_app beneficiary_app people.create device credential

Path parameters

NameTypeNotes
idstring

Request body

FieldTypeConstraints
first_namestringrequiredmax length 100
middle_namestring | nulloptionalmax length 100
last_namestring | nulloptionalmax length 100
genderstring | nulloptionalmale female unspecified
dobstring | nulloptional
gradestring | nulloptionalmax length 32
relationstring | nulloptionalmax length 32
external_refstring | nulloptionalmax length 64
wallet_type_idstring | nulloptional

Response

Returns { "data": StudentWrite }.

FieldTypeConstraints
idstring (uuid)required
first_namestringrequired
last_namestring | nullrequired
gradestring | nullrequired
statusstringrequired
GET /v3/app/student #
bearer driver_app beneficiary_app parent_app device credential

Response

Returns { "data": [Student] } with meta.next_cursor for the next page.

FieldTypeConstraints
idstring (uuid)required
first_namestringoptional
middle_namestring | nulloptional
last_namestring | nulloptional
genderstring | nulloptional
dobstring | nulloptional
gradestring | nulloptional
statusstringoptional
external_refstring | nulloptional
alert_notestring | nulloptional
account_idstring | nulloptional
photoanyoptional
created_atstring (date-time)optional
tagsobject[]optional
guardiansGuardian[]optional
dropoffanyoptional
updated_atstring (date-time)required
deletedbooleanrequired
GET /v3/app/tag #
bearer driver_app beneficiary_app device credential

Response

Returns { "data": [Tag] } with meta.next_cursor for the next page.

FieldTypeConstraints
idstring (uuid)required
namestringrequired
entitystring | nullrequired
color_hexstring | nullrequired
POST /v3/auth/invite/accept #
public 10,1

token + a password → an account.

Answers ONE way for a wrong token, a used one and an expired one. Telling them apart would confirm which tokens ever existed, and this endpoint is unauthenticated by necessity.

Hands back NO session, exactly like the password reset: holding an invite link proves somebody forwarded you a message, not who you are. They sign in with the password they just chose, which proves both.

Request body

FieldTypeConstraints
tokenstringrequiredmin length 48 · max length 48
passwordstringrequiredmin length 10 · max length 255

Response

Returns { "data": StaffInviteAccepted }.

FieldTypeConstraints
acceptedbooleanrequired
emailstring | nullrequired
phonestring | nullrequired
GET /v3/group #
bearer driver_app beneficiary_app admin_web device credential

Query parameters

NameTypeConstraints
statusstring | nulloptionalactive suspended archived

Response

Returns { "data": [Group] } with meta.next_cursor for the next page.

FieldTypeConstraints
idstring (uuid)required
namestringrequired
is_defaultbooleanrequired
statusstringrequired
member_countintegerrequired
GET /v3/pass/invite #
bearer pass_web device credential

GET invite — who has been asked and not yet arrived.

Response

Returns { "data": [StaffInvite] } with meta.next_cursor for the next page.

FieldTypeConstraints
idstring (uuid)required
namestringrequired
emailstring | nullrequired
phonestring | nullrequired
role_namestring | nullrequired
staff_kindstring | nullrequired
invited_by_namestring | nullrequired
expires_atstringrequired
created_atstringrequired
POST /v3/pass/invite #
bearer pass_web staff.manage device credential

POST invite — ask somebody to join.

The response carries the token ONCE. It is stored hashed and can never be read again, so a console that loses it re-invites rather than recovering it — the same bargain a password makes, for the same reason: this string is a way into the tenant.

Request body

FieldTypeConstraints
first_namestringrequiredmax length 80
last_namestring | nulloptionalmax length 80
emailstring | nulloptionalmax length 160
phonestring | nulloptional
tenant_role_idstring | nulloptional
staff_kindstring | nulloptionalmax length 40

Response

Returns { "data": StaffInviteMinted }.

FieldTypeConstraints
idstring (uuid)required
tokenstringrequired
expires_atstringrequired
DELETE /v3/pass/invite/{id} #
bearer pass_web staff.manage device credential

withdraw one that has not been accepted.

Path parameters

NameTypeNotes
idstring

Response

Returns { "data": Deleted }.

FieldTypeConstraints
deletedbooleanrequired
POST /v3/portal/guardian #
bearer admin_web people.create device credential

POST guardian — create a guardian with no student attached yet.

The console's admin directory adds a parent BEFORE any learner is linked to them (learners are attached afterwards from the child's profile). Until now the only way a guardian account came into being was [link] — via a student — so the directory's "Add parent" had nowhere to post and was aimed at the STAFF endpoint with staff_kind: "guardian", which the StaffKind enum rightly refused.

Identity is the phone, exactly as in [link]: adding a parent who is already on this tenant returns the existing account rather than minting a second one, so a retry or a double-submit cannot split one family across two records.

Request body

FieldTypeConstraints
first_namestringrequiredmax length 100
middle_namestring | nulloptionalmax length 100
last_namestring | nulloptionalmax length 100
emailstring | nulloptionalmax length 254
phonestringrequiredmax length 20
school_idstring | nulloptional

Response

Returns { "data": GuardianCreated }.

FieldTypeConstraints
account_idstring (uuid)required
already_existedbooleanrequired
PATCH /v3/portal/guardian/{id} #
bearer admin_web people.update device credential

contact AND notification edits on a guardian (§1 mask).

The mask spans TWO tables, which is the whole difficulty. Contact fields are the account's own columns; the notification switches are users columns (0062) and accounts has none of them, so they are written one hop away through accounts.user_id. The console holds an account id for a parent — it sent that id to the staff endpoint before, which resolves a users row and rightly answered "User not found".

Path parameters

NameTypeNotes
idstring

Request body

FieldTypeConstraints
update_maskstring[]requiredmin items 1 · max items 9
expected_row_versionintegerrequiredmin 1
first_namestring | nulloptionalmax length 100
middle_namestring | nulloptionalmax length 100
last_namestring | nulloptionalmax length 100
phonestring | nulloptionalmax length 20
emailstring | nulloptionalmax length 254
receive_notificationsbooleanoptional
receive_email_notificationsbooleanoptional
receive_sms_notificationsbooleanoptional
receive_whatsapp_notificationsbooleanoptional

Response

Returns { "data": WebUserDetail }.

FieldTypeConstraints
idstring (uuid)required
kindstringoptional
first_namestringrequired
middle_namestring | nulloptional
last_namestring | nulloptional
emailstring | nulloptional
phonestring | nulloptional
staff_kindstring | nulloptional
tenant_role_idstring | nulloptional
statusstringrequired
school_idstring | nulloptional
school_namestring | nulloptional
report_subscriptionsstring[]optional
receive_notificationsbooleanoptional
receive_email_notificationsbooleanoptional
receive_sms_notificationsbooleanoptional
receive_whatsapp_notificationsbooleanoptional
zonesobject[]optional
has_loginbooleanoptional
students_countintegeroptional
subscriptionanyoptional
last_login_atstring | nulloptional
created_atstring (date-time)optional
row_versionintegerrequired
studentsobject[]optional
POST /v3/portal/import #
bearer admin_web people.import device credential

Request body

FieldTypeConstraints
kindstringrequiredstudents staff
rowsobject[]requiredmin items 1 · max items 500

Response

Returns { "data": [ImportOutcome] } with meta.next_cursor for the next page.

FieldTypeConstraints
rowintegerrequired
okbooleanrequired
idstring (uuid)optional
codestringoptional
GET /v3/portal/metadata-field #
bearer admin_web device credential

Query parameters

NameTypeConstraints
entitystring | nulloptionalstudent account

Response

Returns { "data": [MetadataField] } with meta.next_cursor for the next page.

FieldTypeConstraints
idstring (uuid)required
entitystringrequired
namestringrequired
descriptionstring | nullrequired
created_atstringoptional
POST /v3/portal/metadata-field #
bearer admin_web settings.manage device credential

Request body

FieldTypeConstraints
entitystringrequiredstudent account
namestringrequiredmax length 120
descriptionstring | nulloptionalmax length 255

Response

Returns { "data": Written }.

FieldTypeConstraints
idstring (uuid)required
DELETE /v3/portal/metadata-field/{id} #
bearer admin_web settings.manage device credential

Path parameters

NameTypeNotes
idstring

Response

Returns { "data": Written }.

FieldTypeConstraints
idstring (uuid)required
PATCH /v3/portal/metadata-field/{id} #
bearer admin_web settings.manage device credential

Path parameters

NameTypeNotes
idstring

Request body

FieldTypeConstraints
namestringoptionalmax length 120
descriptionstring | nulloptionalmax length 255

Response

Returns { "data": Written }.

FieldTypeConstraints
idstring (uuid)required
POST /v3/portal/role #
bearer admin_web roles.manage device credential

Request body

FieldTypeConstraints
namestringrequiredmax length 80
capabilitiesstring[]requiredmin items 1

Response

Returns { "data": WebRole }.

FieldTypeConstraints
idstring (uuid)required
namestringrequired
capabilitiesCapability[]required
created_atstring | nullrequired
DELETE /v3/portal/role/{id} #
bearer admin_web roles.manage device credential

Path parameters

NameTypeNotes
idstring

Response

Returns { "data": Ack }.

FieldTypeConstraints
okbooleanrequired
PATCH /v3/portal/role/{id} #
bearer admin_web roles.manage device credential

Path parameters

NameTypeNotes
idstring

Request body

FieldTypeConstraints
namestringrequiredmax length 80
capabilitiesstring[]requiredmin items 1

Response

Returns { "data": WebRole }.

FieldTypeConstraints
idstring (uuid)required
namestringrequired
capabilitiesCapability[]required
created_atstring | nullrequired
GET /v3/portal/student #
bearer admin_web device credential

Query parameters

NameTypeConstraints
qstring | nulloptionalmax length 100
gradestring | nulloptionalmax length 20
route_idstring | nulloptional
schoolstring | nulloptional
tag_idstring | nulloptional
cursorstring | nulloptionalmax length 200
per_pageinteger | nulloptionalmin 1 · max 500

Response

Returns { "data": [WebStudent] } with meta.next_cursor for the next page.

FieldTypeConstraints
idstring (uuid)required
first_namestringrequired
middle_namestring | nullrequired
last_namestring | nullrequired
genderstring | nullrequired
dobstring | nullrequired
gradestring | nullrequired
statusstringrequired
external_refstring | nullrequired
photoanyrequired
row_versionintegerrequired
school_idstring | nullrequired
school_namestring | nullrequired
guardiansGuardian[]required
bandanyrequired
routeanyrequired
todayobjectrequired
today.checked_inbooleanrequired
today.checked_in_atstring | nullrequired
POST /v3/portal/student #
bearer admin_web people.create device credential

Request body

FieldTypeConstraints
first_namestringrequiredmax length 100
middle_namestring | nulloptionalmax length 100
last_namestring | nulloptionalmax length 100
genderstring | nulloptionalmale female unspecified
dobstring | nulloptional
gradestring | nulloptionalmax length 32
external_refstring | nulloptionalmax length 64
metadataarray | nulloptionalmax items 20
parent_idstring | nulloptional
schoolstring | nulloptional

Response

Returns { "data": WebStudentDetail }.

FieldTypeConstraints
idstring (uuid)required
first_namestringrequired
middle_namestring | nullrequired
last_namestring | nullrequired
genderstring | nullrequired
dobstring | nullrequired
gradestring | nullrequired
statusstringrequired
external_refstring | nullrequired
photoanyrequired
row_versionintegerrequired
school_idstring | nullrequired
school_namestring | nullrequired
guardiansGuardian[]required
bandanyrequired
routeanyrequired
todayobjectrequired
today.checked_inbooleanrequired
today.checked_in_atstring | nullrequired
metadataobjectrequired
tagsobject[]required
walletanyrequired
band_historyobject[]required
trip_plansobject[]required
home_locationanyrequired
recent_timelineTimelineEntry[]required
DELETE /v3/portal/student/{id} #
bearer admin_web people.delete device credential

Path parameters

NameTypeNotes
idstring

Response

Returns { "data": Ack }.

FieldTypeConstraints
okbooleanrequired
GET /v3/portal/student/{id} #
bearer admin_web device credential

Path parameters

NameTypeNotes
idstring

Response

Returns { "data": WebStudentDetail }.

FieldTypeConstraints
idstring (uuid)required
first_namestringrequired
middle_namestring | nullrequired
last_namestring | nullrequired
genderstring | nullrequired
dobstring | nullrequired
gradestring | nullrequired
statusstringrequired
external_refstring | nullrequired
photoanyrequired
row_versionintegerrequired
school_idstring | nullrequired
school_namestring | nullrequired
guardiansGuardian[]required
bandanyrequired
routeanyrequired
todayobjectrequired
today.checked_inbooleanrequired
today.checked_in_atstring | nullrequired
metadataobjectrequired
tagsobject[]required
walletanyrequired
band_historyobject[]required
trip_plansobject[]required
home_locationanyrequired
recent_timelineTimelineEntry[]required
PATCH /v3/portal/student/{id} #
bearer admin_web people.update device credential

Path parameters

NameTypeNotes
idstring

Request body

FieldTypeConstraints
update_maskstring[]requiredmin items 1 · max items 9
expected_row_versionintegerrequiredmin 1
first_namestring | nulloptionalmax length 100
middle_namestring | nulloptionalmax length 100
last_namestring | nulloptionalmax length 100
genderstring | nulloptionalmale female unspecified
dobstring | nulloptional
gradestring | nulloptionalmax length 32
statusstring | nulloptionalactive suspended archived
external_refstring | nulloptionalmax length 64
metadataarray | nulloptionalmax items 20

Response

Returns { "data": WebStudentDetail }.

FieldTypeConstraints
idstring (uuid)required
first_namestringrequired
middle_namestring | nullrequired
last_namestring | nullrequired
genderstring | nullrequired
dobstring | nullrequired
gradestring | nullrequired
statusstringrequired
external_refstring | nullrequired
photoanyrequired
row_versionintegerrequired
school_idstring | nullrequired
school_namestring | nullrequired
guardiansGuardian[]required
bandanyrequired
routeanyrequired
todayobjectrequired
today.checked_inbooleanrequired
today.checked_in_atstring | nullrequired
metadataobjectrequired
tagsobject[]required
walletanyrequired
band_historyobject[]required
trip_plansobject[]required
home_locationanyrequired
recent_timelineTimelineEntry[]required
POST /v3/portal/student/{id}/guardian #
bearer admin_web people.update device credential

link (creating the account if the phone is new).

Path parameters

NameTypeNotes
idstring

Request body

FieldTypeConstraints
phonestringrequiredmax length 20
namestring | nulloptionalmax length 200
relationstring | nulloptionalmax length 40
is_primaryboolean | nulloptional

Response

Returns { "data": GuardianLinked }.

FieldTypeConstraints
account_idstring (uuid)required
namestringrequired
already_linkedbooleanrequired
DELETE /v3/portal/student/{id}/guardian/{accountId} #
bearer admin_web people.update device credential

tombstone the edge, keep the person.

Path parameters

NameTypeNotes
idstring
accountIdstring

Response

Returns { "data": Deleted }.

FieldTypeConstraints
deletedbooleanrequired
GET /v3/portal/student/{id}/home-location #
bearer admin_web device credential

the pins, default first.

Path parameters

NameTypeNotes
idstring

Response

Returns { "data": [HomeLocation] } with meta.next_cursor for the next page.

FieldTypeConstraints
idstring (uuid)required
labelstring | nulloptional
latnumber | nulloptional
lngnumber | nulloptional
is_defaultbooleanrequired
POST /v3/portal/student/{id}/home-location #
bearer admin_web people.update device credential

add a pin.

Path parameters

NameTypeNotes
idstring

Request body

FieldTypeConstraints
labelstring | nulloptionalmax length 120
latnumberrequiredmin -90 · max 90
lngnumberrequiredmin -180 · max 180
is_defaultboolean | nulloptional

Response

Returns { "data": HomeLocation }.

FieldTypeConstraints
idstring (uuid)required
labelstring | nulloptional
latnumber | nulloptional
lngnumber | nulloptional
is_defaultbooleanrequired
DELETE /v3/portal/student/{id}/home-location/{hid} #
bearer admin_web people.update device credential

remove a pin.

Path parameters

NameTypeNotes
idstring
hidstring

Response

Returns { "data": Deleted }.

FieldTypeConstraints
deletedbooleanrequired
PATCH /v3/portal/student/{id}/home-location/{hid} #
bearer admin_web people.update device credential

edit label/coords.

Path parameters

NameTypeNotes
idstring
hidstring

Request body

FieldTypeConstraints
labelstring | nulloptionalmax length 120
latnumberoptionalmin -90 · max 90
lngnumberoptionalmin -180 · max 180

Response

Returns { "data": HomeLocation }.

FieldTypeConstraints
idstring (uuid)required
labelstring | nulloptional
latnumber | nulloptional
lngnumber | nulloptional
is_defaultbooleanrequired
PUT /v3/portal/student/{id}/home-location/{hid}/default #
bearer admin_web people.update device credential

make this the default pin.

Path parameters

NameTypeNotes
idstring
hidstring

Response

Returns { "data": HomeLocation }.

FieldTypeConstraints
idstring (uuid)required
labelstring | nulloptional
latnumber | nulloptional
lngnumber | nulloptional
is_defaultbooleanrequired
POST /v3/portal/user #
bearer admin_web staff.manage device credential

Request body

FieldTypeConstraints
first_namestringrequiredmax length 100
middle_namestring | nulloptionalmax length 100
last_namestring | nulloptionalmax length 100
emailstring | nulloptionalmax length 254
phonestringrequiredmax length 20
staff_kindstringrequiredadmin zone_manager teacher driver assistant gate_agent support operator +2 more

Response

Returns { "data": WebUserDetail }.

FieldTypeConstraints
idstring (uuid)required
kindstringoptional
first_namestringrequired
middle_namestring | nulloptional
last_namestring | nulloptional
emailstring | nulloptional
phonestring | nulloptional
staff_kindstring | nulloptional
tenant_role_idstring | nulloptional
statusstringrequired
school_idstring | nulloptional
school_namestring | nulloptional
report_subscriptionsstring[]optional
receive_notificationsbooleanoptional
receive_email_notificationsbooleanoptional
receive_sms_notificationsbooleanoptional
receive_whatsapp_notificationsbooleanoptional
zonesobject[]optional
has_loginbooleanoptional
students_countintegeroptional
subscriptionanyoptional
last_login_atstring | nulloptional
created_atstring (date-time)optional
row_versionintegerrequired
studentsobject[]optional
DELETE /v3/portal/user/{id} #
bearer admin_web staff.manage device credential

Path parameters

NameTypeNotes
idstring

Response

Returns { "data": Ack }.

FieldTypeConstraints
okbooleanrequired
PATCH /v3/portal/user/{id} #
bearer admin_web staff.manage device credential

Path parameters

NameTypeNotes
idstring

Request body

FieldTypeConstraints
update_maskstring[]requiredmin items 1 · max items 13
expected_row_versionintegerrequiredmin 1
first_namestring | nulloptionalmax length 100
middle_namestring | nulloptionalmax length 100
last_namestring | nulloptionalmax length 100
emailstring | nulloptionalmax length 254
phonestring | nulloptionalmax length 20
staff_kindstring | nulloptionaladmin zone_manager teacher driver assistant gate_agent support operator +2 more
statusstring | nulloptionalactive suspended archived
tenant_role_idstring | nulloptional
report_subscriptionsstring[]optionalmax items 20
receive_notificationsboolean | nulloptional
receive_email_notificationsboolean | nulloptional
receive_sms_notificationsboolean | nulloptional
receive_whatsapp_notificationsboolean | nulloptional

Response

Returns { "data": WebUserDetail }.

FieldTypeConstraints
idstring (uuid)required
kindstringoptional
first_namestringrequired
middle_namestring | nulloptional
last_namestring | nulloptional
emailstring | nulloptional
phonestring | nulloptional
staff_kindstring | nulloptional
tenant_role_idstring | nulloptional
statusstringrequired
school_idstring | nulloptional
school_namestring | nulloptional
report_subscriptionsstring[]optional
receive_notificationsbooleanoptional
receive_email_notificationsbooleanoptional
receive_sms_notificationsbooleanoptional
receive_whatsapp_notificationsbooleanoptional
zonesobject[]optional
has_loginbooleanoptional
students_countintegeroptional
subscriptionanyoptional
last_login_atstring | nulloptional
created_atstring (date-time)optional
row_versionintegerrequired
studentsobject[]optional
POST /v3/portal/user/{id}/resend-welcome-email #
bearer admin_web staff.manage device credential

the invitation again, for the colleague whose first copy never landed. Nothing about the account changes; somebody who already has a password wants reset-password, and is told so rather than sent an email describing an account they no longer have.

Path parameters

NameTypeNotes
idstring

Response

Returns { "data": Ack }.

FieldTypeConstraints
okbooleanrequired
POST /v3/portal/user/{id}/reset-password #
bearer admin_web staff.manage device credential

the §12.5 posture: the hash NULLs and the next login forces a set (credentials are never emailed around); every session the user held is revoked in the same call.

Path parameters

NameTypeNotes
idstring

Response

Returns { "data": PasswordReset }.

FieldTypeConstraints
must_set_passwordbooleanrequired
PUT /v3/portal/user/{id}/zones #
bearer admin_web staff.manage device credential

Path parameters

NameTypeNotes
idstring

Request body

FieldTypeConstraints
zone_idsstring (uuid)[]requiredmax items 50

Response

Returns { "data": ZoneAssignment }.

FieldTypeConstraints
zone_idsstring (uuid)[]required
GET /v3/role #
bearer pass_web admin_web device credential

Response

Returns { "data": [WebRole] } with meta.next_cursor for the next page.

FieldTypeConstraints
idstring (uuid)required
namestringrequired
capabilitiesCapability[]required
created_atstring | nullrequired
POST /v3/role #
bearer pass_web admin_web roles.manage device credential

Request body

FieldTypeConstraints
namestringrequiredmax length 80
capabilitiesstring[]requiredmin items 1

Response

Returns { "data": WebRole }.

FieldTypeConstraints
idstring (uuid)required
namestringrequired
capabilitiesCapability[]required
created_atstring | nullrequired
DELETE /v3/role/{id} #
bearer pass_web admin_web roles.manage device credential

Path parameters

NameTypeNotes
idstring

Response

Returns { "data": Ack }.

FieldTypeConstraints
okbooleanrequired
PATCH /v3/role/{id} #
bearer pass_web admin_web roles.manage device credential

Path parameters

NameTypeNotes
idstring

Request body

FieldTypeConstraints
namestringrequiredmax length 80
capabilitiesstring[]requiredmin items 1

Response

Returns { "data": WebRole }.

FieldTypeConstraints
idstring (uuid)required
namestringrequired
capabilitiesCapability[]required
created_atstring | nullrequired
GET /v3/student/{id}/timeline #
bearer parent_app admin_web device credential

Path parameters

NameTypeNotes
idstring

Query parameters

NameTypeConstraints
kindstring | nulloptionaltap trip transaction
cursorstring | nulloptionalmax length 200
per_pageinteger | nulloptionalmin 1 · max 500

Response

Returns { "data": [TimelineEntry] } with meta.next_cursor for the next page.

FieldTypeConstraints
kindstringrequiredtap trip_boarded trip_dropped transaction
atstringrequired
detailTimelineDetailrequired
GET /v3/user #
bearer pass_web admin_web device credential

Query parameters

NameTypeConstraints
kindstring | nulloptionalstaff guardian
qstring | nulloptionalmax length 100
cursorstring | nulloptionalmax length 200
per_pageinteger | nulloptionalmin 1 · max 500

Response

Returns { "data": [WebUser] } with meta.next_cursor for the next page.

FieldTypeConstraints
idstring (uuid)required
kindstringoptional
first_namestringrequired
middle_namestring | nulloptional
last_namestring | nulloptional
emailstring | nulloptional
phonestring | nulloptional
staff_kindstring | nulloptional
tenant_role_idstring | nulloptional
statusstringrequired
school_idstring | nulloptional
school_namestring | nulloptional
report_subscriptionsstring[]optional
receive_notificationsbooleanoptional
receive_email_notificationsbooleanoptional
receive_sms_notificationsbooleanoptional
receive_whatsapp_notificationsbooleanoptional
zonesobject[]optional
has_loginbooleanoptional
students_countintegeroptional
subscriptionanyoptional
last_login_atstring | nulloptional
created_atstring (date-time)optional
row_versionintegerrequired
GET /v3/user/{id} #
bearer pass_web admin_web device credential

Path parameters

NameTypeNotes
idstring

Response

Returns { "data": WebUserDetail }.

FieldTypeConstraints
idstring (uuid)required
kindstringoptional
first_namestringrequired
middle_namestring | nulloptional
last_namestring | nulloptional
emailstring | nulloptional
phonestring | nulloptional
staff_kindstring | nulloptional
tenant_role_idstring | nulloptional
statusstringrequired
school_idstring | nulloptional
school_namestring | nulloptional
report_subscriptionsstring[]optional
receive_notificationsbooleanoptional
receive_email_notificationsbooleanoptional
receive_sms_notificationsbooleanoptional
receive_whatsapp_notificationsbooleanoptional
zonesobject[]optional
has_loginbooleanoptional
students_countintegeroptional
subscriptionanyoptional
last_login_atstring | nulloptional
created_atstring (date-time)optional
row_versionintegerrequired
studentsobject[]optional
POST /v3/user/{id}/reset-password #
bearer pass_web admin_web staff.manage device credential

the §12.5 posture: the hash NULLs and the next login forces a set (credentials are never emailed around); every session the user held is revoked in the same call.

Path parameters

NameTypeNotes
idstring

Response

Returns { "data": PasswordReset }.

FieldTypeConstraints
must_set_passwordbooleanrequired