HDD: 20GB free space.
64-bit kernel and CPU support for virtualization.
Software:
Linux 18.04 LTS or Higher, Windows 10 or HigherDocker for Linux or Windows
Overview
This guide provides a comprehensive explanation of how to effectively interact with the MyDataCoin ecosystem. To integrate successfully, you will need to set up an endpoint that can receive POST requests, which will, in turn, return the response described in the sections below.
Install Docker
Please select the appropriate link for your operation system and follow the provided instructions to install Docker:
E: Package 'docker-ce' has no installation candidate
E: Unable to locate package docker-ce-cli
E: Unable to locate package containerd.io
E: Couldn't find any package by glob 'containerd.io'
E: Couldn't find any package by regex 'containerd.io'
E: Unable to locate package docker-buildx-plugin
E: Unable to locate package docker-compose-plugin
To make sure you obtain the most updated stable version of Docker Compose, you’ll download this software from its official Github repository.
First, confirm the latest version available in their releases page. At the time of this writing, the most current stable version is 1.29.2.
The following command will download the 1.29.2 release and save the executable file at /usr/local/bin/docker-compose, which will make this software globally accessible as docker-compose:
Next, set the correct permissions so that the docker-compose command is executable:
sudochmod+x/usr/local/bin/docker-compose
To verify that the installation was successful, you can run:
docker-compose--version
Setup Docker
Before you begin, make sure that you have an Secret Token. You should have received this token after completing the registration process, as described here.
After Docker successfully installed, you need to download docker-compose.yml from our official repository:
After you made changes, save the file and run the following command in terminal:
docker-compose up -d
Be sure, that port 8000 is open and ready for inbound connections. To change the settings, run the command: sudo ufw allow 8000/tcp
Upload a DataSet
Please ensure that you create a DataProvider entity in the Marketplace before uploading any datasets. To proceed, please provide your company information here.
Important! The data you upload will not be transferred to us or any third parties; it will be stored in your Docker container.
To prepare the data monetization process, you need to prepare a JSON file with data in the format User Model shown below.
After docker successfully started, you need to open browser and input the following url: http://your_server_address:8000/upload, then you'll see following page:
Put your Secret Token in the Secret Token field and give your dataset a name, choose a dataset you've prepared and press Upload.
Now you ready to go! Please feel free to ask any questions about integration process. Send us email to as@mydatacoin.io
Unique identifier of record, you can use your database identifier
firstName
string
lastName
string
dateOfBirth
DateTime
Format(1999-09-09T00:00:00Z)
gender
int
Enum
email
string
phone
string
maritalStatus
int
income
decimal
Income refers to the amount of money a user earns within a certain period of time.
BasicData
Parameter
Data Type
Nullable
interests
string[]
languages
string[]
religionViews
string[]
politicalViews
string[]
Contacts
Parameter
Data Type
mobilePhone
string
address
string
linkedAccounts
string[]
website
string
WorkAndEducation
Parameter
Data Type
Nullable
placeOfWork
string
skills
string[]
university
string
faculty
string
PlaceOfResidence
Parameter
Data Type
Nullable
currentCity
string
birthPlace
string
otherCities
string[]
PersonalInterests
Parameter
Data Type
Nullable
breifDescription
string
hobby
string[]
sport
string[]
DeviceInformation
Parameter
Data Type
Comments
Nullable
deviceName
string
Device used to access the internet
deviceId
string
DeviceId is a parameter that refers to a unique identifier for a device.
operatingSystem
string
Operating system and its version
displayResolution
string
Screen resolution
browser
string
Used browser and its version
iSP
string
Information about the internet service provider and type of connection
adBlock
bool
Presence of ad blockers
Cookies
Parameter
Data Type
Comment
Nullable
id
string
User identifier
sessionState
string
Session state
language
string
Language settings
region
string
Preferred region settings
recentPages
string[]
Recently visited pages
shoppingCart
Shopping cart items
ShoppingCart
Parameter
Data Type
Comments
productId
string
unique identifier of the product in the shopping cart
productName
string
name of the product in the shopping cart
productPrice
string
price of the product in the shopping cart
quantity
string
the number of units of a product in the shopping cart
subTotal
string
the total cost of a particular product in the shopping cart (quantity x price)
total
string
the total cost of all products in the shopping cart
couponCode
string
any applied discounts or coupons to the shopping cart
shippingInformation
string
shipping method and cost for the items in the shopping cart
taxInformation
string
applicable taxes for the items in the shopping cart
MaritalStatus
Marital status is a characteristic that reflects a person's marital status. Depending on the country and culture, there are different categories of marital statuses. Some of them may include:
Value
Single
Single - a person who is not married and does not have an official partner.
Married
Married - a person who is in an official marriage.
Divorced
Divorced - a person who was in an official marriage but got divorced.
Bachelor
Bachelor/Spinster - a person who lives alone, regardless of their marital status.
Widow
Widower/Widow - a person who lost their spouse.
Cohabiting
Cohabiting - two people who live together but are not in an official marriage.
Separated
Separated - a person who was in an official marriage but is in the process of getting divorced.
Living_Separately
Living separately - a person who lives separately from their family, for example, in a dormitory or student room.
Remarried
Remarried - spouses who have already been in an official marriage and have remarried.
Add Records
These two methods serve to update and add users, add user api/v1/insert serves so that you do not have to form json every time and fill it with the /upload method, instead you can simply write a function that will be executed when you add a new user to the database, that is, you simply add to yours and simultaneously make a request to our database data, in the future this will free you from the constant updating of data.
there should be an authorization token that was entered in docker-compose.yml
Request Body
Name
Type
Description
profile*
profile
basicData
basicData
сontacts
contacts
workAndEducation
workdAndEducation
deviceInformation
deviceInformation
personalInterests
personalInterests
placeOfResidence
placeOfResidence
cookies
cookies
{
"success": "profile add successfully"
}
# error occurs only when recordId already exists in the database
{
"error": "this user in already have in database"
}
# Check if the provided token in the 'Authorization' header does not match the expected 'auth_token'.
# If it doesn't match, return an error response indicating "Invalid token".
# The status code is set to 401 (Unauthorized).
{
'error': 'Invalid token',
'details': "The token provided in the 'Authorization' header is invalid"
}
# Check if the 'Content-Type' header of the request is not set to 'application/json'.
# If it's not set correctly, return an error response indicating "Unsupported Media Type".
# The status code is set to 415 (Unsupported Media Type).
{
'error': 'Unsupported Media Type',
'details': "The 'Content-Type' header must be set to 'application/json'"
}
"An error occurred while processing the data: {}" and error in brackets
// this endpoint is designed // to update the database singly, // this solves the problem, let's say that you have new users, and // in order not to form and then load json into the database each time, // you can simultaneously throw a request to our database at the time of filling // your database using api/v1/insert method// this is an example of an object// that should be sent to our endpoint, api/v1/insert// data = {// "profile": {// "recordId": "54",// "firstName": "Alex",// "lastName": "Vishnevski",// "dateOfBirth": "2002-11-09T00:00:00Z",// "gender": 1,// "email": ["amaymon02@mai8.ru"],// "phone": ["+996222116992", "+996555848652"],// "maritalStatus": 0,// "income": 0// },// "basicData": {// "interests": ["hobbyhorsing","boxing"],// "languages": ["english", "indian"],// "religionViews": ["Atheist","Agnostik"],// "politicalViews": ["liberal"]// },// "contacts": {// "mobilePhone": "IPHONE13",// "address": "avenue 13",// "linkedAccounts": ["https://www.tiktok.com/@angiejoliefan?is_from_webapp=1&sender_device=pc"],// "website": "http://flibusta.site/b/668844/read"// },// "workAndEducation": {// "placeOfWork": "MydataCoin",// "skills": ["Attractive"],// "university": "KNU",// "faculty": "ФИиИт"// },// "placeOfResidence": {// "currentCity": "New-York",// "birthPlace": "bishkek",// "otherCities": ["Astana","Peru","Amsterdam"]// },// "personalInterests": {// "briefDescription": "Smart",// "hobby": ["biohacking"],// "sport": ["boxing"]// },// "deviceInformation": {// "deviceName": "Mac m2 pro",// "deviceId": "21313-asdasd-12313",// "operatingSystem": "windows",// "displayResolution": "999X999",// "browser": "internet explorer",// "iSP": "megaCom provider",// "adBlock": True// },// "cookies": {// "sessionState": "Active",// "language": "Russia",// "region": "chui area",// "recentPages": ["https://ru.wikipedia.org/wiki/%D0%A5%D0%BE%D0%B1%D0%B1%D0%B8%D1%85%D0%BE%D1%80%D1%81%D0%B8%D0%BD%D0%B3"],// "shoppingCart": [// {// "productId": "123-asda-12312",// "productName": "dragon",// "productPrice": 100000000,// "quantity": 1,// "subTotal": 120000,// "total": 20,// "couponCode": "free-dragondotpy",// "shippingInformation": "st.Avenue 13",// "taxInformation": "12.23"// },// {// "productId": "123-qwe-123",// "productName": "dragon-wife",// "productPrice": 1,// "quantity": 1,// "subTotal": 1,// "total": 2,// "couponCode": "free-incubator",// "shippingInformation": "st.Avenue 13",// "taxInformation": "0.01"// }// ]// }// }publicclassInsertDataExample {publicstaticvoidinsert(Object data) {HttpClient httpClient =HttpClient.newHttpClient();String url ="http://your-server-ip:8000/api/v1/insert";// here you have to pass your authorization token which you specified // in docker-compose.yml file in environment variablesString authToken ="your_auth_token_here";Map<String,String> headers =newHashMap<>();headers.put("Authorization", authToken);headers.put("Content-Type","application/json");HttpRequest request =HttpRequest.newBuilder().uri(URI.create(url)).headers(headers.entrySet().stream().map(entry ->entry.getKey() +":"+entry.getValue()).toArray(String[]::new)).POST(HttpRequest.BodyPublishers.ofString(data)).build();try {HttpResponse<String> response =httpClient.send(request,HttpResponse.BodyHandlers.ofString());if (response.statusCode() ==200) {System.out.println("Data inserted successfully: "+response.body()); } else {System.out.println("Error inserting data: "+response.body()); } } catch (IOException | InterruptedException e) {e.printStackTrace(); } }}
// this endpoint is designed // to update the database singly, // this solves the problem, let's say that you have new users, and // in order not to form and then load json into the database each time, // you can simultaneously throw a request to our database at the time of filling // your database using api/v1/insert method// this is an example of an object// that should be sent to our endpoint, api/v1/insert// data = {// "profile": {// "recordId": "54",// "firstName": "Alex",// "lastName": "Vishnevski",// "dateOfBirth": "2002-11-09T00:00:00Z",// "gender": 1,// "email": ["amaymon02@mai8.ru"],// "phone": ["+996222116992", "+996555848652"],// "maritalStatus": 0,// "income": 0// },// "basicData": {// "interests": ["hobbyhorsing","boxing"],// "languages": ["english", "indian"],// "religionViews": ["Atheist","Agnostik"],// "politicalViews": ["liberal"]// },// "contacts": {// "mobilePhone": "IPHONE13",// "address": "avenue 13",// "linkedAccounts": ["https://www.tiktok.com/@angiejoliefan?is_from_webapp=1&sender_device=pc"],// "website": "http://flibusta.site/b/668844/read"// },// "workAndEducation": {// "placeOfWork": "MydataCoin",// "skills": ["Attractive"],// "university": "KNU",// "faculty": "ФИиИт"// },// "placeOfResidence": {// "currentCity": "New-York",// "birthPlace": "bishkek",// "otherCities": ["Astana","Peru","Amsterdam"]// },// "personalInterests": {// "briefDescription": "Smart",// "hobby": ["biohacking"],// "sport": ["boxing"]// },// "deviceInformation": {// "deviceName": "Mac m2 pro",// "deviceId": "21313-asdasd-12313",// "operatingSystem": "windows",// "displayResolution": "999X999",// "browser": "internet explorer",// "iSP": "megaCom provider",// "adBlock": True// },// "cookies": {// "sessionState": "Active",// "language": "Russia",// "region": "chui area",// "recentPages": ["https://ru.wikipedia.org/wiki/%D0%A5%D0%BE%D0%B1%D0%B1%D0%B8%D1%85%D0%BE%D1%80%D1%81%D0%B8%D0%BD%D0%B3"],// "shoppingCart": [// {// "productId": "123-asda-12312",// "productName": "dragon",// "productPrice": 100000000,// "quantity": 1,// "subTotal": 120000,// "total": 20,// "couponCode": "free-dragondotpy",// "shippingInformation": "st.Avenue 13",// "taxInformation": "12.23"// },// {// "productId": "123-qwe-123",// "productName": "dragon-wife",// "productPrice": 1,// "quantity": 1,// "subTotal": 1,// "total": 2,// "couponCode": "free-incubator",// "shippingInformation": "st.Avenue 13",// "taxInformation": "0.01"// }// ]// }// }functioninsertData(data) {consturl='http://your-server-ip:8000/api/v1/insert';// here you have to pass your authorization token which you specified // in docker-compose.yml file in environment variablesconstheaders= {'Authorization':'your_auth_token_here','Content-Type':'application/json' };axios.post(url, data, { headers }).then(response => {constresponseData=response.data;if (response.status ===200) {console.log('Data inserted successfully:', responseData); } else {console.log('Error inserting data:', responseData); } }).catch(error => {console.error('Request error:', error); });}
# this endpoint is designed # to update the database singly, # this solves the problem, let's say that you have new users, and # in order not to form and then load json into the database each time, # you can simultaneously throw a request to our database at the time of filling # your database using api/v1/insert method# this is an example of an object# that should be sent to our endpoint, api/v1/insert# data = {# "profile": {# "recordId": "54",# "firstName": "Alex",# "lastName": "Vishnevski",# "dateOfBirth": "2002-11-09T00:00:00Z",# "gender": 1,# "email": ["amaymon02@mai8.ru"],# "phone": ["+996222116992", "+996555848652"],# "maritalStatus": 0,# "income": 0# },# "basicData": {# "interests": ["hobbyhorsing","boxing"],# "languages": ["english", "indian"],# "religionViews": ["Atheist","Agnostik"],# "politicalViews": ["liberal"]# },# "contacts": {# "mobilePhone": "IPHONE13",# "address": "avenue 13",# "linkedAccounts": ["https://www.tiktok.com/@angiejoliefan?is_from_webapp=1&sender_device=pc"],# "website": "http://flibusta.site/b/668844/read"# },# "workAndEducation": {# "placeOfWork": "MydataCoin",# "skills": ["Attractive"],# "university": "KNU",# "faculty": "ФИиИт"# },# "placeOfResidence": {# "currentCity": "New-York",# "birthPlace": "bishkek",# "otherCities": ["Astana","Peru","Amsterdam"]# },# "personalInterests": {# "briefDescription": "Smart",# "hobby": ["biohacking"],# "sport": ["boxing"]# },# "deviceInformation": {# "deviceName": "Mac m2 pro",# "deviceId": "21313-asdasd-12313",# "operatingSystem": "windows",# "displayResolution": "999X999",# "browser": "internet explorer",# "iSP": "megaCom provider",# "adBlock": True# },# "cookies": {# "sessionState": "Active",# "language": "Russia",# "region": "chui area",# "recentPages": ["https://ru.wikipedia.org/wiki/%D0%A5%D0%BE%D0%B1%D0%B1%D0%B8%D1%85%D0%BE%D1%80%D1%81%D0%B8%D0%BD%D0%B3"],# "shoppingCart": [# {# "productId": "123-asda-12312",# "productName": "dragon",# "productPrice": 100000000,# "quantity": 1,# "subTotal": 120000,# "total": 20,# "couponCode": "free-dragondotpy",# "shippingInformation": "st.Avenue 13",# "taxInformation": "12.23"# },# {# "productId": "123-qwe-123",# "productName": "dragon-wife",# "productPrice": 1,# "quantity": 1,# "subTotal": 1,# "total": 2,# "couponCode": "free-incubator",# "shippingInformation": "st.Avenue 13",# "taxInformation": "0.01"# }# ]# }# }definsert_data(data): url ='http://your-server-ip:8000/api/v1/insert'# here you have to pass your authorization token which you specified # in docker-compose.yml file in environment variables headers ={'Authorization':'your_auth_token_here','Content-Type':'application/json'}try: response = requests.post(url, json=data, headers=headers) response_data = response.json()if response.status_code ==200:print("Data inserted successfully:", response_data)else:print("Error inserting data:", response_data)except requests.exceptions.RequestException as e:print("Request error:", e)
// this endpoint is designed // to update the database singly, // this solves the problem, let's say that you have new users, and // in order not to form and then load json into the database each time, // you can simultaneously throw a request to our database at the time of filling // your database using api/v1/insert method// this is an example of an object// that should be sent to our endpoint, api/v1/insert// data = {// "profile": {// "recordId": "54",// "firstName": "Alex",// "lastName": "Vishnevski",// "dateOfBirth": "2002-11-09T00:00:00Z",// "gender": 1,// "email": ["amaymon02@mai8.ru"],// "phone": ["+996222116992", "+996555848652"],// "maritalStatus": 0,// "income": 0// },// "basicData": {// "interests": ["hobbyhorsing","boxing"],// "languages": ["english", "indian"],// "religionViews": ["Atheist","Agnostik"],// "politicalViews": ["liberal"]// },// "contacts": {// "mobilePhone": "IPHONE13",// "address": "avenue 13",// "linkedAccounts": ["https://www.tiktok.com/@angiejoliefan?is_from_webapp=1&sender_device=pc"],// "website": "http://flibusta.site/b/668844/read"// },// "workAndEducation": {// "placeOfWork": "MydataCoin",// "skills": ["Attractive"],// "university": "KNU",// "faculty": "ФИиИт"// },// "placeOfResidence": {// "currentCity": "New-York",// "birthPlace": "bishkek",// "otherCities": ["Astana","Peru","Amsterdam"]// },// "personalInterests": {// "briefDescription": "Smart",// "hobby": ["biohacking"],// "sport": ["boxing"]// },// "deviceInformation": {// "deviceName": "Mac m2 pro",// "deviceId": "21313-asdasd-12313",// "operatingSystem": "windows",// "displayResolution": "999X999",// "browser": "internet explorer",// "iSP": "megaCom provider",// "adBlock": True// },// "cookies": {// "sessionState": "Active",// "language": "Russia",// "region": "chui area",// "recentPages": ["https://ru.wikipedia.org/wiki/%D0%A5%D0%BE%D0%B1%D0%B1%D0%B8%D1%85%D0%BE%D1%80%D1%81%D0%B8%D0%BD%D0%B3"],// "shoppingCart": [// {// "productId": "123-asda-12312",// "productName": "dragon",// "productPrice": 100000000,// "quantity": 1,// "subTotal": 120000,// "total": 20,// "couponCode": "free-dragondotpy",// "shippingInformation": "st.Avenue 13",// "taxInformation": "12.23"// },// {// "productId": "123-qwe-123",// "productName": "dragon-wife",// "productPrice": 1,// "quantity": 1,// "subTotal": 1,// "total": 2,// "couponCode": "free-incubator",// "shippingInformation": "st.Avenue 13",// "taxInformation": "0.01"// }// ]// }// }namespaceInsertDataExample{classProgram {staticasyncTaskMain(string[] args) {string url ="http://your-server-ip:8000/api/v1/insert";string authToken ="your_auth_token_here";# here you have to pass your authorization token which you specified # in docker-compose.yml file in environment variablesHttpClient httpClient =newHttpClient();httpClient.DefaultRequestHeaders.Add("Authorization", authToken);httpClient.DefaultRequestHeaders.Add("Content-Type","application/json");string requestBody ="{\"profile\": {...}}"; // Replace with your JSON datatry {HttpResponseMessage response =awaithttpClient.PostAsync(url,newStringContent(requestBody,Encoding.UTF8,"application/json"));string responseData =awaitresponse.Content.ReadAsStringAsync();if (response.IsSuccessStatusCode) {Console.WriteLine("Data inserted successfully: "+ responseData); }else {Console.WriteLine("Error inserting data: "+ responseData); } }catch (Exception e) {Console.WriteLine("Request error: "+e.Message); } } }}
Update Records
The update method serves to synchronize your database with ours, so that the data is always up to date, you just need to write a function that, when updating your user's data, it simultaneously updates the user in our database to keep personal data up to date
This method is used to update the data of an existing user, please note that identification occurs by recordId which is located separately outside the data to update
Query Parameters
Name
Type
Description
recordId*
String
This string is an identifier by which you will find and update user data
Headers
Name
Type
Description
Authorization*
String
This token is needed for authorization, which is located in docker-compose.yml
Request Body
Name
Type
Description
deviceInformation
deviceInformation
personalInterests
personalInterests
placeOfresidence
placeOfResidence
workAndEducation
workAndEducation
contacts
Contacts
basicData
BasicData
profile
Profile
cookies
Cookies
# with id profile in brecets
{
"message":"profile {} successfully updated!"
}
#with record Id in brecets
{
"error": "Profile with recordId: {} not found."
}
# Check if the 'recordId' parameter is missing.
# If it is, return an error response indicating that the record ID must not be null.
# The status code is set to 400 (Bad Request).
{
'error': "recordID is must be not null",
'details': "Please provide a valid 'recordId' parameter."
}
# Check if the 'Content-Type' header of the request is not set to 'application/json'.
# If it's not set correctly, return an error response indicating "Unsupported Media Type".
# The status code is set to 415 (Unsupported Media Type).
{
'error': 'Unsupported Media Type',
'details': "The 'Content-Type' header must be set to 'application/json'."
}
# Check if the provided token in the 'Authorization' header does not match the expected 'auth_token'.
# If it doesn't match, return an error response indicating "Invalid token".
# The status code is set to 401 (Unauthorized).
{
'error': 'Invalid token',
'details': "The token provided in the 'Authorization' header is invalid. Please provide a valid token."
}