Skip to main content
You are viewing early implementations that may change before release. Use them to prepare and provide feedback to our team. Check out Swan's public roadmap to see what else is in the works.

Account onboarding enhancements

Redesigned onboarding mutations and queries with cleaner naming, typed responses, and improved data collection for enhanced risk assessment and regulatory compliance.

Target availability

This API is now in beta and available for testing.

Overview

We are introducing a redesigned onboarding API that replaces the existing mutations and queries. The new API provides improved developer experience through consistent naming conventions, structured input types, and typed responses.

What's changing

AspectCurrent APINew API
NamingMixed patterns (onboardIndividualAccountHolder, unauthenticatedOnboardPublic...).Consistent pattern (createIndividualAccountHolderOnboarding, createPublicIndividualAccountHolderOnboarding).
Input structureFlat input with all fields at root level.Nested structure with accountInfo, accountAdmin, and company objects.
Data requirementsLimited data collection.New fields to strengthen risk assessment and compliance.
Response typesGeneric Onboarding type for all responses.Typed IndividualAccountHolderOnboarding and CompanyAccountHolderOnboarding.
Registry dataAutomatically populates empty onboarding fields.Dedicated query; no auto-population.

Authentication patterns

The new API uses a consistent pattern across all endpoints.

Endpoint typeToken requiredUse case
Public mutations and queriesNonePublic onboarding links. Only available if public URLs are enabled in the Dashboard.
Standard mutations and queriesProject access tokenBackend integrations, partner-initiated onboarding.
finalize mutationUser access tokenCompleting onboarding after user identification.

Individual onboarding

Create an individual onboarding

Call the createIndividualAccountHolderOnboarding mutation with a project access token.

New mutationReplaces
createIndividualAccountHolderOnboardingonboardIndividualAccountHolder
createPublicIndividualAccountHolderOnboardingunauthenticatedOnboardPublicIndividualAccountHolder

The input uses a nested structure with two required objects:

  • accountInfo: Account-level details (country, name).
  • accountAdmin: Individual's personal information (email, employmentStatus, monthlyIncome, address, sourcesOfFunds (new), etc.).
input CreateIndividualAccountHolderOnboardingInput {
accountInfo: IndividualAccountHolderOnboardingAccountInput!
accountAdmin: IndividualAccountHolderOnboardingAccountAdminInput!
oAuthRedirectParameters: OAuthRedirectParametersInput
}

Update an individual onboarding

Call the updateIndividualAccountHolderOnboarding mutation with a project access token.

New mutationReplaces
updateIndividualAccountHolderOnboardingupdateIndividualOnboarding
updatePublicIndividualAccountHolderOnboardingunauthenticatedUpdateIndividualOnboarding

Company onboarding

Create a company onboarding

Call the createCompanyAccountHolderOnboarding mutation with a project access token.

New mutationReplaces
createCompanyAccountHolderOnboardingonboardCompanyAccountHolder
createPublicCompanyAccountHolderOnboardingunauthenticatedOnboardPublicCompanyAccountHolder

The input uses a nested structure with three required objects:

  • accountInfo: Account-level details (country, name).
  • accountAdmin: Personal information of the person opening the account (email, firstName, lastName, typeOfRepresentation, etc.). This may or may not be the company's Legal Representative.
  • company: Company details (registrationNumber, name, legalForm, ultimateBeneficialOwners, representatives, etc.).
input CreateCompanyAccountHolderOnboardingInput {
accountInfo: CompanyAccountHolderOnboardingAccountInput!
accountAdmin: CompanyAccountHolderOnboardingAccountAdminInput!
oAuthRedirectParameters: OAuthRedirectParametersInput
company: CompanyInfoInput!
}

Update a company onboarding

Call the updateCompanyAccountHolderOnboarding mutation with a project access token.

New mutationReplaces
updateCompanyAccountHolderOnboardingupdateCompanyOnboarding
updatePublicCompanyAccountHolderOnboardingunauthenticatedUpdateCompanyOnboarding

Finalize onboarding

The finalizeAccountHolderOnboarding mutation replaces finalizeOnboarding. It requires a user access token and returns an AccountHolderOnboarding union type.

New mutationReplaces
finalizeAccountHolderOnboardingfinalizeOnboarding

Queries

Retrieve onboarding information

New queryAuthenticationReplaces
publicAccountHolderOnboardingNoneonboardingInfo
accountHolderOnboardingProject access tokenonboarding
accountHolderOnboardingsProject access tokenonboardings

Single-onboarding queries return a payload union that includes the AccountHolderOnboarding on success. The accountHolderOnboardings query returns an AccountHolderOnboardingConnection for paginated results.

Company registry data

A new dedicated query retrieves company information from official registries, enabling pre-fill capabilities for smoother onboarding. Currently available for companies registered in France (FRA) only. This replaces the previous behavior where empty onboarding fields were automatically populated with registry data.

New queryAuthentication
companyInfoRegistryDataProject access token

The query requires a registrationNumber and residencyAddressCountry.

Behavior change

The new API does not automatically populate onboarding fields with registry data. You must explicitly query the registry, then use that data when creating or updating the onboarding.

Query

query GetCompanyRegistryData {
companyInfoRegistryData(
input: {
registrationNumber: "123456789"
residencyAddressCountry: FRA
}
) {
... on CompanyInfoRegistryDataSuccessPayload {
companyInfo {
name
legalForm
registrationDate
address {
addressLine1
city
postalCode
country
}
ultimateBeneficialOwners {
firstName
lastName
}
representatives {
... on OnboardingIndividualRepresentative {
firstName
lastName
roles
}
}
}
}
... on CompanyRegistryNotFoundRejection {
message
registrationNumber
country
}
}
}

Field reference

The following pages provide complete field mappings, requirements, and validations from the deprecated API to the new API:

Field requirements vary by country. French company onboardings support pre-fill via the companyInfoRegistryData query for company, representative, and UBO fields.

Response types

IndividualAccountHolderOnboarding

type IndividualAccountHolderOnboarding {
id: ID!
statusInfo: OnboardingStatusInfo!
supportingDocumentCollection: SupportingDocumentCollection
createdAt: DateTime!
updatedAt: DateTime!
accountInfo: IndividualAccountHolderOnboardingAccount
accountAdmin: IndividualAccountHolderOnboardingAccountAdmin
}

CompanyAccountHolderOnboarding

type CompanyAccountHolderOnboarding {
id: ID!
statusInfo: OnboardingStatusInfo!
supportingDocumentCollection: SupportingDocumentCollection
createdAt: DateTime!
updatedAt: DateTime!
accountInfo: CompanyAccountHolderOnboardingAccount
accountAdmin: CompanyAccountHolderOnboardingAccountAdmin
company: CompanyInfo
}

AccountHolderOnboarding union

union AccountHolderOnboarding = IndividualAccountHolderOnboarding | CompanyAccountHolderOnboarding