{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"8f666c8a-9dfe-4840-a4de-534638957dbb","name":"Guardora VFL API (v0.2.0) ENG","description":"> **Important**: To ensure correct display of this documentation, please make sure your browser **does not automatically translate** text or commands into your native language. \n  \n\n## 🧠What is Guardora VFL?\n\n**Guardora VFL** is a solution for vertical federated learning (VFL) of machine learning models.\n\nThe product is designed to work with **tabular data**.\n\nThe following model architectures are currently supported:\n\n- Gradient Boosting Decision Trees\n    \n- Linear Regression\n    \n- Logistic Regression\n    \n- Softmax Regression\n    \n\n## 🧩Key Concepts and Entities\n\n**Vertical Federated Learning (VFL):** Applied when participating parties hold **different features (columns)** for the **same entities (rows)**. Only one party needs to have the target variable (label) for model training.\n\n**Active Party:** Initiates model training/inference and sends requests to other parties. It is the **only party that holds the target variable**, which the model aims to predict.\n\n**Passive Party:** Responds to training/inference requests from the active party, processes its own data, and sends results back. There can be **multiple passive parties**. Any party can act as either active or passive, depending on the setup.\n\n**Project:** A workspace created to form a team of parties and upload datasets for model training and validation. The party **with the target variable acts as the active party**, while others act as passive parties. A project can be created by any party.\n\n**Task:** To train a model within a project, a task must be created with a selected model type and hyperparameters. Only the **active party** (owner of the target variable) **can launch a task**. The output is a trained model, with its components distributed among the participating parties.\n\n**Inference:** To use a previously trained model, participating parties must mark datasets for inference. The datasets must contain **the same features** as used in training. Any party can initiate inference. The output is the **model’s predictions**.\n\n## 📡Using the API\n\n<img src=\"https://content.pstmn.io/c76940e0-8f21-43c1-aaf3-545e137f9ebc/VkZMX0FQSV9jb2xvdXJfRU5HLnBuZw==\" width=\"751\" height=\"1840\">\n\n### **Uploading Large Data**\n\nTo upload CSV files larger than 2 GB, use the terminal with the following command:\n\n``` bash\ncurl -X POST \"https://<HOST>:7171/projects/<project_name>/uploads\" \\\n  -H \"accept: application/json\" \\\n  -H \"Content-Type: multipart/form-data\" \\\n  -F \"file=@/path/data.csv;type=text/csv\"\n\n ```\n\nExample command for Linux:\n\n``` bash\ncurl -X POST \"http://81.11.111.11:7171/projects/big_data/uploads\" \\\n  -H \"accept: application/json\" \\\n  -H \"Content-Type: multipart/form-data\" \\\n  -F \"file=@/home/test_10e3x100.csv;type=text/csv\"\n\n ```\n\n### Model Training Results\n\nTrained models can be downloaded using the **Get Artefact** method.\n\nModel performance metrics can be viewed in:\n\n- **MLflow:** `http://EXTERNAL_IP:5555`\n    \n- **TensorBoard:** `http://EXTERNAL_IP:6006`\n    \n\n## 🛠Product Installation\n\n> **Important:** Minimum resource requirements: **2 vCPUs, 6 GB RAM, 20 GB SSD/HDD**. Actual requirements depend on the volume of uploaded data and the desired model training speed.  \nThe RAM requirement for a participating party depends on the maximum size of the uploaded file and the number of CPU cores. \n  \n\nOn **each participating party**, the following steps must be performed:\n\n**(1) Clone the repository**\n\n`git clone` [<code>https://github.com/guardora-ai/guardora_vfl</code>](https://github.com/guardora-ai/guardora_vfl)\n\n**(2) Configure the environment**\n\nEdit the `.env` file and define the following variables:\n\n- `GUARDORA_FOLDER`: An empty folder on the host machine where all data will be stored. This folder must exist, and the Docker user must have write access to it.\n    \n- `EXTERNAL_IP`: The IP address to be used by other parties.\n    \n- `NODE_NAME`: Name of the node. Restrictions: only Latin letters, digits, and spaces.\n    \n- `COMPOSE_PROFILES`: List of MLOps services to run. Available options: `tensorboard`, `mlflow`.\n    \n- `USE_GUARDORA_UI`: Set to `false`.\n    \n\nExample `.env` file:\n\n``` bash\nGUARDORA_FOLDER=\"/opt/guardora\"\nEXTERNAL_IP=127.0.0.1\nNODE_NAME=\"MySuperNode\"\nCOMPOSE_PROFILES=tensorboard\nUSE_GUARDORA_UI=false\n\n ```\n\n**(3) Build and run Docker containers**\n\n- Build: `sudo docker-compose build`\n    \n- Run: `sudo docker-compose up -d`\n    \n\n## 🌐**Network Accessibility**\n\nOnly port 7173, used for gRPC communication, must be exposed to the external network.\n\nPorts 7171, 5555, and 6006 must not be exposed to the external network and must be accessible only from a trusted perimeter:\n\n- from the internal corporate network;\n    \n- through the corporate VPN;\n    \n- through other approved secure access channels.\n    \n\nPurpose of the internal ports:\n\n- 7171 - Guardora VFL API;\n    \n- 5555 - MLflow for monitoring model performance metrics;\n    \n- 6006 - TensorBoard for monitoring model performance metrics.\n    \n\n## 🚀First-Time Setup\n\nOnce the virtual machine is created, the API becomes available automatically.\n\nSwagger UI is available at: `http://EXTERNAL_IP:7171/docs`\n\nTo initialize the node and assign its name, make a **POST** request to `/node`.  \nRestrictions: use only Latin letters, digits, and spaces.","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"45704385","team":8107998,"collectionId":"8f666c8a-9dfe-4840-a4de-534638957dbb","publishedId":"2sB34mhxvT","public":true,"publicUrl":"https://apidoc.guardora.ai","privateUrl":"https://go.postman.co/documentation/45704385-8f666c8a-9dfe-4840-a4de-534638957dbb","customColor":{"top-bar":"FFFFFF","right-sidebar":"ccc7eb","highlight":"776aca"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":"Guardora VFL is a federated learning product that improves the accuracy of ML models by training them on previously inaccessible data from external companies in such a way that the data does not leave the data owner's secure environment. The product is designed to work with tabular data."},{"name":"title","value":"Guardora VFL - Vertical Federated Learning of ML Models"}],"appearance":{"default":"light","themes":[{"name":"dark","logo":"https://content.pstmn.io/bb1ea4ab-a5b3-4bb1-8727-6cbbd3cee649/R3VhcmRvcmFfbG9nb192ZXJ0aWNhbF9wdXJwbGUucG5n","colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"776aca"}},{"name":"light","logo":"https://content.pstmn.io/47fcb8e5-9861-42f6-8063-52561adf90c6/R3VhcmRvcmFfbG9nb19tYWluLnBuZw==","colors":{"top-bar":"FFFFFF","right-sidebar":"ccc7eb","highlight":"776aca"}}]}},"version":"8.10.1","publishDate":"2025-07-22T14:42:22.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"Guardora VFL - Vertical Federated Learning of ML Models","description":"Guardora VFL is a federated learning product that improves the accuracy of ML models by training them on previously inaccessible data from external companies in such a way that the data does not leave the data owner's secure environment. The product is designed to work with tabular data."},"logos":{"logoLight":"https://content.pstmn.io/47fcb8e5-9861-42f6-8063-52561adf90c6/R3VhcmRvcmFfbG9nb19tYWluLnBuZw==","logoDark":"https://content.pstmn.io/bb1ea4ab-a5b3-4bb1-8727-6cbbd3cee649/R3VhcmRvcmFfbG9nb192ZXJ0aWNhbF9wdXJwbGUucG5n"}},"statusCode":200},"environments":[],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/7bd95d1d1dbab80b66b669831448112daa209fe748c07de7536de627dd385fd8","favicon":"https://guardora.ai/favicon.ico"},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"}],"canonicalUrl":"https://apidoc.guardora.ai/view/metadata/2sB34mhxvT"}