Skip to main content

Onboard a new customer

End-to-end: from looking up the IDs you need, through creating an invitation, sending it to the customer, and verifying the invitation is in flight.

All steps require a JWT — get one from the homepage first.

1. Find a risk group ID​

Creating an invitation requires a riskGroupId — pick one your bank already has configured.

query findRiskGroups {
riskGroups(first: 50) {
nodes {
id
name
}
}
}

Copy the id of the risk classification that fits the prospective customer.

2. (Optional) Find a branch office ID​

If your bank scopes customers to branch offices, look one up. Skip this if you onboard centrally.

query findBranchOffices {
branchOffices(first: 50) {
nodes {
id
name
}
}
}

3. Create the invitation​

Now create the invitation in a draft state. The customer is not notified yet — that happens in step 5.

mutation createOrganizationInvitation($input: CreateOrganizationInvitationInput!) {
createOrganizationInvitation(input: $input) {
organizationInvitation {
id
organizationName
externalId
}
}
}

Save the returned organizationInvitation.id — you'll need it for the next steps.

4. (Optional) Adjust the invitation before sending​

Mistake in the contact email? Wrong VAT number? Update the draft before sending.

mutation updateInvitationInformation($input: UpdateOrganizationInvitationInformationInput!) {
updateOrganizationInvitationInformation(input: $input) {
organizationInvitation {
id
organizationName
vatNumber
chairmanFirstName
chairmanLastName
chairmanEmail
chairmanCallingCode
chairmanPhoneNumber
}
}
}

Only the fields you provide are changed — leave the rest as null. The same applies inside contactPerson: any of firstName, lastName, email, callingCode, phoneNumber can be set individually. Pass contactPerson: null to leave the contact untouched entirely.

5. Send it​

startInvitationFlow sends the invitation email and starts onboarding. The response includes your remaining invitation quota for the month and week.

mutation sendInvitation($input: StartInvitationFlowInput!) {
startInvitationFlow(input: $input) {
organizationInvitation {
id
}
invitationsLeft {
invitationsLeftThisMonth
invitationsLeftThisWeek
}
}
}

If you hit No more invitations left this month/week, you've exceeded your bank's configured cap — wait or contact Unioo to raise the limit. The mutation may also return GraphQL errors describing missing required information on the invitation itself, without throwing — always check the errors field.

Once the customer accepts the invitation, the resulting record moves from organizationInvitations to organizations — see Querying organizations.