Piekļūstiet sava seifa saturam programmatiski ar zero-knowledge šifrēšanu.
Lasīšanas piekļuve pilnai šifrētajai seifa satura versijai. Atšifrēšanai nepieciešama lietotāja galvenā parole.
API v1 nodrošina tikai lasīšanas piekļuvi visam šifrētajam seifam. Atšķirībā no Tag API v2, šis API atgriež neapstrādātus šifrētus datus, kuriem nepieciešama lietotāja galvenā parole atšifrēšanai.
Pieejami tikai GET pieprasījumi. Nav iespējams izveidot, atjaunināt vai dzēst ierakstus.
Piekļūst visiem lietotāja ierakstiem bez tag ierobežojumiem.
Datu atšifrēšanai klientam jāzina lietotāja galvenā parole.
Serveris neatšifrē datus - visa atšifrēšana notiek klienta pusē.
| Īpašība | API v1 (vglv_) | Tag API v2 (vgtk_) |
|---|---|---|
| Piekļuve | Pilns seifs | Tikai ar tagiem iezīmēti |
| Rakstīšana | Nē | Jā (CRUD) |
| Atšifrēšana | Nepieciešama galvenā parole | API atslēga atvasina atslēgu pāri |
| Lietojums | Rezerves kopijas, eksportēšana | MCP/AI integrācija |
Svarīgi
Visi pieprasījumi prasa API atslēgu X-API-Key galvenē.
X-API-Key: vglv_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6API atslēgas izmanto vglv_ prefiksu (32 alfanumeriski simboli pēc prefiksa).
Dodieties uz Iestatījumi > API Pieejas savā seifā
Noklikšķiniet "Izveidot API Atslēgu" un ievadiet aprakstu
Atslēga tiek rādīta tikai vienu reizi! Saglabājiet to vides mainīgajā vai secrets manager.
Ātruma ierobežojumi
Visi pieejamie lasīšanas galapunkti.
/api/v1/itemsSaraksts ar visiem šifrētajiem ierakstiem ar pagināciju.
| Parametrs | Tips | Apraksts |
|---|---|---|
type | string | Filtrēt pēc tipa: PASSWORD, NOTE, IMAGE, DOCUMENT, TOTP |
limit | number | Rezultātu skaits uz lapu (maksimums: 500, noklusējums: 100) |
offset | number | Paginācijas nobīde (noklusējums: 0) |
curl https://vairogs.lv/api/v1/items \
-H "X-API-Key: vglv_YOUR_KEY_HERE"
curl "https://vairogs.lv/api/v1/items?type=PASSWORD&limit=50" \
-H "X-API-Key: vglv_YOUR_KEY_HERE"{
"success": true,
"data": {
"items": [
{
"id": "uuid",
"type": "PASSWORD",
"title": "GitHub",
"encryptedData": "base64...",
"iv": "base64...",
"labels": ["tag_id_1"],
"createdAt": "2025-01-01T00:00:00.000Z",
"updatedAt": "2025-01-01T00:00:00.000Z"
}
],
"salt": "base64...",
"pagination": {
"total": 42,
"limit": 100,
"offset": 0,
"hasMore": false
},
"encryption": {
"algorithm": "AES-256-GCM",
"keyDerivation": "PBKDF2",
"iterations": 100000
}
}
}/api/v1/items/:idIegūstiet vienu šifrētu ierakstu pēc ID.
curl https://vairogs.lv/api/v1/items/ITEM_ID \
-H "X-API-Key: vglv_YOUR_KEY_HERE"{
"success": true,
"data": {
"item": {
"id": "uuid",
"type": "PASSWORD",
"title": "GitHub",
"encryptedData": "base64...",
"iv": "base64...",
"labels": ["tag_id_1"],
"createdAt": "2025-01-01T00:00:00.000Z",
"updatedAt": "2025-01-01T00:00:00.000Z"
},
"salt": "base64...",
"encryption": {
"algorithm": "AES-256-GCM",
"keyDerivation": "PBKDF2",
"iterations": 100000
}
}
}Kā atšifrēt API v1 atgrieztos datus ar lietotāja galveno paroli.
API v1 atgriež datus, kas šifrēti ar lietotāja galveno paroli. Atšifrēšanai:
Izmantojiet PBKDF2 ar galveno paroli un salt no API atbildes
Izmantojiet AES-256-GCM ar atvasināto atslēgu un IV no ieraksta
Atšifrētie dati ir JSON formātā ar ieraksta laukiem
const { pbkdf2Sync } = require('crypto');
const masterPassword = 'lietotāja_galvenā_parole';
const salt = response.salt; // base64 no API
// Atvasināt 256-bitu atslēgu ar PBKDF2
const key = pbkdf2Sync(
masterPassword,
Buffer.from(salt, 'base64'),
100000, // iterācijas
32, // 256 biti
'sha256'
);const crypto = require('crypto');
function decryptItem(encryptedData, iv, key) {
const decipher = crypto.createDecipheriv(
'aes-256-gcm',
key,
Buffer.from(iv, 'base64')
);
const encrypted = Buffer.from(encryptedData, 'base64');
// Pēdējie 16 baiti ir autentifikācijas tags
const authTag = encrypted.slice(-16);
const ciphertext = encrypted.slice(0, -16);
decipher.setAuthTag(authTag);
const decrypted = Buffer.concat([
decipher.update(ciphertext),
decipher.final()
]);
return JSON.parse(decrypted.toString('utf8'));
}
// Lietojums
const item = response.items[0];
const plaintext = decryptItem(item.encryptedData, item.iv, key);
console.log(plaintext);
// { username: '...', password: '...', url: '...', notes: '...' }const { pbkdf2Sync, createDecipheriv } = require('crypto');
const API_KEY = process.env.VAIROGS_API_KEY;
const MASTER_PASSWORD = process.env.VAIROGS_MASTER_PASSWORD;
const BASE_URL = 'https://vairogs.lv/api/v1';
async function fetchAndDecrypt() {
// 1. Iegūt ierakstus
const response = await fetch(`${BASE_URL}/items`, {
headers: { 'X-API-Key': API_KEY }
});
const { data } = await response.json();
// 2. Atvasināt šifrēšanas atslēgu
const key = pbkdf2Sync(
MASTER_PASSWORD,
Buffer.from(data.salt, 'base64'),
100000,
32,
'sha256'
);
// 3. Atšifrēt katru ierakstu
const decryptedItems = data.items.map(item => {
try {
const encrypted = Buffer.from(item.encryptedData, 'base64');
const iv = Buffer.from(item.iv, 'base64');
const authTag = encrypted.slice(-16);
const ciphertext = encrypted.slice(0, -16);
const decipher = createDecipheriv('aes-256-gcm', key, iv);
decipher.setAuthTag(authTag);
const decrypted = Buffer.concat([
decipher.update(ciphertext),
decipher.final()
]);
return {
id: item.id,
type: item.type,
title: item.title,
data: JSON.parse(decrypted.toString())
};
} catch (error) {
return { id: item.id, error: 'Atšifrēšana neizdevās' };
}
});
return decryptedItems;
}
fetchAndDecrypt().then(items => {
console.log('Atšifrētie ieraksti:', items);
});Svarīgi apsvērumi, izmantojot API v1.
API v1 prasa galveno paroli atšifrēšanai. Ja parole tiek kompromitēta, viss seifa saturs ir pieejams. Apsvēriet Tag API v2 automatizētai piekļuvei.
API v1 piešķir piekļuvi VISIEM ierakstiem bez tag ierobežojumiem. Izmantojiet Tag API v2, lai ierobežotu piekļuvi tikai noteiktiem ierakstiem.
Vienmēr izmantojiet HTTPS produkcijā. Nekad nesūtiet API atslēgas vai galvenās paroles pa nedrošiem savienojumiem.
Glabājiet API atslēgas vides mainīgajos vai secrets manager. Nekad neievietojiet tās koda repozitorijā. Regulāri rotējiet atslēgas.
| Lietojuma Gadījums | Ieteicamais API |
|---|---|
| Rezerves kopijas / eksportēšanas rīki | API v1 |
| MCP / AI integrācija | Tag API v2 |
| Automatizēti skripti ar galveno paroli | API v1 |
| Skripti bez galvenās paroles | Tag API v2 |
| Pilna seifa piekļuve nepieciešama | API v1 |
| Ierobežota / tag-based piekļuve | Tag API v2 |
Ieteikums
API v1 atgrieztie kļūdu kodi un to nozīmes.
| Code | HTTP Status | Description |
|---|---|---|
API_KEY_REQUIRED | 401 | Trūkst X-API-Key galvenes |
INVALID_API_KEY | 401 | Nederīga vai neaktīva API atslēga |
VAULT_NOT_FOUND | 404 | Šim lietotājam neeksistē seifs |
VAULT_PARSE_ERROR | 500 | Neizdevās parsēt seifa datus |
RATE_LIMIT_EXCEEDED | 429 | Pārsniegts ātruma ierobežojums |
INTERNAL_ERROR | 500 | Servera kļūda |