OneGuard

الخزنات والأسرار

كل الطلبات أدناه تستخدم Authorization: Bearer <access_token> — راجع المصادقة. نقاط نهاية السرد تقبل ?limit= و?cursor= — راجع شكل الاستجابة والتقسيم إلى صفحات.

حقول الخزنة

{
  "id": "429110bc-...",
  "org_id": "7a1c2e3f-...",
  "name": "My API",
  "icon_index": 4,
  "color": "#4F46E5",
  "team_id": null,
  "role": "admin",
  "created_at": "2026-01-15T10:20:30.000Z"
}

role هو دور المفتاح أو المستخدم المستدعي على هذه الخزنة: admin أو editor أو member.

GET /v1/vaults

كل خزنة يراها المستدعي، الأحدث أولًا.

GET/v1/vaults
curl -s https://api.oneguard.one/v1/vaults \
  -H "Authorization: Bearer $TOKEN"

POST /v1/vaults

POST/v1/vaults
curl -s https://api.oneguard.one/v1/vaults \
  -X POST \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"Marketing site"}'

يعيد 201 مع الخزنة المُنشأة وترويسة Location.

GET /v1/vaults/{vaultId}

GET/v1/vaults/{vaultId}
curl -s https://api.oneguard.one/v1/vaults/{vaultId} \
  -H "Authorization: Bearer $TOKEN"

PATCH /v1/vaults/{vaultId}

تحديث جزئي — أي من name أو team_id أو icon_index أو color. الحقول غير المرسَلة تبقى على قيمتها الحالية. أرسل "team_id": null لإزالة خزنة من فريقها.

PATCH/v1/vaults/{vaultId}
curl -s https://api.oneguard.one/v1/vaults/{vaultId} \
  -X PATCH \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"New name"}'

DELETE /v1/vaults/{vaultId}

204 No Content عند النجاح.

DELETE/v1/vaults/{vaultId}
curl -s https://api.oneguard.one/v1/vaults/{vaultId} \
  -X DELETE \
  -H "Authorization: Bearer $TOKEN"

أعضاء الخزنة

{
  "id": "9e2a...",
  "vault_id": "429110bc-...",
  "user": { "id": "3f1a...", "name": "Sam", "email": "sam@example.com" },
  "role": "editor",
  "created_at": "2026-02-01T09:00:00.000Z"
}

GET /v1/vaults/{vaultId}/members — قائمة مقسَّمة إلى صفحات.

GET/v1/vaults/{vaultId}/members
curl -s https://api.oneguard.one/v1/vaults/{vaultId}/members \
  -H "Authorization: Bearer $TOKEN"

POST /v1/vaults/{vaultId}/members يضيف عضوًا.

POST/v1/vaults/{vaultId}/members
curl -s https://api.oneguard.one/v1/vaults/{vaultId}/members \
  -X POST \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"user_id":"3f1a...","role":"editor"}'

PATCH /v1/vaults/{vaultId}/members/{memberId} يغيّر دور العضو، ويعيد فقط {"id", "vault_id", "role"} — لا كائن العضو الكامل.

PATCH/v1/vaults/{vaultId}/members/{memberId}
curl -s https://api.oneguard.one/v1/vaults/{vaultId}/members/{memberId} \
  -X PATCH \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"role":"admin"}'

DELETE /v1/vaults/{vaultId}/members/{memberId} يزيل عضوًا — 204 No Content.

DELETE/v1/vaults/{vaultId}/members/{memberId}
curl -s https://api.oneguard.one/v1/vaults/{vaultId}/members/{memberId} \
  -X DELETE \
  -H "Authorization: Bearer $TOKEN"

حقول السر

{
  "id": "3cb0cce2-...",
  "vault_id": "429110bc-...",
  "name": "production",
  "type": "env",
  "expired_at": null,
  "delete_after_expired": false,
  "is_archived": false,
  "created_at": "2026-02-01T09:00:00.000Z"
}

GET /v1/vaults/{vaultId}/secrets

قائمة بيانات وصفية مقسَّمة إلى صفحات — بلا قيم.

GET/v1/vaults/{vaultId}/secrets
curl -s https://api.oneguard.one/v1/vaults/{vaultId}/secrets \
  -H "Authorization: Bearer $TOKEN"

POST /v1/vaults/{vaultId}/secrets

POST/v1/vaults/{vaultId}/secrets
curl -s https://api.oneguard.one/v1/vaults/{vaultId}/secrets \
  -X POST \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "production",
    "value": {
      "DB_PASSWORD": "supersecret",
      "API_KEY": "sk_live_..."
    }
  }'

يعيد 201 مع الشكل الوصفي أعلاه (لا القيمة التي أرسلتها للتو) وترويسة Location.

PATCH /v1/secrets/{secretId}

جزئي: أرسل name و/أو value. القيمة value التي ترسلها تستبدل القيمة المخزَّنة بالكامل — لا تُدمج مفتاحًا بمفتاح.

PATCH/v1/secrets/{secretId}
curl -s https://api.oneguard.one/v1/secrets/{secretId} \
  -X PATCH \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"value":{"DB_PASSWORD":"new-password"}}'

DELETE /v1/secrets/{secretId}

يؤرشف السر (حذف ناعم — يتوقف عن الظهور في القوائم). 204 No Content.

DELETE/v1/secrets/{secretId}
curl -s https://api.oneguard.one/v1/secrets/{secretId} \
  -X DELETE \
  -H "Authorization: Bearer $TOKEN"

GET /v1/secrets/{secretId}/value

الشكل الوصفي بالإضافة إلى كائن value مفكوك التشفير. راجع البدء السريع لمثال كامل.

GET/v1/secrets/{secretId}/value
curl -s https://api.oneguard.one/v1/secrets/{secretId}/value \
  -H "Authorization: Bearer $TOKEN"

GET /v1/vaults/{vaultId}/secrets/values

كل أسرار الخزنة الحية، كل واحد بقيمته مفكوكة التشفير، في استدعاء واحد بلا مؤشر:

GET/v1/vaults/{vaultId}/secrets/values
curl -s https://api.oneguard.one/v1/vaults/{vaultId}/secrets/values \
  -H "Authorization: Bearer $TOKEN"
{
  "statusCode": 200,
  "errorCode": null,
  "message": null,
  "data": [
    { "id": "...", "name": "production", "...": "...", "value": { "DB_PASSWORD": "..." } },
    { "id": "...", "name": "staging", "...": "...", "value": { "DB_PASSWORD": "..." } }
  ]
}

لا next_cursor في هذه الحالة — راجع ملاحظة التقسيم إلى صفحات لمعرفة السبب.