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.

BODY
OptionTypeDescription
clientIdstringYour Portabl Core API Client ID
clientSecretstringYour Portabl Core API Client Secret
POSThttps://api.getportabl.com/api/v1/auth/token
curl -X POST "https://api.getportabl.com/api/v1/auth/token" / 
--data-raw {
  "clientId": "<YOUR clientId>",
  "clientSecret": "<YOUR clientSecret>"
}
RESPONSE
{
    "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-datapoints 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.

GEThttps://api.getportabl.com/api/v1/provider/users
curl -X GET "https://api.getportabl.com/api/v1/provider/users" / 
-H "Authorization: Bearer <TOKEN>"
RESPONSE
{
  "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": "USA",
        "socialSecurityNumber": "123456789",
        "residentialAddressStreetAddress": "160 Riverside Dr #3B",
        "residentialAddressLocality": "New York",
        "residentialAddressRegion": "NY",
        "residentialAddressPostalCode": "10024",
        "residentialAddressCountry": "USA",
        "emailAddress": "liz.lemon@rock.com",
        "phoneNumber": "x-xxx-xxx-xxxx"
      },
      "syncContext": {
        "datapointsSynced": {
          "firstName": "Liz",
          "lastName": "Lemon",
          "birthDate": "1980-03-06",
          "nationality": "USA",
          "socialSecurityNumber": "123456789",
          "residentialAddress": {
            "streetAddress": "160 Riverside Dr #3B",
            "locality": "New York",
            "postalCode": "10024",
            "region": "NY",
            "country": "USA"
          },
          "emailAddress": "liz.lemon@rock.com",
          "phoneNumber": "x-xxx-xxx-xxxx"
        },
        "datapointsLatest": {
          "firstName": "Liz",
          "lastName": "Lemon",
          "birthDate": "1980-03-06",
          "nationality": "USA",
          "socialSecurityNumber": "123456789",
          "residentialAddress": {
            "streetAddress": "160 Riverside Dr #3B",
            "locality": "New York",
            "postalCode": "10024",
            "region": "NY",
            "country": "USA"
          },
          "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.

GEThttps://api.getportabl.com/api/v1/provider/users/:user-id
curl -X GET "https://api.getportabl.com/api/v1/provider/users/:user-id" / 
-H "Authorization: Bearer <TOKEN>"
RESPONSE
{
  "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": "USA",
    "socialSecurityNumber": "123456789",
    "residentialAddressStreetAddress": "160 Riverside Dr #3B",
    "residentialAddressLocality": "New York",
    "residentialAddressRegion": "NY",
    "residentialAddressPostalCode": "10024",
    "residentialAddressCountry": "USA",
    "emailAddress": "liz.lemon@rock.com",
    "phoneNumber": "x-xxx-xxx-xxxx"
  },
  "syncContext": {
    "datapointsSynced": {
      "firstName": "Liz",
      "lastName": "Lemon",
      "birthDate": "1980-03-06",
      "nationality": "USA",
      "socialSecurityNumber": "123456789",
      "residentialAddress": {
        "streetAddress": "160 Riverside Dr #3B",
        "locality": "New York",
        "postalCode": "10024",
        "region": "NY",
        "country": "USA"
      },
      "emailAddress": "liz.lemon@rock.com",
      "phoneNumber": "x-xxx-xxx-xxxx"
    },
    "datapointsLatest": {
      "firstName": "Liz",
      "lastName": "Lemon",
      "birthDate": "1980-03-06",
      "nationality": "USA",
      "socialSecurityNumber": "123456789",
      "residentialAddress": {
        "streetAddress": "160 Riverside Dr #3B",
        "locality": "New York",
        "postalCode": "10024",
        "region": "NY",
        "country": "USA"
      },
      "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

GEThttps://api.getportabl.com/api/v1/provider/users/:user-id/sync-context
curl -X GET "https://api.getportabl.com/api/v1/provider/users/:user-id/sync-context" / 
-H "Authorization: Bearer <TOKEN>"
RESPONSE
{
  "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.

BODY
OptionTypeDescription
settings{ "isSyncOn": true }User data which can include settings.
PUThttps://api.getportabl.com/api/v1/provider/users/:user-id
curl -X PUT "https://api.getportabl.com/api/v1/provider/users/:user-id" / 
-H "Authorization: Bearer <TOKEN>"/ 
--data-raw {
  "settings": "<YOUR settings>"
}
RESPONSE
{
  "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": "USA",
    "socialSecurityNumber": "123456789",
    "residentialAddressStreetAddress": "160 Riverside Dr #3B",
    "residentialAddressLocality": "New York",
    "residentialAddressRegion": "NY",
    "residentialAddressPostalCode": "10024",
    "residentialAddressCountry": "USA",
    "emailAddress": "liz.lemon@rock.com",
    "phoneNumber": "x-xxx-xxx-xxxx"
  },
  "syncContext": {
    "datapointsSynced": {
      "firstName": "Liz",
      "lastName": "Lemon",
      "birthDate": "1980-03-06",
      "nationality": "USA",
      "socialSecurityNumber": "123456789",
      "residentialAddress": {
        "streetAddress": "160 Riverside Dr #3B",
        "locality": "New York",
        "postalCode": "10024",
        "region": "NY",
        "country": "USA"
      },
      "emailAddress": "liz.lemon@rock.com",
      "phoneNumber": "x-xxx-xxx-xxxx"
    },
    "datapointsLatest": {
      "firstName": "Liz",
      "lastName": "Lemon",
      "birthDate": "1980-03-06",
      "nationality": "USA",
      "socialSecurityNumber": "123456789",
      "residentialAddress": {
        "streetAddress": "160 Riverside Dr #3B",
        "locality": "New York",
        "postalCode": "10024",
        "region": "NY",
        "country": "USA"
      },
      "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.

GEThttps://api.getportabl.com/api/v1/provider/users/:user-id/datapoints
curl -X GET "https://api.getportabl.com/api/v1/provider/users/:user-id/datapoints" / 
-H "Authorization: Bearer <TOKEN>"
RESPONSE
{
  "userDID": "did:ion:test:EiCpDU_gXjbOAI4PaKAkdiTvo-J1Qkx-tZ3bQ8f2BpEIJw",
  "firstName": "Liz",
  "lastName": "Lemon",
  "birthDate": "1970-11-27",
  "nationality": "USA",
  "socialSecurityNumber": "123-45-5678",
  "residentialAddressStreetAddress": "160 Riverside Dr #3B",
  "residentialAddressLocality": "New York",
  "residentialAddressPostalCode": "10024",
  "residentialAddressRegion": "NY",
  "residentialAddressountry": "USA",
  "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.

BODY
OptionTypeDescription
datapoints{ "firstName": "Liz", "lastName": "Lemon", "birthDate": "1970-11-28", "nationality": "USA", "socialSecurityNumber": "123-45-6789", "residentialAddressCountry": "USA", "residentialAddressLocality": "New York", "residentialAddressPostalCode": "10024", "residentialAddressRegion": "NY", "residentialAddressStreetAddress": "160 Riverside Dr #3B", "emailAddress": "liz.lemon@rock.com", "phoneNumber": "+1234567890" }User datapoints to update
PUThttps://api.getportabl.com/api/v1/provider/users/:user-id/datapoints
curl -X PUT "https://api.getportabl.com/api/v1/provider/users/:user-id/datapoints" / 
-H "Authorization: Bearer <TOKEN>"/ 
--data-raw {
  "datapoints": "<YOUR datapoints>"
}
RESPONSE
{
  "firstName": "Liz",
  "lastName": "Lemon",
  "birthDate": "1970-11-28",
  "nationality": "USA",
  "socialSecurityNumber": "123-45-6789",
  "residentialAddressCountry": "USA",
  "residentialAddressLocality": "New York",
  "residentialAddressPostalCode": "10024",
  "residentialAddressRegion": "NY",
  "residentialAddressStreetAddress": "160 Riverside Dr #3B",
  "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.

https://api.getportabl.com/api/v1/provider/users/:user-id/invite
curl -X undefined "https://api.getportabl.com/api/v1/provider/users/:user-id/invite" / 
-H "Authorization: Bearer <TOKEN>"
RESPONSE
{
  "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.

POSThttps://api.getportabl.com/api/v1/provider/users/:user-id/sync
curl -X POST "https://api.getportabl.com/api/v1/provider/users/:user-id/sync" / 
-H "Authorization: Bearer <TOKEN>"
RESPONSE
202