Put Customer Info Request
Request for uploading or updating customer KYC information in SEP-12.
Submits customer data to the anchor in an authenticated and idempotent manner. Used for both initial registration and updating existing customer information. Supports text fields, binary file uploads, verification codes, and file references.
Request categories:
Standard KYC fields via kycFields (SEP-09 standard fields)
Custom fields via customFields and customFiles
Verification codes via verificationFields (e.g., email/phone verification)
File references via fileReferences (for separately uploaded files)
The request is idempotent: multiple calls with the same data won't create duplicate customers. Use the customer id from the response for subsequent updates.
Example - Basic registration:
val request = PutCustomerInfoRequest(
jwt = authToken,
kycFields = StandardKYCFields(
naturalPersonKYCFields = NaturalPersonKYCFields(
firstName = "John",
lastName = "Doe",
emailAddress = "john@example.com",
birthDate = LocalDate(1990, 1, 15)
)
)
)
val response = kycService.putCustomerInfo(request)
println("Customer ID: ${response.id}")Example - With document uploads:
val request = PutCustomerInfoRequest(
jwt = authToken,
id = customerId, // Update existing customer
kycFields = StandardKYCFields(
naturalPersonKYCFields = NaturalPersonKYCFields(
photoIdFront = loadImageBytes("passport_front.jpg"),
photoIdBack = loadImageBytes("passport_back.jpg")
)
)
)
val response = kycService.putCustomerInfo(request)Example - Email verification:
// User receives code "123456" via email
val request = PutCustomerInfoRequest(
jwt = authToken,
id = customerId,
verificationFields = mapOf(
"email_address_verification" to "123456",
"mobile_number_verification" to "654321"
)
)
val response = kycService.putCustomerInfo(request)Example - File references (two-step upload):
// Step 1: Upload file separately
val fileResponse = kycService.postCustomerFile(photoBytes, authToken)
// Step 2: Reference file in customer update
val request = PutCustomerInfoRequest(
jwt = authToken,
id = customerId,
fileReferences = mapOf(
"photo_id_front_file_id" to fileResponse.fileId
)
)
val response = kycService.putCustomerInfo(request)Example - Organization KYC:
val request = PutCustomerInfoRequest(
jwt = authToken,
type = "sep31-receiver",
kycFields = StandardKYCFields(
organizationKYCFields = OrganizationKYCFields(
name = "Acme Corp",
registrationNumber = "123456789",
directorName = "Jane Smith"
)
)
)Example - Custom fields:
val request = PutCustomerInfoRequest(
jwt = authToken,
customFields = mapOf(
"custom_field_1" to "value1",
"custom_field_2" to "value2"
),
customFiles = mapOf(
"custom_document" to documentBytes
)
)Field submission order:
Text fields are submitted first
Binary files must be sent at the end (SEP-12 requirement)
The SDK handles proper multipart/form-data ordering automatically
See also:
PutCustomerInfoResponse for response details
StandardKYCFields for SEP-09 standard fields
GetCustomerInfoRequest for checking requirements
Constructors
Properties
Custom text fields not defined in SEP-09 (optional)
Custom binary fields not defined in SEP-09 (optional)
File IDs from POST /customer/files with _file_id suffix (optional)
SEP-09 standard KYC fields (optional)
Associated transaction ID (optional)
Verification codes with _verification suffix (optional)