API Reference
Welcome to the Portabl Core™ API documentation for managing collection and reception of KYC data. We will cover the necessary steps for integrating our API into your application to seamlessly manage your user's KYC data. KYC, or Know Your Customer, is a critical step in financial transactions to verify the identity and legitimacy of your users.
Our API enables you to collect and receive KYC data securely, efficiently, and in compliance with regulatory requirements. By integrating our API, you can streamline your KYC process, reduce manual errors, and improve user experience.
To get started, you will need to authenticate with our API using your API keys. Once authenticated, you can use our API endpoints to initiate KYC data collection, receive user data, and manage the status of KYC requests. Our API supports various KYC documents, including government-issued IDs, proof of address, and other relevant documents.
Auth
Get Access Token
The Portabl Core™ API uses API keys to authenticate requests. You can view and manage your API keys in the Portabl Console (opens in a new tab). Your API keys grant extensive access to Portabl Core™ API, so make sure to not share them to publicly accessible areas such client-side code, repositories, etc. Authentication to the API is performed via OAuth 2.0 Client Credentials Grant flow.
Option | Type | Description |
---|---|---|
clientId | string | Your Portabl Core API Client ID |
clientSecret | string | Your Portabl Core API Client Secret |
curl -X POST "https://api.getportabl.com/api/v1/auth/token" /
--data-raw {
"clientId": "<YOUR clientId>",
"clientSecret": "<YOUR clientSecret>"
}
{
"tokenType": "Bearer",
"scope": "read:settings update:settings read:members create:member-invitations read:member-invitations update:member-invitations delete:member-invitations read:identifiers update:identifiers read:trusted-issuers create:data-profiles read:data-profiles read:credential-manifests read:presentation-definitions read:verifiable-documents read:evidence-attachments verify:credentials verify:presentations read:provider-users read:provider-user-settings upsert:provider-users upsert:provider-user-claims read:provider-user-sync-sessions create:provider-user-sync-sessions start:provider-user-sync-sessions read:provider-sync-data read:provider-sync-sessions",
"accessToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ikp2UnZvZVJ0ZDBpZ215R3EyVkJtbSJ9.eyJodHRwczovL2dldHBvcnRhYmwuY29tL3RlbmFudElkIjoicHJvdmlkZXItYTVlOThiMGEtNDIwMS00ODA2LWI0OTYtYjVmN2VkMDc0Yjc0IiwiaXNzIjoiaHR0cHM6Ly9kZXYtYXV0aC5nZXRwb3J0YWJsLmNvbS8iLCJzdWIiOiJqOWhHZFRQUE5zdTdId0czV2xRTEpBQmE5UHl0bnh1ZUBjbGllbnRzIiwiYXVkIjoiaHR0cHM6Ly9kZXYtYXBpLmdldHBvcnRhYmwuY29tIiwiaWF0IjoxNjgyMzg5NTAwLCJleHAiOjE2ODI0NzU5MDAsImF6cCI6Imo5aEdkVFBQTnN1N0h3RzNXbFFMSkFCYTlQeXRueHVlIiwic2NvcGUiOiJyZWFkOnNldHRpbmdzIHVwZGF0ZTpzZXR0aW5ncyByZWFkOm1lbWJlcnMgY3JlYXRlOm1lbWJlci1pbnZpdGF0aW9ucyByZWFkOm1lbWJlci1pbnZpdGF0aW9ucyB1cGRhdGU6bWVtYmVyLWludml0YXRpb25zIGRlbGV0ZTptZW1iZXItaW52aXRhdGlvbnMgcmVhZDppZGVudGlmaWVycyB1cGRhdGU6aWRlbnRpZmllcnMgcmVhZDp0cnVzdGVkLWlzc3VlcnMgY3JlYXRlOmRhdGEtcHJvZmlsZXMgcmVhZDpkYXRhLXByb2ZpbGVzIHJlYWQ6Y3JlZGVudGlhbC1tYW5pZmVzdHMgcmVhZDpwcmVzZW50YXRpb24tZGVmaW5pdGlvbnMgcmVhZDp2ZXJpZmlhYmxlLWRvY3VtZW50cyByZWFkOmV2aWRlbmNlLWF0dGFjaG1lbnRzIHZlcmlmeTpjcmVkZW50aWFscyB2ZXJpZnk6cHJlc2VudGF0aW9ucyByZWFkOnByb3ZpZGVyLXVzZXJzIHJlYWQ6cHJvdmlkZXItdXNlci1zZXR0aW5ncyB1cHNlcnQ6cHJvdmlkZXItdXNlcnMgdXBzZXJ0OnByb3ZpZGVyLXVzZXItY2xhaW1zIHJlYWQ6cHJvdmlkZXItdXNlci1zeW5jLXNlc3Npb25zIGNyZWF0ZTpwcm92aWRlci11c2VyLXN5bmMtc2Vzc2lvbnMgc3RhcnQ6cHJvdmlkZXItdXNlci1zeW5jLXNlc3Npb25zIHJlYWQ6cHJvdmlkZXItc3luYy1kYXRhIHJlYWQ6cHJvdmlkZXItc3luYy1zZXNzaW9ucyIsImd0eSI6ImNsaWVudC1jcmVkZW50aWFscyIsInBlcm1pc3Npb25zIjpbInJlYWQ6c2V0dGluZ3MiLCJ1cGRhdGU6c2V0dGluZ3MiLCJyZWFkOm1lbWJlcnMiLCJjcmVhdGU6bWVtYmVyLWludml0YXRpb25zIiwicmVhZDptZW1iZXItaW52aXRhdGlvbnMiLCJ1cGRhdGU6bWVtYmVyLWludml0YXRpb25zIiwiZGVsZXRlOm1lbWJlci1pbnZpdGF0aW9ucyIsInJlYWQ6aWRlbnRpZmllcnMiLCJ1cGRhdGU6aWRlbnRpZmllcnMiLCJyZWFkOnRydXN0ZWQtaXNzdWVycyIsImNyZWF0ZTpkYXRhLXByb2ZpbGVzIiwicmVhZDpkYXRhLXByb2ZpbGVzIiwicmVhZDpjcmVkZW50aWFsLW1hbmlmZXN0cyIsInJlYWQ6cHJlc2VudGF0aW9uLWRlZmluaXRpb25zIiwicmVhZDp2ZXJpZmlhYmxlLWRvY3VtZW50cyIsInJlYWQ6ZXZpZGVuY2UtYXR0YWNobWVudHMiLCJ2ZXJpZnk6Y3JlZGVudGlhbHMiLCJ2ZXJpZnk6cHJlc2VudGF0aW9ucyIsInJlYWQ6cHJvdmlkZXItdXNlcnMiLCJyZWFkOnByb3ZpZGVyLXVzZXItc2V0dGluZ3MiLCJ1cHNlcnQ6cHJvdmlkZXItdXNlcnMiLCJ1cHNlcnQ6cHJvdmlkZXItdXNlci1jbGFpbXMiLCJyZWFkOnByb3ZpZGVyLXVzZXItc3luYy1zZXNzaW9ucyIsImNyZWF0ZTpwcm92aWRlci11c2VyLXN5bmMtc2Vzc2lvbnMiLCJzdGFydDpwcm92aWRlci11c2VyLXN5bmMtc2Vzc2lvbnMiLCJyZWFkOnByb3ZpZGVyLXN5bmMtZGF0YSIsInJlYWQ6cHJvdmlkZXItc3luYy1zZXNzaW9ucyJdfQ.pjlBDRq0GYFJ6Jql666xfJG-VHYeuTZXN4dpQ6CH6dfUZsZPuN2i007jabKV80z-MjLjpf6Vo8r_UtAyFswEiyh7FcbnyKYQNKvxs7AkM2cOgxlOOpUKQxkpCyFOcI5ixVGtFiXv_DfZxJ3z_nL5G0n6sgZ1h8xxh51gYQVl1BIqkGUOlhx-73a04uGsAWmwj0xQepaiGokpdm9z7QtylcisLVXSVhvSBB1fy4yvgTEK9smKuzva7kPIRwmlQcIHTUGU2-D8a9A8Jm9zlymOSD8skhHsMlzBUW56Ous5HvO2e4V1ybrjobtwWozlniQQyubqdWSunoRKF2ZLkYUwsA",
"expiresIn": 86400
}
Users
Get users
Returns a list of users found within your Portabl account.
curl -X GET "https://api.getportabl.com/api/v1/provider/users" /
-H "Authorization: Bearer <TOKEN>"
{
"counts": {
"total": 1
},
"users": [
{
"userStatus": "Registered",
"userId": "bagaaieraf4tmk2khwmxkhi5to42eooo3mz5ytytrwqikjo54wmtzaj24skja",
"userDID": "did:ion:test:EiBwQwss4w0fEUpdFrhpn5Njp0a-LxMn6jvhP3wSirqAiA:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJ6VUM3RURqeWY5MlZtVU1KVmN2NiIsInB1YmxpY0tleUp3ayI6eyJjcnYiOiJCTFMxMjM4MV9HMiIsImt0eSI6IkVDIiwieCI6InBwUjRJVlM0VEE0S2E0Nk0zSWhPaDZ5WVFWcVVSVUhDNFlFcXNhNlZfRUppc0Z1UmpVQk0yOFpGN2dTczBvV0tBZm03T1UzdGZMczdOZnlQVHNRUHJMQ25wT21Wek0wczNsdlA0d1NzMXBCd2NhMjlDZEthSTRyVlVIakp4RFNDIn0sInB1cnBvc2VzIjpbImF1dGhlbnRpY2F0aW9uIiwiYXNzZXJ0aW9uTWV0aG9kIl0sInR5cGUiOiJCbHMxMjM4MUcyS2V5MjAyMCJ9LHsiaWQiOiJ6Nk1rdGFubWtQaWtmdTg0YnMxYiIsInB1YmxpY0tleUp3ayI6eyJjcnYiOiJFZDI1NTE5Iiwia3R5IjoiT0tQIiwieCI6IjBmRnM5Q0ZNOFlKTlNmSDRYanJmak12eFJqWTBfaURzYU51WFZEc0FmQW8ifSwicHVycG9zZXMiOlsiYXNzZXJ0aW9uTWV0aG9kIiwiYXV0aGVudGljYXRpb24iXSwidHlwZSI6IkVkMjU1MTlWZXJpZmljYXRpb25LZXkyMDE4In0seyJpZCI6Ino2TFNtU0pncVRwNlJHcGk2SEZlIiwicHVibGljS2V5SndrIjp7ImNydiI6IlgyNTUxOSIsImt0eSI6Ik9LUCIsIngiOiJrUWMtYW1FTG9wNnFpYWJmaEoxUEwwZXRhNWJQeFVBM3pwWkpHTmNsNHhNIn0sInB1cnBvc2VzIjpbImtleUFncmVlbWVudCJdLCJ0eXBlIjoiWDI1NTE5S2V5QWdyZWVtZW50S2V5MjAxOSJ9XSwic2VydmljZXMiOlt7ImlkIjoiZGlkY29tbSIsInNlcnZpY2VFbmRwb2ludCI6Imh0dHBzOi8vc2FuZGJveC1hcGkuZ2V0cG9ydGFibC5jb20vYXBpL3YxL2FnZW50L3VzZXItNDdkOTg4ZWYtMTdkNi00YTVjLWIxM2UtZjViNzg5YmQwYTU4L2RpZC1jb21tIiwidHlwZSI6IkRJRENvbW1NZXNzYWdpbmcifV19fV0sInVwZGF0ZUNvbW1pdG1lbnQiOiJFaUJKMkNYTFp3bEl0UmhRQTlTb2FSVUdzMUhnaS10N2pHUlV5TFozYnhlc3dBIn0sInN1ZmZpeERhdGEiOnsiZGVsdGFIYXNoIjoiRWlBOVdKa0lKLWxMcFVsMWFrMFdkTFNUZFcyam84MHJieVhhdENIYUp6UmV0dyIsInJlY292ZXJ5Q29tbWl0bWVudCI6IkVpQ0VsalNCcTZfX1FJOW1ScTAxYzZDeUdnWS1BcWlMeGVla3ozdy1kMkM0SkEifX0",
"shortUserDID": "did:ion:test:EiBwQwss4w0fEUpdFrhpn5Njp0a-LxMn6jvhP3wSirqAiA",
"userLogins": 2,
"userLastLoginAt": "2023-09-11T19:46:55.223Z",
"settings": {
"isSyncOn": true
},
"datapointsFlat": {
"firstName": "Liz",
"lastName": "Lemon",
"birthDate": "1980-03-06",
"nationality": "US",
"socialSecurityNumber": "123456789",
"residentialAddressStreetAddress": "11 Riverside Dr",
"residentialAddressLocality": "New York",
"residentialAddressRegion": "NY",
"residentialAddressPostalCode": "10024",
"residentialAddressCountry": "US",
"emailAddress": "liz.lemon@rock.com",
"phoneNumber": "x-xxx-xxx-xxxx"
},
"syncContext": {
"datapointsSynced": {
"firstName": "Liz",
"lastName": "Lemon",
"birthDate": "1980-03-06",
"nationality": "US",
"socialSecurityNumber": "123456789",
"residentialAddress": {
"streetAddress": "11 Riverside Dr",
"locality": "New York",
"postalCode": "10024",
"region": "NY",
"country": "US"
},
"emailAddress": "liz.lemon@rock.com",
"phoneNumber": "x-xxx-xxx-xxxx"
},
"datapointsLatest": {
"firstName": "Liz",
"lastName": "Lemon",
"birthDate": "1980-03-06",
"nationality": "US",
"socialSecurityNumber": "123456789",
"residentialAddress": {
"streetAddress": "11 Riverside Dr",
"locality": "New York",
"postalCode": "10024",
"region": "NY",
"country": "US"
},
"emailAddress": "liz.lemon@rock.com",
"phoneNumber": "x-xxx-xxx-xxxx"
}
},
"createdAt": "2023-09-11T19:45:32.858Z",
"updatedAt": "2023-09-11T19:46:55.232Z"
}
]
}
Get user
Returns a user found within your Portabl account. If user is not found, it will return 404 status code.
curl -X GET "https://api.getportabl.com/api/v1/provider/users/:user-id" /
-H "Authorization: Bearer <TOKEN>"
{
"userStatus": "Registered",
"userId": "bagaaieraf4tmk2khwmxkhi5to42eooo3mz5ytytrwqikjo54wmtzaj24skja",
"userDID": "did:ion:test:EiBwQwss4w0fEUpdFrhpn5Njp0a-LxMn6jvhP3wSirqAiA:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJ6VUM3RURqeWY5MlZtVU1KVmN2NiIsInB1YmxpY0tleUp3ayI6eyJjcnYiOiJCTFMxMjM4MV9HMiIsImt0eSI6IkVDIiwieCI6InBwUjRJVlM0VEE0S2E0Nk0zSWhPaDZ5WVFWcVVSVUhDNFlFcXNhNlZfRUppc0Z1UmpVQk0yOFpGN2dTczBvV0tBZm03T1UzdGZMczdOZnlQVHNRUHJMQ25wT21Wek0wczNsdlA0d1NzMXBCd2NhMjlDZEthSTRyVlVIakp4RFNDIn0sInB1cnBvc2VzIjpbImF1dGhlbnRpY2F0aW9uIiwiYXNzZXJ0aW9uTWV0aG9kIl0sInR5cGUiOiJCbHMxMjM4MUcyS2V5MjAyMCJ9LHsiaWQiOiJ6Nk1rdGFubWtQaWtmdTg0YnMxYiIsInB1YmxpY0tleUp3ayI6eyJjcnYiOiJFZDI1NTE5Iiwia3R5IjoiT0tQIiwieCI6IjBmRnM5Q0ZNOFlKTlNmSDRYanJmak12eFJqWTBfaURzYU51WFZEc0FmQW8ifSwicHVycG9zZXMiOlsiYXNzZXJ0aW9uTWV0aG9kIiwiYXV0aGVudGljYXRpb24iXSwidHlwZSI6IkVkMjU1MTlWZXJpZmljYXRpb25LZXkyMDE4In0seyJpZCI6Ino2TFNtU0pncVRwNlJHcGk2SEZlIiwicHVibGljS2V5SndrIjp7ImNydiI6IlgyNTUxOSIsImt0eSI6Ik9LUCIsIngiOiJrUWMtYW1FTG9wNnFpYWJmaEoxUEwwZXRhNWJQeFVBM3pwWkpHTmNsNHhNIn0sInB1cnBvc2VzIjpbImtleUFncmVlbWVudCJdLCJ0eXBlIjoiWDI1NTE5S2V5QWdyZWVtZW50S2V5MjAxOSJ9XSwic2VydmljZXMiOlt7ImlkIjoiZGlkY29tbSIsInNlcnZpY2VFbmRwb2ludCI6Imh0dHBzOi8vc2FuZGJveC1hcGkuZ2V0cG9ydGFibC5jb20vYXBpL3YxL2FnZW50L3VzZXItNDdkOTg4ZWYtMTdkNi00YTVjLWIxM2UtZjViNzg5YmQwYTU4L2RpZC1jb21tIiwidHlwZSI6IkRJRENvbW1NZXNzYWdpbmcifV19fV0sInVwZGF0ZUNvbW1pdG1lbnQiOiJFaUJKMkNYTFp3bEl0UmhRQTlTb2FSVUdzMUhnaS10N2pHUlV5TFozYnhlc3dBIn0sInN1ZmZpeERhdGEiOnsiZGVsdGFIYXNoIjoiRWlBOVdKa0lKLWxMcFVsMWFrMFdkTFNUZFcyam84MHJieVhhdENIYUp6UmV0dyIsInJlY292ZXJ5Q29tbWl0bWVudCI6IkVpQ0VsalNCcTZfX1FJOW1ScTAxYzZDeUdnWS1BcWlMeGVla3ozdy1kMkM0SkEifX0",
"shortUserDID": "did:ion:test:EiBwQwss4w0fEUpdFrhpn5Njp0a-LxMn6jvhP3wSirqAiA",
"userLogins": 2,
"userLastLoginAt": "2023-09-11T19:46:55.223Z",
"settings": {
"isSyncOn": true
},
"datapointsFlat": {
"firstName": "Liz",
"lastName": "Lemon",
"birthDate": "1980-03-06",
"nationality": "US",
"socialSecurityNumber": "123456789",
"residentialAddressStreetAddress": "11 Riverside Dr",
"residentialAddressLocality": "New York",
"residentialAddressRegion": "NY",
"residentialAddressPostalCode": "10024",
"residentialAddressCountry": "US",
"emailAddress": "liz.lemon@rock.com",
"phoneNumber": "x-xxx-xxx-xxxx"
},
"syncContext": {
"datapointsSynced": {
"firstName": "Liz",
"lastName": "Lemon",
"birthDate": "1980-03-06",
"nationality": "US",
"socialSecurityNumber": "123456789",
"residentialAddress": {
"streetAddress": "11 Riverside Dr",
"locality": "New York",
"postalCode": "10024",
"region": "NY",
"country": "US"
},
"emailAddress": "liz.lemon@rock.com",
"phoneNumber": "x-xxx-xxx-xxxx"
},
"datapointsLatest": {
"firstName": "Liz",
"lastName": "Lemon",
"birthDate": "1980-03-06",
"nationality": "US",
"socialSecurityNumber": "123456789",
"residentialAddress": {
"streetAddress": "11 Riverside Dr",
"locality": "New York",
"postalCode": "10024",
"region": "NY",
"country": "US"
},
"emailAddress": "liz.lemon@rock.com",
"phoneNumber": "x-xxx-xxx-xxxx"
}
},
"createdAt": "2023-09-11T19:45:32.858Z",
"updatedAt": "2023-09-11T19:46:55.232Z"
}
Get user sync context
Returns Data Sync context information for a given user:
"isSyncOn"
-true
if data synchronization was consented by a user"isSessionEstablished"
-true
if secure session a.k.a. Data Pipe is established"isLinked"
-true
if the user is registered and received a branded Financial Credential via data synchronization"datapoints"
- the scope defined by the latest data profile version that shall be processed during data synchronization
curl -X GET "https://api.getportabl.com/api/v1/provider/users/:user-id/sync-context" /
-H "Authorization: Bearer <TOKEN>"
{
"isSyncOn": true,
"isSessionEstablished": true,
"isLinked": true,
"datapoints": [
"FirstName",
"LastName",
"BirthDate",
"Nationality",
"SocialSecurityNumber",
"ResidentialAddressStreetAddress",
"ResidentialAddressLocality",
"ResidentialAddressPostalCode",
"ResidentialAddressRegion",
"ResidentialAddressCountry",
"EmailAddress",
"PhoneNumber"
]
}
Create or update a user
Creates a new user or updates an existing user.
Returns the created or updated user.
Option | Type | Description |
---|---|---|
settings | { "isSyncOn": true } | User data which can include settings. |
curl -X PUT "https://api.getportabl.com/api/v1/provider/users/:user-id" /
-H "Authorization: Bearer <TOKEN>"/
--data-raw {
"settings": "<YOUR settings>"
}
{
"userStatus": "Registered",
"userId": "bagaaieraf4tmk2khwmxkhi5to42eooo3mz5ytytrwqikjo54wmtzaj24skja",
"userDID": "did:ion:test:EiBwQwss4w0fEUpdFrhpn5Njp0a-LxMn6jvhP3wSirqAiA:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJ6VUM3RURqeWY5MlZtVU1KVmN2NiIsInB1YmxpY0tleUp3ayI6eyJjcnYiOiJCTFMxMjM4MV9HMiIsImt0eSI6IkVDIiwieCI6InBwUjRJVlM0VEE0S2E0Nk0zSWhPaDZ5WVFWcVVSVUhDNFlFcXNhNlZfRUppc0Z1UmpVQk0yOFpGN2dTczBvV0tBZm03T1UzdGZMczdOZnlQVHNRUHJMQ25wT21Wek0wczNsdlA0d1NzMXBCd2NhMjlDZEthSTRyVlVIakp4RFNDIn0sInB1cnBvc2VzIjpbImF1dGhlbnRpY2F0aW9uIiwiYXNzZXJ0aW9uTWV0aG9kIl0sInR5cGUiOiJCbHMxMjM4MUcyS2V5MjAyMCJ9LHsiaWQiOiJ6Nk1rdGFubWtQaWtmdTg0YnMxYiIsInB1YmxpY0tleUp3ayI6eyJjcnYiOiJFZDI1NTE5Iiwia3R5IjoiT0tQIiwieCI6IjBmRnM5Q0ZNOFlKTlNmSDRYanJmak12eFJqWTBfaURzYU51WFZEc0FmQW8ifSwicHVycG9zZXMiOlsiYXNzZXJ0aW9uTWV0aG9kIiwiYXV0aGVudGljYXRpb24iXSwidHlwZSI6IkVkMjU1MTlWZXJpZmljYXRpb25LZXkyMDE4In0seyJpZCI6Ino2TFNtU0pncVRwNlJHcGk2SEZlIiwicHVibGljS2V5SndrIjp7ImNydiI6IlgyNTUxOSIsImt0eSI6Ik9LUCIsIngiOiJrUWMtYW1FTG9wNnFpYWJmaEoxUEwwZXRhNWJQeFVBM3pwWkpHTmNsNHhNIn0sInB1cnBvc2VzIjpbImtleUFncmVlbWVudCJdLCJ0eXBlIjoiWDI1NTE5S2V5QWdyZWVtZW50S2V5MjAxOSJ9XSwic2VydmljZXMiOlt7ImlkIjoiZGlkY29tbSIsInNlcnZpY2VFbmRwb2ludCI6Imh0dHBzOi8vc2FuZGJveC1hcGkuZ2V0cG9ydGFibC5jb20vYXBpL3YxL2FnZW50L3VzZXItNDdkOTg4ZWYtMTdkNi00YTVjLWIxM2UtZjViNzg5YmQwYTU4L2RpZC1jb21tIiwidHlwZSI6IkRJRENvbW1NZXNzYWdpbmcifV19fV0sInVwZGF0ZUNvbW1pdG1lbnQiOiJFaUJKMkNYTFp3bEl0UmhRQTlTb2FSVUdzMUhnaS10N2pHUlV5TFozYnhlc3dBIn0sInN1ZmZpeERhdGEiOnsiZGVsdGFIYXNoIjoiRWlBOVdKa0lKLWxMcFVsMWFrMFdkTFNUZFcyam84MHJieVhhdENIYUp6UmV0dyIsInJlY292ZXJ5Q29tbWl0bWVudCI6IkVpQ0VsalNCcTZfX1FJOW1ScTAxYzZDeUdnWS1BcWlMeGVla3ozdy1kMkM0SkEifX0",
"shortUserDID": "did:ion:test:EiBwQwss4w0fEUpdFrhpn5Njp0a-LxMn6jvhP3wSirqAiA",
"userLogins": 2,
"userLastLoginAt": "2023-09-11T19:46:55.223Z",
"settings": {
"isSyncOn": true
},
"datapointsFlat": {
"userStatus": "Registered",
"userId": "bagaaieraf4tmk2khwmxkhi5to42eooo3mz5ytytrwqikjo54wmtzaj24skja",
"userDID": "did:ion:test:EiBwQwss4w0fEUpdFrhpn5Njp0a-LxMn6jvhP3wSirqAiA:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJ6VUM3RURqeWY5MlZtVU1KVmN2NiIsInB1YmxpY0tleUp3ayI6eyJjcnYiOiJCTFMxMjM4MV9HMiIsImt0eSI6IkVDIiwieCI6InBwUjRJVlM0VEE0S2E0Nk0zSWhPaDZ5WVFWcVVSVUhDNFlFcXNhNlZfRUppc0Z1UmpVQk0yOFpGN2dTczBvV0tBZm03T1UzdGZMczdOZnlQVHNRUHJMQ25wT21Wek0wczNsdlA0d1NzMXBCd2NhMjlDZEthSTRyVlVIakp4RFNDIn0sInB1cnBvc2VzIjpbImF1dGhlbnRpY2F0aW9uIiwiYXNzZXJ0aW9uTWV0aG9kIl0sInR5cGUiOiJCbHMxMjM4MUcyS2V5MjAyMCJ9LHsiaWQiOiJ6Nk1rdGFubWtQaWtmdTg0YnMxYiIsInB1YmxpY0tleUp3ayI6eyJjcnYiOiJFZDI1NTE5Iiwia3R5IjoiT0tQIiwieCI6IjBmRnM5Q0ZNOFlKTlNmSDRYanJmak12eFJqWTBfaURzYU51WFZEc0FmQW8ifSwicHVycG9zZXMiOlsiYXNzZXJ0aW9uTWV0aG9kIiwiYXV0aGVudGljYXRpb24iXSwidHlwZSI6IkVkMjU1MTlWZXJpZmljYXRpb25LZXkyMDE4In0seyJpZCI6Ino2TFNtU0pncVRwNlJHcGk2SEZlIiwicHVibGljS2V5SndrIjp7ImNydiI6IlgyNTUxOSIsImt0eSI6Ik9LUCIsIngiOiJrUWMtYW1FTG9wNnFpYWJmaEoxUEwwZXRhNWJQeFVBM3pwWkpHTmNsNHhNIn0sInB1cnBvc2VzIjpbImtleUFncmVlbWVudCJdLCJ0eXBlIjoiWDI1NTE5S2V5QWdyZWVtZW50S2V5MjAxOSJ9XSwic2VydmljZXMiOlt7ImlkIjoiZGlkY29tbSIsInNlcnZpY2VFbmRwb2ludCI6Imh0dHBzOi8vc2FuZGJveC1hcGkuZ2V0cG9ydGFibC5jb20vYXBpL3YxL2FnZW50L3VzZXItNDdkOTg4ZWYtMTdkNi00YTVjLWIxM2UtZjViNzg5YmQwYTU4L2RpZC1jb21tIiwidHlwZSI6IkRJRENvbW1NZXNzYWdpbmcifV19fV0sInVwZGF0ZUNvbW1pdG1lbnQiOiJFaUJKMkNYTFp3bEl0UmhRQTlTb2FSVUdzMUhnaS10N2pHUlV5TFozYnhlc3dBIn0sInN1ZmZpeERhdGEiOnsiZGVsdGFIYXNoIjoiRWlBOVdKa0lKLWxMcFVsMWFrMFdkTFNUZFcyam84MHJieVhhdENIYUp6UmV0dyIsInJlY292ZXJ5Q29tbWl0bWVudCI6IkVpQ0VsalNCcTZfX1FJOW1ScTAxYzZDeUdnWS1BcWlMeGVla3ozdy1kMkM0SkEifX0",
"shortUserDID": "did:ion:test:EiBwQwss4w0fEUpdFrhpn5Njp0a-LxMn6jvhP3wSirqAiA",
"userLogins": 2,
"userLastLoginAt": "2023-09-11T19:46:55.225Z",
"firstName": "Liz",
"lastName": "Lemon",
"birthDate": "1980-03-06",
"nationality": "US",
"socialSecurityNumber": "123456789",
"residentialAddressStreetAddress": "11 Riverside Dr",
"residentialAddressLocality": "New York",
"residentialAddressRegion": "NY",
"residentialAddressPostalCode": "10024",
"residentialAddressCountry": "US",
"emailAddress": "liz.lemon@rock.com",
"phoneNumber": "x-xxx-xxx-xxxx"
},
"syncContext": {
"datapointsSynced": {
"firstName": "Liz",
"lastName": "Lemon",
"birthDate": "1980-03-06",
"nationality": "US",
"socialSecurityNumber": "123456789",
"residentialAddress": {
"streetAddress": "11 Riverside Dr",
"locality": "New York",
"postalCode": "10024",
"region": "NY",
"country": "US"
},
"emailAddress": "liz.lemon@rock.com",
"phoneNumber": "x-xxx-xxx-xxxx"
},
"datapointsLatest": {
"firstName": "Liz",
"lastName": "Lemon",
"birthDate": "1980-03-06",
"nationality": "US",
"socialSecurityNumber": "123456789",
"residentialAddress": {
"streetAddress": "11 Riverside Dr",
"locality": "New York",
"postalCode": "10024",
"region": "NY",
"country": "US"
},
"emailAddress": "liz.lemon@rock.com",
"phoneNumber": "x-xxx-xxx-xxxx"
}
},
"createdAt": "2023-09-11T19:45:32.858Z",
"updatedAt": "2023-09-12T23:28:20.841Z"
}
Get user datapoints
Returns datapoints of a user.
curl -X GET "https://api.getportabl.com/api/v1/provider/users/:user-id/datapoints" /
-H "Authorization: Bearer <TOKEN>"
{
"userDID": "did:ion:test:EiCpDU_gXjbOAI4PaKAkdiTvo-J1Qkx-tZ3bQ8f2BpEIJw",
"firstName": "Liz",
"lastName": "Lemon",
"birthDate": "1970-11-27",
"nationality": "US",
"socialSecurityNumber": "123-45-5678",
"residentialAddressStreetAddress": "168 Riverside Drive, APT 2F",
"residentialAddressLocality": "New York",
"residentialAddressPostalCode": "10024",
"residentialAddressRegion": "NY",
"residentialAddressountry": "US",
"emailAddress": "liz.lemon@rock.com",
"phoneNumber": "x-xxx-xxx-xxxx"
}
Update user datapoints
Patches datapoints of a user. By default, patching user datapoints will start the data synchronization process. To disable this behaviour and control when data synchronization should start you can provide "autoSync=false" in your query params.
Option | Type | Description |
---|---|---|
datapoints | { "firstName": "Liz", "lastName": "Lemon", "birthDate": "1970-11-28", "nationality": "US", "socialSecurityNumber": "123-45-6789", "residentialAddressCountry": "US", "residentialAddressLocality": "New York", "residentialAddressPostalCode": "10024", "residentialAddressRegion": "NY", "residentialAddressStreetAddress": "11 Riverside Dr", "emailAddress": "liz.lemon@rock.com", "phoneNumber": "+1234567890" } | User datapoints to update |
curl -X PUT "https://api.getportabl.com/api/v1/provider/users/:user-id/datapoints" /
-H "Authorization: Bearer <TOKEN>"/
--data-raw {
"datapoints": "<YOUR datapoints>"
}
{
"firstName": "Liz",
"lastName": "Lemon",
"birthDate": "1970-11-28",
"nationality": "US",
"socialSecurityNumber": "123-45-6789",
"residentialAddressCountry": "US",
"residentialAddressLocality": "New York",
"residentialAddressPostalCode": "10024",
"residentialAddressRegion": "NY",
"residentialAddressStreetAddress": "11 Riverside Dr",
"emailAddress": "liz.lemon@rock.com",
"phoneNumber": "+1234567890"
}
Create user invitation
Creates an invitation url in case a secure session a.k.a. Data Pipe with a given user has not yet been established. This invitation shall be consented by a given user in order to establish a secure session. Once established, this session can be used to process data synchronization a.k.a. Data Sync.
If a user session is already establish then "isSessionEstablished" will be set to true, and no invitation url will be returned.
curl -X undefined "https://api.getportabl.com/api/v1/provider/users/:user-id/invite" /
-H "Authorization: Bearer <TOKEN>"
{
"isSessionEstablished": false,
"isLinked": false,
"invitationUrl": "https://api.getportabl.com/connect?_oob=eyJib2R5Ijp7ImFjY2VwdCI6WyJkaWRjb21tL3YyIl0sImdvYWxfY29kZSI6IlN5bmMiLCJnb2FsIjoiU3luYyIsInNlcnZpY2VzIjpbeyJpZCI6ImRpZDprZXk6ejZNa3RzRnlINkZxdTRtZGhvdktvSFE5akFrSkpoZFBkQVRrNEVRR0d0OGVpR3EyI0RJRENvbW1NZXNzYWdpbmciLCJ0eXBlIjoiRElEQ29tbU1lc3NhZ2luZyIsInNlcnZpY2VFbmRwb2ludCI6Imh0dHBzOi8vcG9ydGFibC1iZW4tYXBpLm5ncm9rLmlvL2FwaS92MS9hZ2VudC9wcm92aWRlci1hNWU5OGIwYS00MjAxLTQ4MDYtYjQ5Ni1iNWY3ZWQwNzRiNzQvZGlkLWNvbW0iLCJyZWNpcGllbnRLZXlzIjpbImRpZDprZXk6ejZNa3RzRnlINkZxdTRtZGhvdktvSFE5akFrSkpoZFBkQVRrNEVRR0d0OGVpR3EyI3o2TFNoNXBGdlJvRlZ4UTRDeUZqQWt5OUh5RFdKWnpCb2Y5d2gybTg1WVhWRFU3ZyJdfV19LCJpZCI6ImFkZDA0YTk3LTE2MWItNDQ4YS05Yjg5LTEwYWU1YjIyMGMyNiIsInR5cCI6ImFwcGxpY2F0aW9uL2RpZGNvbW0tcGxhaW4ranNvbiIsInR5cGUiOiJodHRwczovL2RpZGNvbW0ub3JnL291dC1vZi1iYW5kLzIuMC9pbnZpdGF0aW9uIiwiZnJvbSI6ImRpZDprZXk6ejZNa3RzRnlINkZxdTRtZGhvdktvSFE5akFrSkpoZFBkQVRrNEVRR0d0OGVpR3EyIiwidGhpZCI6ImFkZDA0YTk3LTE2MWItNDQ4YS05Yjg5LTEwYWU1YjIyMGMyNiIsImNyZWF0ZWRfdGltZSI6MTY4MjM0OTM5MCwiZXhwaXJlc190aW1lIjoxNjgyMzQ5NDUwfQ"
}
Start user data synchronization (manual trigger)
Manually kicks-off data synchronization process over a previously established secure session. The process involves user authentication, issuance and delivery of a verifiable credential which includes user datapoints. This can be useful for providers with distributed systems that do not want to rely on an automatic data synchronization and have greater control. By using given api endpoint you can manually trigger a synchronization for datapoints which were previously patched with a "autoSync" flag set to false that prevented those datapoints from being synced automatically.
curl -X POST "https://api.getportabl.com/api/v1provider/users/:user-id/sync" /
-H "Authorization: Bearer <TOKEN>"
202