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

The redesigned onboarding API is live. All guides under Topics > Onboarding use the new mutations, and the field reference pages are the canonical source for country-specific requirements and available options.

Deprecation timeline

The previous onboarding mutations and queries are removed at the end of September 2026. Migrate before then to avoid disruption.

Overview​

The redesigned onboarding API replaces the previous mutations and queries. It uses consistent naming conventions, structured input types, and typed responses.

What's changing​

AspectDeprecated 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​

For country-specific requirements and available options, see:

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