OpenAPI Specification
openapi: 3.0.3
info:
title: Due Account KYC API
version: v1
description: 'Due provides borderless payment infrastructure: cross-border transfers, fiat<->stablecoin on/off-ramps, virtual accounts, FX rates, KYC/KYB onboarding, non-custodial MPC wallets (Vault), and webhooks. Assembled by API Evangelist from Due''s per-operation OpenAPI fragments published on due.readme.io.'
contact:
email: demo@due.network
url: https://www.opendue.com
servers:
- url: https://api.due.network
description: Production
- url: https://api.sandbox.due.network
description: Sandbox
security:
- BearerAuth: []
tags:
- name: KYC
paths:
/v1/kyc/submissions:
parameters:
- $ref: '#/components/parameters/DueAccountIdHeader'
get:
summary: List open submissions
tags:
- KYC
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/kyc_entities.Submission'
operationId: get_v1-kyc-submissions
/v1/kyc:
parameters:
- $ref: '#/components/parameters/DueAccountIdHeader'
get:
summary: Get standard KYC/KYB link
description: Retrieve standard KYC/KYB details and link.
tags:
- KYC
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/transfers_models.SumsubKYC'
operationId: get_v1-kyc
post:
summary: Initiate standard KYC/KYB
description: Initiate standard KYC/KYB for an account.
tags:
- KYC
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/kyc_entities.Submission'
operationId: post_v1-kyc
/v1/kyc/session:
parameters:
- $ref: '#/components/parameters/DueAccountIdHeader'
post:
summary: Create a KYC/KYB access session
description: Creates a session to access KYC/KYB access token and link
tags:
- KYC
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/transfers_models_v2.KYCSession'
operationId: post_v1-kyc-session
/v1/kyc/sharing/sumsub:
parameters:
- $ref: '#/components/parameters/DueAccountIdHeader'
post:
summary: Share Sumsub KYC
description: Share an existing Sumsub applicant
tags:
- KYC
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/transfers_dto.ShareSumsubKYCRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/transfers_models_v2.SumsubSharedKYC'
operationId: post_v1-kyc-sharing-sumsub
/v1/kyc/submissions/documents/{token}:
parameters:
- $ref: '#/components/parameters/DueAccountIdHeader'
post:
summary: Upload verification documents
tags:
- KYC
parameters:
- in: path
name: token
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: string
format: binary
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/kyc_entities.Submission'
operationId: post_v1-kyc-submissions-documents-token
/v1/kyc/submissions/{submissionId}/applicants:
parameters:
- $ref: '#/components/parameters/DueAccountIdHeader'
post:
summary: Create child applicant
tags:
- KYC
parameters:
- in: path
name: submissionId
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/kyc_dto.CreateChildApplicantRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/kyc_entities.Submission'
operationId: post_v1-kyc-submissions-submissionid-applicants
/v1/kyc/submissions/{submissionId}/complete:
parameters:
- $ref: '#/components/parameters/DueAccountIdHeader'
post:
summary: Complete applicant submission
tags:
- KYC
parameters:
- in: path
name: submissionId
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/kyc_entities.Submission'
operationId: post_v1-kyc-submissions-submissionid-complete
/v1/kyc/submissions/{submissionId}/documents:
parameters:
- $ref: '#/components/parameters/DueAccountIdHeader'
post:
summary: Request verification document upload token
tags:
- KYC
parameters:
- in: path
name: submissionId
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/kyc_dto.KYCDocumentUploadTokenRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/kyc_dto.DocumentUploadToken'
operationId: post_v1-kyc-submissions-submissionid-documents
/v1/kyc/submissions/{submissionId}/info:
parameters:
- $ref: '#/components/parameters/DueAccountIdHeader'
post:
summary: Provide applicant information
tags:
- KYC
parameters:
- in: path
name: submissionId
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/kyc_entities.ApplicantInfo'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/kyc_entities.Submission'
operationId: post_v1-kyc-submissions-submissionid-info
/v1/kyc/submissions/{submissionId}/questionnaires:
parameters:
- $ref: '#/components/parameters/DueAccountIdHeader'
post:
summary: Add questionnaire answers
tags:
- KYC
parameters:
- in: path
name: submissionId
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/kyc_questionnaire.QuestionnaireAnswered'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/kyc_entities.Submission'
operationId: post_v1-kyc-submissions-submissionid-questionnaires
/v1/kyc/submissions/{submissionId}/relations:
parameters:
- $ref: '#/components/parameters/DueAccountIdHeader'
post:
summary: Set submission relations
tags:
- KYC
parameters:
- in: path
name: submissionId
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/kyc_entities.Beneficiary'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/kyc_entities.Submission'
operationId: post_v1-kyc-submissions-submissionid-relations
/v1/kyc/endorsements/{code}:
get:
parameters:
- in: path
name: code
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/kyc_entities.Endorsement'
operationId: get_v1-kyc-endorsements-code
tags:
- KYC
post:
parameters:
- in: path
name: code
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/kyc_entities.Endorsement'
operationId: post_v1-kyc-endorsements-code
tags:
- KYC
/v1/kyc/endorsements:
get:
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/kyc_entities.Endorsement'
operationId: get_v1-kyc-endorsements
tags:
- KYC
/v1/kyc/submissions/{submissionId}:
get:
parameters:
- in: path
name: submissionId
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/kyc_entities.Submission'
summary: Get submission
operationId: get_v1-kyc-submissions-submissionid
tags:
- KYC
/v1/kyc/sessions:
post:
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/kyc_dto.KYCSessionCreateRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/due_jwt.JwtToken'
summary: Create KYC session
operationId: post_v1-kyc-sessions
tags:
- KYC
components:
schemas:
kyc_required_info.Address:
type: object
properties:
country:
type: string
postCode:
type: string
town:
type: string
street:
type: string
subStreet:
type: string
state:
type: string
stateCode:
type: string
buildingName:
type: string
flatNumber:
type: string
buildingNumber:
type: string
required:
- postCode
- town
- street
kyc_questionnaire.Question:
type: object
properties:
id:
type: string
title:
type: string
description:
type: string
requiredWhen:
$ref: '#/components/schemas/kyc_questionnaire.RequiredCondition'
schema:
oneOf:
- $ref: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionDateTime'
- $ref: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionFiles'
- $ref: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionBoolean'
- $ref: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionText'
- $ref: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionDate'
- $ref: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionTime'
- $ref: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionChoice'
- $ref: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionAccountCategory'
- $ref: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionMultipleChoice'
- $ref: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionMultipleCountries'
- $ref: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionNumber'
discriminator:
propertyName: type
mapping:
account_category: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionAccountCategory'
boolean: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionBoolean'
choice: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionChoice'
date: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionDate'
datetime: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionDateTime'
files: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionFiles'
multiple_choice: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionMultipleChoice'
multiple_countries: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionMultipleCountries'
number: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionNumber'
text: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionText'
time: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionTime'
kyc_questionnaire.Answer:
type: object
properties:
id:
type: string
value:
type: array
items:
type: string
kyc_questionnaire.KYCQuestionnaireQuestionTime:
type: object
properties:
from:
type: string
to:
type: string
type:
type: string
required:
- type
transfers_models_v2.SumsubSharedKYC:
type: object
properties:
status:
type: string
submissionId:
type: string
kyc_questionnaire.KYCQuestionnaireQuestionAccountCategory:
type: object
properties:
options:
type: array
items:
$ref: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionChoiceOption'
resourceURL:
type: string
type:
type: string
required:
- type
kyc_questionnaire.KYCQuestionnaireQuestionChoice:
type: object
properties:
options:
type: array
items:
$ref: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionChoiceOption'
type:
type: string
required:
- type
kyc_questionnaire.KYCQuestionnaireQuestionDate:
type: object
properties:
from:
type: string
to:
type: string
type:
type: string
required:
- type
kyc_document.KYCDocumentRequirementSet:
type: object
properties:
category:
type: string
oneOf:
type: array
items:
$ref: '#/components/schemas/kyc_document.KYCDocumentRequirement'
kyc_entities.RequirementsSchemaConditional:
type: object
properties:
if:
type: array
items:
oneOf:
- $ref: '#/components/schemas/kyc_entities.RequirementsSchemaConditional'
- $ref: '#/components/schemas/kyc_entities.RequirementsSchemaOneOf'
- $ref: '#/components/schemas/kyc_entities.RequirementsSchemaStatic'
discriminator:
propertyName: kind
mapping:
conditional: '#/components/schemas/kyc_entities.RequirementsSchemaConditional'
oneOf: '#/components/schemas/kyc_entities.RequirementsSchemaOneOf'
static: '#/components/schemas/kyc_entities.RequirementsSchemaStatic'
then:
type: array
items:
oneOf:
- $ref: '#/components/schemas/kyc_entities.RequirementsSchemaConditional'
- $ref: '#/components/schemas/kyc_entities.RequirementsSchemaOneOf'
- $ref: '#/components/schemas/kyc_entities.RequirementsSchemaStatic'
discriminator:
propertyName: kind
mapping:
conditional: '#/components/schemas/kyc_entities.RequirementsSchemaConditional'
oneOf: '#/components/schemas/kyc_entities.RequirementsSchemaOneOf'
static: '#/components/schemas/kyc_entities.RequirementsSchemaStatic'
kind:
type: string
required:
- kind
transfers_models.SumsubKYC:
type: object
properties:
id:
type: string
type:
type: string
email:
type: string
applicantId:
type: string
externalLink:
type: string
status:
type: string
enum:
- pending
- resubmission_required
- passed
- failed
country:
type: string
token:
type: string
primaryEntity:
$ref: '#/components/schemas/transfers_models.LegalEntity'
kyc_questionnaire.KYCQuestionnaireQuestionDateTime:
type: object
properties:
from:
type: string
format: date-time
to:
type: string
format: date-time
type:
type: string
required:
- type
kyc_required_info.Location:
type: object
properties:
latitude:
type: string
longitude:
type: string
required:
- latitude
- longitude
transfers_dto.ShareSumsubKYCRequest:
type: object
properties:
shareToken:
type: string
applicantInfo:
$ref: '#/components/schemas/kyc_entities.ApplicantInfo'
questionnaire:
$ref: '#/components/schemas/kyc_questionnaire.QuestionnaireAnswered'
kyc_document.KYCDocumentRequirement:
type: object
properties:
type:
type: string
variants:
type: array
items:
type: string
kyc_entities.Endorsement:
type: object
properties:
ownerId:
type: string
code:
type: string
status:
type: string
submission:
$ref: '#/components/schemas/kyc_entities.Submission'
kyc_questionnaire.QuestionnaireAnswered:
type: object
properties:
id:
type: string
templateId:
type: string
answers:
type: array
items:
$ref: '#/components/schemas/kyc_questionnaire.Answer'
due_reflect.FieldDescriptor:
type: object
properties:
key:
type: string
type:
type: string
oneOf:
type: array
items:
type: string
required:
type: boolean
requiredIf:
type: string
excludedUnless:
type: string
fields:
type: array
items:
$ref: '#/components/schemas/due_reflect.FieldDescriptor'
transfers_models.LegalEntity:
type: object
properties:
name:
type: string
tosLink:
type: string
privacyPolicyLink:
type: string
country2:
type: string
kyc_document.KYCDocument:
type: object
properties:
filename:
type: string
type:
type: string
variant:
type: string
issuingCountry:
type: string
kyc_entities.Beneficiary:
type: object
properties:
applicantId:
type: string
roles:
type: array
items:
type: string
shareSize:
type: string
kyc_dto.DocumentUploadToken:
type: object
properties:
token:
type: string
kyc_questionnaire.RequiredCondition:
type: object
properties:
id:
type: string
value:
type: string
kyc_questionnaire.QuestionnaireTemplate:
type: object
properties:
templateId:
type: string
questions:
type: array
items:
$ref: '#/components/schemas/kyc_questionnaire.Question'
kyc_dto.KYCDocumentUploadTokenRequest:
type: object
properties:
type:
type: string
variant:
type: string
issuingCountry:
type: string
filename:
type: string
extractedData:
type: object
properties:
number:
type: string
serialNumber:
type: string
issuedAt:
type: string
format: date
expiresAt:
type: string
format: date
mrz:
type: array
items:
type: string
required:
- type
- issuingCountry
- filename
kyc_questionnaire.KYCQuestionnaireQuestionMultipleCountries:
type: object
properties:
options:
type: array
items:
$ref: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionChoiceOption'
min:
type: integer
format: int32
max:
type: integer
format: int32
resourceURL:
type: string
type:
type: string
required:
- type
kyc_questionnaire.KYCQuestionnaireQuestionChoiceOption:
type: object
properties:
id:
type: string
label:
type: string
kyc_entities.Submission:
type: object
properties:
id:
type: string
ownerId:
type: string
applicantId:
type: string
status:
type: string
info:
$ref: '#/components/schemas/kyc_entities.ApplicantInfo'
requirements:
type: array
items:
oneOf:
- $ref: '#/components/schemas/kyc_entities.RequirementsSchemaConditional'
- $ref: '#/components/schemas/kyc_entities.RequirementsSchemaOneOf'
- $ref: '#/components/schemas/kyc_entities.RequirementsSchemaStatic'
discriminator:
propertyName: kind
mapping:
conditional: '#/components/schemas/kyc_entities.RequirementsSchemaConditional'
oneOf: '#/components/schemas/kyc_entities.RequirementsSchemaOneOf'
static: '#/components/schemas/kyc_entities.RequirementsSchemaStatic'
documents:
type: array
items:
$ref: '#/components/schemas/kyc_document.KYCDocument'
questionnaires:
type: array
items:
$ref: '#/components/schemas/kyc_questionnaire.QuestionnaireAnswered'
presetCode:
type: string
kyc_dto.KYCSessionCreateRequest:
type: object
properties:
submissionId:
type: string
kyc_entities.RequirementsSchemaOneOf:
type: object
properties:
oneOf:
type: array
items:
oneOf:
- $ref: '#/components/schemas/kyc_entities.RequirementsSchemaConditional'
- $ref: '#/components/schemas/kyc_entities.RequirementsSchemaOneOf'
- $ref: '#/components/schemas/kyc_entities.RequirementsSchemaStatic'
discriminator:
propertyName: kind
mapping:
conditional: '#/components/schemas/kyc_entities.RequirementsSchemaConditional'
oneOf: '#/components/schemas/kyc_entities.RequirementsSchemaOneOf'
static: '#/components/schemas/kyc_entities.RequirementsSchemaStatic'
kind:
type: string
required:
- kind
kyc_dto.CreateChildApplicantRequest:
type: object
properties:
type:
type: string
roles:
type: array
items:
type: string
kyc_entities.RequirementsSchemaStatic:
type: object
properties:
info:
type: array
items:
$ref: '#/components/schemas/due_reflect.FieldDescriptor'
documents:
type: array
items:
$ref: '#/components/schemas/kyc_document.KYCDocumentRequirementSet'
questionnaires:
type: array
items:
$ref: '#/components/schemas/kyc_questionnaire.QuestionnaireTemplate'
kind:
type: string
required:
- kind
kyc_entities.ApplicantInfo:
type: object
properties:
firstName:
type: string
lastName:
type: string
dob:
type: string
companyName:
type: string
registrationNumber:
type: string
address:
$ref: '#/components/schemas/kyc_required_info.Address'
bvn:
type: string
entityType:
type: string
nationality:
type: string
phone:
type: string
postalAddress:
type: string
ssn:
type: string
tin:
type: string
cpf:
type: string
website:
type: string
location:
$ref: '#/components/schemas/kyc_required_info.Location'
required:
- firstName
- lastName
- dob
- companyName
- registrationNumber
- address
- bvn
- entityType
- nationality
- phone
- postalAddress
- ssn
- tin
- cpf
- website
transfers_models_v2.KYCSession:
type: object
properties:
link:
type: string
accessToken:
type: string
kyc_questionnaire.KYCQuestionnaireQuestionBoolean:
type: object
properties:
type:
type: string
required:
- type
kyc_questionnaire.KYCQuestionnaireQuestionMultipleChoice:
type: object
properties:
options:
type: array
items:
$ref: '#/components/schemas/kyc_questionnaire.KYCQuestionnaireQuestionChoiceOption'
min:
type: integer
format: int32
max:
type: integer
format: int32
type:
type: string
required:
- type
kyc_questionnaire.KYCQuestionnaireQuestionFiles:
type: object
properties:
max:
type: integer
format: int32
type:
type: string
required:
- type
due_jwt.JwtToken:
type: object
properties:
token:
type: string
kyc_questionnaire.KYCQuestionnaireQuestionNumber:
type: object
properties:
min:
type: number
format: double
max:
type: number
format: double
type:
type: string
required:
- type
kyc_questionnaire.KYCQuestionnaireQuestionText:
type: object
properties:
format:
type: string
type:
type: string
required:
- type
securitySchemes:
BearerAuth:
type: http
scheme: bearer