Links

Create a Capital Deposit

Allow company creation, including the initial deposit of funds, directly from your product and 100% online.
Capital Deposit enables the registration of new companies, by providing an account and proof that the share capital has been wired by shareholders. Each shareholder opens a temporary account whose sole purpose is for depositing their share of capital.
Before reading this guide, it's important for you to understand the following concepts:
This feature is currently exclusive to France. Please contact [email protected] if you're interested in providing Capital Deposit in another European country.

Summary

In this guide, you will learn how to use the Capital Deposit feature. Here is a summary of the process:
  1. 1.
    Create the Capital Deposit case with all the necessary information
  2. 2.
    Upload the mandatory documents
  3. 3.
    The company legal representative creates a company account
  4. 4.
    All shareholders create an account
  5. 5.
    All shareholders deposit their share of capital on their account
  6. 6.
    The documents and capital are sent to a notary
  7. 7.
    Receive the capital deposit certificate via API
  8. 8.
    Upload the KBIS of the newly created company
  9. 9.
    Receive the full capital on the company account
Feel free to contact integ[email protected] if you have any questions about this new feature.

Create a capital deposit case

To create a Capital Deposit Case you must use the createCapitalDepositCase mutation with a project access token. This case will be updated when the process moves on to the next step. This mutation requires a lot of data grouped around multiple notions:
  • General information for Capital Deposit: this includes the basic information of a capital deposit case, including companyName and totalCapitalDepositAmount
  • Individual shareholders’ information:
    • Capital Deposit information: we will ask for individual shareholder information like birthDate, firstName, lastName, capitalDepositAmount and nationality
    • Onboarding information: if you want, you can prefill the shareholder's onboarding to save them time. Learn more about onboarding
  • Company shareholders’ information:
    • Capital Deposit information: we will ask for company shareholder information like name and capitalDepositAmount
    • Onboarding information: if you want, you can prefill shareholder's onboarding. Learn more about onboarding
  • Onboarding information of the company being created:
Request
Request variables
Response
mutation MyMutation($input: CreateCapitalDepositCaseInput!) {
createCapitalDepositCase(input: $input) {
... on CreateCapitalDepositCaseSuccessPayload {
capitalDepositCase {
companyName
id
companyOnboarding {
id
}
documents {
type
status
downloadUrl
id
uploadedAt
}
shareholders {
info {
... on IndividualShareholder {
__typename
firstName
lastName
}
... on CompanyShareholder {
__typename
name
}
}
status
id
onboarding {
id
}
documents {
type
status
downloadUrl
id
uploadedAt
}
}
}
}
}
}
{
"input": {
"companyName": "New company",
"companyShareholders": {
"capitalDepositAmount": { "value": "500", "currency": "EUR" },
"name": "Shareholder - company",
"onboardingInfo": {
"individualUltimateBeneficialOwners": [
{
"type": "LegalRepresentative",
"birthCity": "Paris",
"birthCityPostalCode": "75000",
"birthCountryCode": "FRA",
"birthDate": "1980/10/10",
"direct": false,
"firstName": "John",
"lastName": "Doe",
"totalCapitalPercentage": 51
},{
"type": "HasCapital",
"birthCity": "Paris",
"birthCityPostalCode": "75000",
"birthCountryCode": "FRA",
"birthDate": "1970/10/10",
"indirect": true,
"firstName": "Jeanne",
"lastName": "Doe",
"totalCapitalPercentage": 26
}
],
"accountName": "Shareholder - company / capital deposit",
"businessActivity": "AdministrativeServices",
"businessActivityDescription": "Business description for compliance purposes",
"companyType": "Company",
"email": "[email protected]",
"isRegistered": false,
"language": "fr",
"monthlyPaymentVolume": "Between10000And50000",
"name": "Shareholder - company",
"residencyAddress": {
"addressLine1": "test",
"city": "Paris",
"country": "FRA",
"postalCode": "75000"
}
}
},
"individualShareholders": {
"firstName": "Jean",
"lastName": "Dupond",
"birthDate": "1980/10/10",
"nationality": "FRA",
"capitalDepositAmount": { "value": "1000", "currency": "EUR" },
"onboardingInfo": {
"email": "[email protected]",
"language":"fr",
"employmentStatus": "Employee",
"monthlyIncome": "LessThan500",
"residencyAddress": {
"addressLine1": "1 Rue de la Paix",
"city": "Paris",
"country": "FRA",
"postalCode": "75002"
}
}
},
"totalCapitalDepositAmount": { "value": "1500", "currency": "EUR" },
"onboardingCapitalDepositCompany": {
"individualUltimateBeneficialOwners": [
{
"type": "HasCapital",
"birthCity": "Paris",
"birthCityPostalCode": "75000",
"birthCountryCode": "FRA",
"firstName": "Jean",
"lastName": "Dupond",
"birthDate": "1980/10/10",
"direct": true,
"totalCapitalPercentage": 66
},{
"type": "HasCapital",
"birthCity": "Paris",
"birthCityPostalCode": "75000",
"birthCountryCode": "FRA",
"birthDate": "1980/10/10",
"direct": false,
"firstName": "John",
"lastName": "Doe",
"direct": false,
"indirect": true,
"totalCapitalPercentage": 33
}
],
"accountName": "New company",
"businessActivity": "AdministrativeServices",
"businessActivityDescription": "Description of the new company activity",
"companyType": "Company",
"email": "[email protected]",
"isRegistered": false,
"language":"fr",
"monthlyPaymentVolume": "Between10000And50000",
"name": "New company",
"residencyAddress": {
"addressLine1": "test",
"city": "Paris",
"country": "FRA",
"postalCode": "75000"
}
}
}
}
{
"data": {
"createCapitalDepositCase": {
"capitalDepositCase": {
"companyName": "New company",
"id": "{{YOUR_CAPITAL_DEPOSIT_CASE_ID}}",
"companyOnboarding": {
"id": "{{YOUR_COMPANY_ONBOARDING_ID}}"
},
"documents": [
{
"type": "ArticlesOfIncorporation",
"status": "Pending",
"downloadUrl": null,
"id": "{{YOUR_DOCUMENT_ID}}",
"uploadedAt": null
},
{
"type": "CompanyLeaseAgreement",
"status": "Pending",
"downloadUrl": null,
"id": "{{YOUR_DOCUMENT_ID}}",
"uploadedAt": null
},
{
"type": "PowerOfAttorney",
"status": "Pending",
"downloadUrl": null,
"id": "{{YOUR_DOCUMENT_ID}}",
"uploadedAt": null
},
{
"type": "CapitalShareDepositCertificate",
"status": "Pending",
"downloadUrl": null,
"id": "{{YOUR_DOCUMENT_ID}}",
"uploadedAt": null
},
{
"type": "RegisterExtract",
"status": "Pending",
"downloadUrl": null,
"id": "{{YOUR_DOCUMENT_ID}}",
"uploadedAt": null
}
],
"shareholders": [
{
"info": {
"__typename": "IndividualShareholder",
"firstName": "Jean",
"lastName": "Dupond"
},
"status": "PendingOnboarding",
"id": "{{YOUR_SHAREHOLDER_ID}}",
"onboarding": {
"id": "{{YOUR_ONBOARDING_ID}}"
},
"documents": [
{
"type": "ProofOfIndividualAddress",
"status": "Pending",
"downloadUrl": null,
"id": "{{YOUR_DOCUMENT_ID}}",
"uploadedAt": null
},
{
"type": "ProofOfIdentity",
"status": "Pending",
"downloadUrl": null,
"id": "{{YOUR_DOCUMENT_ID}}",
"uploadedAt": null
}
]
},
{
"info": {
"__typename": "CompanyShareholder",
"name": "Shareholder - company"
},
"status": "PendingOnboarding",
"id": "{{YOUR_SHAREHOLDER_ID}}",
"onboarding": {
"id": "{{YOUR_ONBOARDING_ID}}"
},
"documents": [
{
"type": "RegisterExtract",
"status": "Pending",
"downloadUrl": null,
"id": "{{YOUR_DOCUMENT_ID}}",
"uploadedAt": null
},
{
"type": "ArticlesOfIncorporation",
"status": "Pending",
"downloadUrl": null,
"id": "{{YOUR_DOCUMENT_ID}}",
"uploadedAt": null
},
{
"type": "CorporateIncomeTaxReturn",
"status": "Pending",
"downloadUrl": null,
"id": "{{YOUR_DOCUMENT_ID}}",
"uploadedAt": null
},
{
"type": "ProofOfIdentity",
"status": "Pending",
"downloadUrl": null,
"id": "{{YOUR_DOCUMENT_ID}}",
"uploadedAt": null
}
]
}
]
}
}
}
}
Once the capitalDepositCase is created, you can use the CapitalDepositCaseId to query it anytime you want. By doing that, you’ll notice that there are multiple documents created at different levels.
To process the capital deposit, we need documents regarding:
  • the shareholders:
    • individual shareholders:
      • ProofOfIndividualAddress*: upload the user's proof of address
      • ProofOfIdentity: you do not need to upload this, since we collect it automatically when the user logs in. You'll be able to download the proof of identity yourself once it's been verified by our compliance team.
    • company shareholders :
      • RegisterExtract*: upload the company's KBIS
      • ArticlesOfIncorporation*: upload the company's status
      • CorporateIncomeTaxReturn: upload the company's latest tax statement
      • ProofOfIdentity: you do not need to upload this, since we collect it automatically when the user logs in. You'll be able to download the proof of identity yourself once it's been verified by our compliance team.
  • and the capital deposit case:
    • ArticlesOfIncorporation*: upload the draft status of the company being created
    • CompanyLeaseAgreement*: upload proof of where the company will be located
    • PowerOfAttorney*: upload a mandate by the representative that's performing capital deposit via Swan (we will give you a template)
NB: documents marked with an * are required for the CapitalDepositCase to be processed. Additional documents might be requested.
Request
Response
query MyQuery {
capitalDepositCase(id: "{{YOUR_CAPITAL_DEPOSIT_CASE_ID}}")
{
companyName
id
companyOnboarding {
id
}
documents {
type
status
downloadUrl
id
uploadedAt
}
shareholders {
info {
... on IndividualShareholder {
__typename
firstName
lastName
}
... on CompanyShareholder {
__typename
name
}
}
status
id
onboarding {
id
}
documents {
type
status
downloadUrl
id
uploadedAt
}
}
}
}
{
"data": {
"capitalDepositCase": {
"companyName": "New company",
"id": "{{YOUR_CAPITAL_DEPOSIT_ID}}",
"companyOnboarding": {
"id": "{{YOUR_ONBOARDING_ID}}"
},
"documents": [
{
"type": "ArticlesOfIncorporation",
"status": "Pending",
"downloadUrl": null,
"id": "{{YOUR_DOCUMENT_ID}}",
"uploadedAt": null
},
{
"type": "RegisterExtract",
"status": "Pending",
"downloadUrl": null,
"id": "{{YOUR_DOCUMENT_ID}}",
"uploadedAt": null
},
{
"type": "CompanyLeaseAgreement",
"status": "Pending",
"downloadUrl": null,
"id": "{{YOUR_DOCUMENT_ID}}",
"uploadedAt": null
},
{
"type": "PowerOfAttorney",
"status": "Pending",
"downloadUrl": null,
"id": "{{YOUR_DOCUMENT_ID}}",
"uploadedAt": null
},
{
"type": "CapitalShareDepositCertificate",
"status": "Pending",
"downloadUrl": null,
"id": "{{YOUR_DOCUMENT_ID}}",
"uploadedAt": null
}
],
"shareholders": [
{
"info": {
"__typename": "CompanyShareholder",
"name": "Shareholder - company"
},
"status": "PendingOnboarding",
"id": "{{YOUR_SHAREHOLDER_ID}}",
"onboarding": {
"id": "{{YOUR_ONBOARDING_ID}}"
},
"documents": [
{
"type": "ArticlesOfIncorporation",
"status": "Pending",
"downloadUrl": null,
"id": "{{YOUR_DOCUMENT_ID}}",
"uploadedAt": null
},
{
"type": "RegisterExtract",
"status": "Pending",
"downloadUrl": null,
"id": "{{YOUR_DOCUMENT_ID}}",
"uploadedAt": null
},
{
"type": "CorporateIncomeTaxReturn",
"status": "Pending",
"downloadUrl": null,
"id": "{{YOUR_DOCUMENT_ID}}",
"uploadedAt": null
},
{
"type": "ProofOfIdentity",
"status": "Pending",
"downloadUrl": null,
"id": "{{YOUR_DOCUMENT_ID}}",
"uploadedAt": null
}
]
},
{
"info": {
"__typename": "IndividualShareholder",
"firstName": "Jean",
"lastName": "Dupond"
},
"status": "PendingOnboarding",
"id": "{{YOUR_SHAREHOLDER_ID}}",
"onboarding": {
"id": "{{YOUR_ONBOARDING_ID}}"
},
"documents": [
{
"type": "ProofOfIndividualAddress",
"status": "Pending",
"downloadUrl": null,
"id": "{{YOUR_DOCUMENT_ID}}",
"uploadedAt": null
},
{
"type": "ProofOfIdentity",
"status": "Pending",
"downloadUrl": null,
"id": "{{YOUR_DOCUMENT_ID}}",
"uploadedAt": null
}
]
}
]
}
}
}

Upload documents using the uploadUrl

For each document you need to upload, you will have to call the generateCapitalDepositDocumentUploadUrl mutation.
Request
Response
mutation MyMutation {
generateCapitalDepositDocumentUploadUrl(
input: {
documentId: "{{YOUR_DOCUMENT_ID}}"
capitalDepositCaseId: "{{YOUR_CAPITALDEPOSITCASE_ID}}"
filename: "{{FILENAME}}"
}
) {
... on GenerateCapitalDepositDocumentUploadUrlSuccessPayload {
uploadUrl
}
}
}
{
"data": {
"generateCapitalDepositDocumentUploadUrl": {
"uploadUrl": "{{YOUR_UPLOAD_URL}}"
}
}
}
This provides you with an uploadUrl. You then need to do an HTTP PUT request on the URL with the header, Content-Type: multipart/form-data. You can use this curl command to try the upload url.
Request
curl --upload-file my-file https://{{YOUR_PRESIGNED_URL}}
If you want to change the uploaded document, just go through the same process. Depending on which step of the CapitalDepositCase process you're at, you may no longer be able to modify a document. For example, if your case has already been sent to the notary, you'll no longer be able to modify the documents provided.

Use onboardings - for the company being created, and for its shareholders

When creating a capital deposit case, you create one onboarding per shareholder and one onboarding for the company being created. Those onboardings can be used with our no-code interface or with the finalizeOnboarding mutation. This mutation requires a User Access Token therefore you must ask the user to go through the oAuth process.
What we recommend is that when those onboardings are created, you communicate to the shareholders an oAuth link, asking them to verify their identities. When they are redirected at the end of the oAuth process, you can use their token to finalize the onboarding. Learn how to entice your user to verify their identity
Request
Response
mutation MyMutation {
finalizeOnboarding(
input: { onboardingId: "{{YOUR_ONBOARDING_ID}}" }
) {
... on FinalizeOnboardingSuccessPayload {
__typename
onboarding {
id
accountHolder {
accounts {
edges {
node {
id
}
}
}
id
}
}
}
}
}
{
"data": {
"finalizeOnboarding": {
"__typename": "FinalizeOnboardingSuccessPayload",
"onboarding": {
"id": "{{YOUR_ONBOARDING_ID}}",
"accountHolder": {
"accounts": {
"edges": [
{
"node": {
"id": "{{YOUR_ACCOUNT_ID}}"
}
}
]
}
}
}
}
}
}
Once the onboardings are finalized, and the users have verified their identity, our compliance department will process the onboardings and the users will be able to wire their share of capital to the temporary Swan accounts opened in their names.
In Sandbox, you must simulate the verification process, by using our event simulator. Learn more

Make deposits

In Live, shareholders just have to make a payment from another of their own bank accounts towards their temporary Swan account, using its IBAN.
In Sandbox you must use our Event Simulator, just check the “Receive an incoming transfer” tab. Enter the account's IBAN and the amount of the deposit.

Send the case to the notary

In Live, once the deposits have been made and the case is validated by our compliance department, all the documents and deposits are sent to the notary.
In Sandbox, you must simulate the validation of our compliance department by clicking on "Validate" from our Capital Deposit Dashboard. For more information on accessing the capital deposit dashboard, just write us at [email protected].

Receive the certificate from the notary

In Live, 24h-48h after the case has been sent, the certificate will be available via API (and in the Capital Deposit Dashboard) with the CapitalShareDepositCertificate document type.
In Sandbox, you must access our Capital Deposit Dashboard and upload the document to trigger the status switch.

Upload the KBIS

To upload the KBIS you just need to follow the same steps as “Upload document and uploadUrl” but for the RegisterExtract document type.

Receive the capital on the company account

In Live, 24h-48h after the KBIS was uploaded, you will receive the full capital on the company account.
In Sandbox you must use our Event Simulator, more specifically the “Receive an incoming transfer”.
That's it! Once the money has been wired to the company account, the Capital Deposit Case is finished and the company will be able to use all our features.