# API Authentication
Source: https://docs.vidocsecurity.com/api/authentication
Authenticate requests to the Vidoc REST API
The Vidoc API uses API keys for authentication. All requests must include a valid API key.
## Getting an API Key
1. Go to [app.vidocsecurity.com](https://app.vidocsecurity.com)
2. Select your project
3. Navigate to **Settings** → **API Keys**
4. Click **"Create API Key"**
5. Copy and store the key securely
See [API Keys](/settings/api-keys) for detailed management.
## Authentication Methods
### Bearer Token (Recommended)
Include the API key in the `Authorization` header:
```bash theme={null}
curl -X POST https://api.vidocsecurity.com/v1/scan-workflows/start \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{"codebaseId": "...", "branch": "main"}'
```
### Header Token
Alternatively, use the `X-API-Key` header:
```bash theme={null}
curl -X POST https://api.vidocsecurity.com/v1/scan-workflows/start \
-H "X-API-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{"codebaseId": "...", "branch": "main"}'
```
## Base URL
All API requests use:
```
https://api.vidocsecurity.com/v1
```
## Request Format
### Headers
| Header | Required | Description |
| --------------- | -------------- | --------------------- |
| `Authorization` | Yes | `Bearer your-api-key` |
| `Content-Type` | Yes (POST/PUT) | `application/json` |
### Request Body
POST and PUT requests use JSON:
```json theme={null}
{
"codebaseId": "abc123",
"branch": "main"
}
```
## Response Format
### Success Response
```json theme={null}
{
"id": "scan-123",
"status": "pending",
"createdAt": "2024-01-15T10:30:00Z"
}
```
### Error Response
```json theme={null}
{
"statusCode": 401,
"message": "Invalid API key",
"error": "Unauthorized"
}
```
## Error Codes
| Code | Description |
| ----- | --------------------------- |
| `401` | Invalid or missing API key |
| `403` | Key doesn't have permission |
| `404` | Resource not found |
| `429` | Rate limit exceeded |
| `500` | Server error |
## Rate Limits
| Operation | Limit |
| ----------- | -------------- |
| Start scan | 10 per minute |
| Get status | 100 per minute |
| List issues | 100 per minute |
Rate limit headers are included in responses:
```
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1705315200
```
## Code Examples
### JavaScript/Node.js
```javascript theme={null}
const response = await fetch('https://api.vidocsecurity.com/v1/scan-workflows/start', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.VIDOC_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
codebaseId: 'abc123',
branch: 'main',
}),
});
const data = await response.json();
```
### Python
```python theme={null}
import requests
import os
response = requests.post(
'https://api.vidocsecurity.com/v1/scan-workflows/start',
headers={
'Authorization': f'Bearer {os.environ["VIDOC_API_KEY"]}',
'Content-Type': 'application/json',
},
json={
'codebaseId': 'abc123',
'branch': 'main',
}
)
data = response.json()
```
### cURL
```bash theme={null}
curl -X POST https://api.vidocsecurity.com/v1/scan-workflows/start \
-H "Authorization: Bearer $VIDOC_API_KEY" \
-H "Content-Type: application/json" \
-d '{"codebaseId": "abc123", "branch": "main"}'
```
## Security Best Practices
1. **Never commit API keys** - Use environment variables
2. **Rotate keys regularly** - Create new keys every 90 days
3. **Use separate keys** - One per environment/purpose
4. **Monitor usage** - Check last used timestamps
5. **Revoke compromised keys** - Immediately if exposed
## Related Pages
Manage API keys
Start scans via API
Access issues via API
CLI auth methods
# Issues API
Source: https://docs.vidocsecurity.com/api/issues
Access and manage security issues via the REST API
The Issues API allows you to programmatically access security findings from your scans.
The Issues API is available for enterprise plans. Contact support for access.
## List Issues
### Endpoint
```
GET /v1/issues
```
### Query Parameters
| Parameter | Type | Description |
| ------------ | ------ | -------------------------------------------------- |
| `projectId` | string | Filter by project |
| `codebaseId` | string | Filter by repository |
| `status` | string | `open`, `ignored`, `closed` |
| `severity` | string | `critical`, `high`, `medium`, `low`, `informative` |
| `category` | string | Security category (e.g., `sqli`, `xss`) |
| `limit` | number | Results per page (default: 50, max: 100) |
| `offset` | number | Pagination offset |
### Example Request
```bash theme={null}
curl "https://api.vidocsecurity.com/v1/issues?status=open&severity=critical" \
-H "Authorization: Bearer $VIDOC_API_KEY"
```
### Response
```json theme={null}
{
"issues": [
{
"id": "issue_abc123",
"title": "SQL Injection in user query",
"severity": "critical",
"category": "sqli",
"status": "open",
"filePath": "src/db/users.js",
"lineNumber": 45,
"codebaseId": "codebase_xyz",
"branch": "main",
"createdAt": "2024-01-15T10:35:00Z"
}
],
"total": 1,
"limit": 50,
"offset": 0
}
```
## Get Issue Details
### Endpoint
```
GET /v1/issues/:issueId
```
### Example Request
```bash theme={null}
curl https://api.vidocsecurity.com/v1/issues/issue_abc123 \
-H "Authorization: Bearer $VIDOC_API_KEY"
```
### Response
```json theme={null}
{
"id": "issue_abc123",
"title": "SQL Injection in user query",
"description": "User input is directly concatenated into SQL query without sanitization.",
"severity": "critical",
"category": "sqli",
"status": "open",
"filePath": "src/db/users.js",
"lineNumber": 45,
"codeSnippet": "const query = `SELECT * FROM users WHERE id = ${userId}`;",
"remediation": "Use parameterized queries to prevent SQL injection.",
"codebaseId": "codebase_xyz",
"branch": "main",
"scanId": "scan_789",
"createdAt": "2024-01-15T10:35:00Z"
}
```
## Update Issue Status
### Endpoint
```
PATCH /v1/issues/:issueId
```
### Request Body
| Field | Type | Description |
| -------- | ------ | --------------------------------------- |
| `status` | string | New status: `open`, `ignored`, `closed` |
| `reason` | string | Reason (required for `ignored`) |
### Mark as Fixed
```bash theme={null}
curl -X PATCH https://api.vidocsecurity.com/v1/issues/issue_abc123 \
-H "Authorization: Bearer $VIDOC_API_KEY" \
-H "Content-Type: application/json" \
-d '{"status": "closed"}'
```
### Ignore Issue
```bash theme={null}
curl -X PATCH https://api.vidocsecurity.com/v1/issues/issue_abc123 \
-H "Authorization: Bearer $VIDOC_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"status": "ignored",
"reason": "False positive - input is sanitized in middleware"
}'
```
### Response
```json theme={null}
{
"id": "issue_abc123",
"status": "ignored",
"updatedAt": "2024-01-15T11:00:00Z"
}
```
## Issue Categories
| Category | Description |
| ------------------- | -------------------------------- |
| `sqli` | SQL Injection |
| `xss` | Cross-Site Scripting |
| `command-injection` | Command Injection |
| `ssrf` | Server-Side Request Forgery |
| `path-traversal` | Path Traversal |
| `idor` | Insecure Direct Object Reference |
| `hardcoded-secrets` | Hardcoded Credentials |
| `weak-cryptography` | Weak Cryptography |
See [Security Categories](/security/overview) for the full list.
## Pagination
For large result sets, use pagination:
```javascript theme={null}
async function getAllIssues(apiKey, projectId) {
const issues = [];
let offset = 0;
const limit = 100;
while (true) {
const response = await fetch(
`https://api.vidocsecurity.com/v1/issues?projectId=${projectId}&limit=${limit}&offset=${offset}`,
{
headers: { 'Authorization': `Bearer ${apiKey}` }
}
);
const data = await response.json();
issues.push(...data.issues);
if (data.issues.length < limit) {
break; // No more results
}
offset += limit;
}
return issues;
}
```
## Filtering Examples
### Critical Issues Only
```
GET /v1/issues?severity=critical&status=open
```
### By Repository
```
GET /v1/issues?codebaseId=codebase_abc123
```
### By Category
```
GET /v1/issues?category=sqli
```
### Multiple Filters
```
GET /v1/issues?severity=high&category=xss&status=open
```
## Webhooks (Coming Soon)
Subscribe to issue events:
* New issue detected
* Issue status changed
* Scan completed
Contact support to join the beta.
## Related Pages
Authentication setup
Trigger scans
Web interface
Issue categories
# Scanning API
Source: https://docs.vidocsecurity.com/api/scanning
Start and monitor security scans via the REST API
The Scanning API allows you to programmatically trigger and monitor security scans.
## Start a Scan
### Endpoint
```
POST /v1/scan-workflows/start
```
### Request Body
| Field | Type | Required | Description |
| ------------------- | --------- | -------- | ----------------------------------------- |
| `codebaseId` | string | Yes | Repository/codebase identifier |
| `branch` | string | Yes | Git branch to scan |
| `scanSpecificFiles` | boolean | No | Only scan specific files |
| `fileIds` | string\[] | No | File IDs to scan (if `scanSpecificFiles`) |
### Example Request
```bash theme={null}
curl -X POST https://api.vidocsecurity.com/v1/scan-workflows/start \
-H "Authorization: Bearer $VIDOC_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"codebaseId": "codebase_abc123",
"branch": "main"
}'
```
### Response
```json theme={null}
{
"id": "scan_xyz789"
}
```
### Scan Specific Files
To scan only certain files:
```json theme={null}
{
"codebaseId": "codebase_abc123",
"branch": "main",
"scanSpecificFiles": true,
"fileIds": ["file_1", "file_2", "file_3"]
}
```
## Get Scan Status
### Endpoint
```
GET /v1/scan-workflows/:scanId/status
```
### Example Request
```bash theme={null}
curl https://api.vidocsecurity.com/v1/scan-workflows/scan_xyz789/status \
-H "Authorization: Bearer $VIDOC_API_KEY"
```
### Response
```json theme={null}
{
"id": "scan_xyz789",
"status": "completed",
"projectId": "proj_abc",
"codebaseId": "codebase_abc123",
"branch": "main",
"createdAt": "2024-01-15T10:30:00Z",
"completedAt": "2024-01-15T10:35:00Z",
"issuesFound": 3
}
```
### Status Values
| Status | Description |
| ----------- | -------------------------- |
| `pending` | Scan queued |
| `running` | Scan in progress |
| `completed` | Scan finished successfully |
| `failed` | Scan encountered an error |
## Polling for Completion
Poll the status endpoint until the scan completes:
```javascript theme={null}
async function waitForScan(scanId, apiKey) {
const maxAttempts = 60;
const delayMs = 5000;
for (let i = 0; i < maxAttempts; i++) {
const response = await fetch(
`https://api.vidocsecurity.com/v1/scan-workflows/${scanId}/status`,
{
headers: { 'Authorization': `Bearer ${apiKey}` }
}
);
const scan = await response.json();
if (scan.status === 'completed') {
return scan;
}
if (scan.status === 'failed') {
throw new Error('Scan failed');
}
await new Promise(resolve => setTimeout(resolve, delayMs));
}
throw new Error('Scan timed out');
}
```
## Finding Your Codebase ID
The `codebaseId` is required to start a scan. Find it:
### Via Dashboard
1. Go to **Repositories**
2. Click a repository
3. The codebase ID is in the URL: `/repositories/codebase_abc123`
### Via API
List repositories to get codebase IDs (contact support for this endpoint documentation).
## Error Handling
### Common Errors
| Error | Cause | Solution |
| -------------------- | -------------------- | -------------------- |
| `Codebase not found` | Invalid codebaseId | Verify the ID exists |
| `Branch not found` | Branch doesn't exist | Check branch name |
| `Invalid file IDs` | File IDs don't exist | Verify file IDs |
### Error Response Format
```json theme={null}
{
"statusCode": 404,
"message": "Codebase not found",
"error": "Not Found"
}
```
## Rate Limits
| Operation | Limit |
| ---------- | -------------- |
| Start scan | 10 per minute |
| Get status | 100 per minute |
If rate limited, wait and retry:
```javascript theme={null}
if (response.status === 429) {
const retryAfter = response.headers.get('Retry-After') || 60;
await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
// Retry request
}
```
## Complete Example
```javascript theme={null}
const VIDOC_API_KEY = process.env.VIDOC_API_KEY;
const API_BASE = 'https://api.vidocsecurity.com/v1';
async function runScan(codebaseId, branch) {
// Start scan
const startResponse = await fetch(`${API_BASE}/scan-workflows/start`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${VIDOC_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ codebaseId, branch }),
});
const { id: scanId } = await startResponse.json();
console.log(`Scan started: ${scanId}`);
// Wait for completion
let status = 'pending';
while (status === 'pending' || status === 'running') {
await new Promise(r => setTimeout(r, 5000));
const statusResponse = await fetch(
`${API_BASE}/scan-workflows/${scanId}/status`,
{
headers: { 'Authorization': `Bearer ${VIDOC_API_KEY}` },
}
);
const scan = await statusResponse.json();
status = scan.status;
console.log(`Status: ${status}`);
if (status === 'completed') {
console.log(`Found ${scan.issuesFound} issues`);
return scan;
}
if (status === 'failed') {
throw new Error('Scan failed');
}
}
}
runScan('codebase_abc123', 'main');
```
## Related Pages
Authentication setup
Access scan results
CLI alternative
Automate scans
# Bitbucket Integration
Source: https://docs.vidocsecurity.com/bitbucket/coming-soon
Bitbucket integration is coming soon
Bitbucket integration is coming soon! We're working on bringing Vidoc's security scanning to Bitbucket Cloud and Bitbucket Server.
## Planned Features
When Bitbucket integration launches, you'll be able to:
* **Connect Bitbucket repositories** - Link your Bitbucket repos to Vidoc
* **Automatic PR scanning** - Scan pull requests automatically
* **PR comments** - Get security findings as PR comments
* **Auto-scan on push** - Trigger scans on default branch updates
* **Bitbucket Pipelines integration** - Native pipeline support
## Current Alternatives
While we work on Bitbucket integration, you can still scan Bitbucket repositories:
### Using the CLI
1. Clone your Bitbucket repository locally
2. Install and authenticate the Vidoc CLI
3. Run scans from your local machine
```bash theme={null}
# Install CLI
npm i -g @vidocsecurity/cli
# Authenticate
vidoc login
# Scan
cd your-bitbucket-repo
vidoc scan
```
### In Bitbucket Pipelines
Add Vidoc to your `bitbucket-pipelines.yml`:
```yaml theme={null}
image: node:20
pipelines:
default:
- step:
name: Security Scan
script:
- npm i -g @vidocsecurity/cli
- vidoc scan --fail-on high
pull-requests:
'**':
- step:
name: PR Security Scan
script:
- npm i -g @vidocsecurity/cli
- vidoc scan --fail-on high
```
Remember to add `VIDOC_API_KEY` to your repository variables:
1. Go to Repository Settings → Repository variables
2. Add `VIDOC_API_KEY` with your API key
3. Mark as "Secured"
See [CI/CD Integration](/cli/ci-cd) for detailed setup.
## Stay Updated
Want to be notified when Bitbucket integration launches?
1. Email us at [contact@vidocsecurity.com](mailto:contact@vidocsecurity.com)
2. Follow us on [Twitter](https://twitter.com/vidocsecurity)
3. Check our [blog](https://blog.vidocsecurity.com) for announcements
## Request Features
Have specific Bitbucket features you'd like to see? Let us know:
* Email: [contact@vidocsecurity.com](mailto:contact@vidocsecurity.com)
* Feature requests help us prioritize development
## Related Pages
GitHub integration (available now)
Scan any repo via CLI
Add to Bitbucket Pipelines
GitLab integration status
# CLI Authentication
Source: https://docs.vidocsecurity.com/cli/authentication
Authenticate the Vidoc CLI with your API token
The CLI requires authentication to scan your code and sync results with your Vidoc project.
## Get Your Token
1. Go to [app.vidocsecurity.com](https://app.vidocsecurity.com)
2. Select your project
3. Navigate to **Settings** → **API Keys**
4. Click **"Create API Key"**
5. Copy the token
Store your token securely. Don't commit it to version control.
## Login
### Interactive Login
```bash theme={null}
vidoc login
```
You'll be prompted to enter your token.
### Direct Login
Provide the token as an argument:
```bash theme={null}
vidoc login
```
### Single-Tenant Installations
For self-hosted Vidoc instances, specify the API URL:
```bash theme={null}
vidoc login --url https://your-vidoc-instance.com
```
## Profiles
Profiles let you manage multiple Vidoc configurations (e.g., different projects or environments).
### Create a Named Profile
```bash theme={null}
vidoc login --profile work
vidoc login --profile personal
```
### List Profiles
```bash theme={null}
vidoc config list-profiles
```
### Switch Profile
```bash theme={null}
vidoc config set-profile work
```
### Create Empty Profile
```bash theme={null}
vidoc config create-profile staging
```
### Delete Profile
```bash theme={null}
vidoc config delete-profile old-project
```
## View Current Configuration
See your current authentication status and settings:
```bash theme={null}
vidoc config show
```
## CI/CD Authentication
For CI/CD pipelines, pass the token directly:
```bash theme={null}
vidoc ci --token $VIDOC_TOKEN
```
Or use the `--token` flag with scan:
```bash theme={null}
vidoc scan --token $VIDOC_TOKEN
```
See [CI/CD Integration](/cli/ci-cd) for pipeline examples.
## Troubleshooting
### "Invalid token"
1. Verify the token was copied correctly
2. Check for extra whitespace
3. Ensure the token hasn't been revoked in the dashboard
### "Unauthorized"
The token may be associated with a deleted project. Create a new token in an active project.
## Related Pages
Install the CLI
Run scans
Manage tokens
CI/CD integration
# CI/CD Integration
Source: https://docs.vidocsecurity.com/cli/ci-cd
Integrate Vidoc security scanning into your CI/CD pipelines
Automate security scanning by integrating Vidoc into your CI/CD pipelines.
## CI Command
Use the dedicated `ci` command for automated environments:
```bash theme={null}
vidoc ci --token $VIDOC_TOKEN
```
The `ci` command runs in non-interactive mode, optimized for CI/CD pipelines.
## CI Command Options
| Option | Short | Description |
| ------------------ | ----- | ------------------------------------- |
| `--token ` | | Authentication token (required in CI) |
| `--force-reindex` | `-f` | Force complete reindex |
| `--only-indexing` | | Index only, skip full scan |
| `--profile ` | `-p` | Use named profile |
| `--api-url ` | | Override API URL (for single-tenant) |
| `--config ` | `-c` | Custom config file path |
## GitHub Actions
```yaml theme={null}
# .github/workflows/security.yml
name: Security Scan
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
vidoc-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install Vidoc CLI
run: npm i -g @vidocsecurity/cli
- name: Run Security Scan
run: vidoc ci --token ${{ secrets.VIDOC_TOKEN }}
```
### Store the Secret
1. Go to GitHub repo → Settings → Secrets → Actions
2. Click "New repository secret"
3. Name: `VIDOC_TOKEN`
4. Value: Your token from Vidoc dashboard
## GitLab CI
```yaml theme={null}
# .gitlab-ci.yml
security-scan:
image: node:20
stage: test
script:
- npm i -g @vidocsecurity/cli
- vidoc ci --token $VIDOC_TOKEN
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
```
### Store the Variable
1. Go to GitLab project → Settings → CI/CD → Variables
2. Add variable: `VIDOC_TOKEN`
3. Mark as "Masked" and "Protected"
## CircleCI
```yaml theme={null}
# .circleci/config.yml
version: 2.1
jobs:
security-scan:
docker:
- image: cimg/node:20.0
steps:
- checkout
- run:
name: Install Vidoc CLI
command: npm i -g @vidocsecurity/cli
- run:
name: Run Security Scan
command: vidoc ci --token $VIDOC_TOKEN
workflows:
security:
jobs:
- security-scan
```
## Jenkins
```groovy theme={null}
// Jenkinsfile
pipeline {
agent any
environment {
VIDOC_TOKEN = credentials('vidoc-token')
}
stages {
stage('Security Scan') {
steps {
sh 'npm i -g @vidocsecurity/cli'
sh 'vidoc ci --token $VIDOC_TOKEN'
}
}
}
}
```
## Azure DevOps
```yaml theme={null}
# azure-pipelines.yml
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
steps:
- task: NodeTool@0
inputs:
versionSpec: '20.x'
- script: npm i -g @vidocsecurity/cli
displayName: 'Install Vidoc CLI'
- script: vidoc ci --token $(VIDOC_TOKEN)
displayName: 'Security Scan'
```
## Bitbucket Pipelines
```yaml theme={null}
# bitbucket-pipelines.yml
image: node:20
pipelines:
default:
- step:
name: Security Scan
script:
- npm i -g @vidocsecurity/cli
- vidoc ci --token $VIDOC_TOKEN
```
## Single-Tenant Installations
For self-hosted Vidoc, include the API URL:
```bash theme={null}
vidoc ci --token $VIDOC_TOKEN --api-url https://your-vidoc-instance.com
```
## Best Practices
### Cache CLI Installation
Speed up pipelines by caching:
```yaml theme={null}
# GitHub Actions example
- uses: actions/cache@v4
with:
path: ~/.npm
key: npm-vidoc-cli
```
### Use Profiles for Different Environments
```bash theme={null}
# Create profiles for different projects
vidoc login --profile prod --token $PROD_TOKEN
vidoc login --profile staging --token $STAGING_TOKEN
# Use in CI
vidoc ci --profile prod
```
## Viewing Results
After CI scans complete:
1. Go to [app.vidocsecurity.com](https://app.vidocsecurity.com)
2. Select your project
3. View issues in the dashboard
4. Check PR-specific results in **Pull Requests**
## Troubleshooting
### "Unauthorized" in CI
1. Verify `VIDOC_TOKEN` secret is set correctly
2. Check the token hasn't been revoked
3. Ensure the token has proper permissions
### Scan Timeout
For large codebases, increase your CI job timeout. First scans take longer due to initial indexing.
### "No files found"
Ensure the checkout step runs before the scan and the working directory is correct.
## Related Pages
Scan command details
Token setup
Manage tokens
Review results
# CLI Installation
Source: https://docs.vidocsecurity.com/cli/installation
Install the Vidoc CLI for local and CI/CD scanning
The Vidoc CLI scans your codebase for security vulnerabilities from your terminal or CI/CD pipelines.
## Requirements
* **Node.js** 18 or higher
* **npm** or **yarn** package manager
## Installation
### npm (Recommended)
```bash theme={null}
npm i -g @vidocsecurity/cli
```
### yarn
```bash theme={null}
yarn global add @vidocsecurity/cli
```
### npx (No Installation)
Run without installing:
```bash theme={null}
npx @vidocsecurity/cli scan
```
## Verify Installation
Check that the CLI is installed:
```bash theme={null}
vidoc version
```
## Update
Update to the latest version:
```bash theme={null}
npm update -g @vidocsecurity/cli
```
## Uninstall
Remove the CLI:
```bash theme={null}
npm uninstall -g @vidocsecurity/cli
```
## Troubleshooting
### "command not found: vidoc"
Ensure the npm global bin directory is in your PATH:
```bash theme={null}
# Find npm global bin directory
npm config get prefix
# Add to your shell profile (.bashrc, .zshrc, etc.)
export PATH="$(npm config get prefix)/bin:$PATH"
```
### Permission Errors
If you get permission errors during installation:
```bash theme={null}
# Option 1: Fix npm permissions (recommended)
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
export PATH=~/.npm-global/bin:$PATH
# Option 2: Use sudo (not recommended)
sudo npm i -g @vidocsecurity/cli
```
## Next Steps
Login with your API token
Run your first scan
# CLI Scanning
Source: https://docs.vidocsecurity.com/cli/scanning
Scan your codebase for security vulnerabilities using the CLI
Use the Vidoc CLI to scan your code for security vulnerabilities from your terminal.
## Basic Scan
Navigate to your project directory and run:
```bash theme={null}
vidoc scan
```
Or simply:
```bash theme={null}
vidoc
```
The CLI indexes your code, scans for vulnerabilities, and syncs results with your Vidoc project.
## Scan Options
### Force Reindex
Force a complete reindex of the codebase (useful if files changed outside of git):
```bash theme={null}
vidoc scan --force-reindex
# or
vidoc scan -f
```
### Index Only
Index the codebase without running a full scan:
```bash theme={null}
vidoc scan --only-indexing
```
### Use a Specific Profile
Scan using a named profile:
```bash theme={null}
vidoc scan --profile work
# or
vidoc scan -p work
```
### Override Token
Use a specific token for this scan:
```bash theme={null}
vidoc scan --token
```
### Custom API URL
For single-tenant installations:
```bash theme={null}
vidoc scan --api-url https://your-vidoc-instance.com
```
### Custom Config File
Use a specific configuration file:
```bash theme={null}
vidoc scan --config /path/to/config
# or
vidoc scan -c /path/to/config
```
## How Scanning Works
```mermaid theme={null}
flowchart LR
A[vidoc scan] --> B[Index Files]
B --> C[Upload to Vidoc]
C --> D[AI Analysis]
D --> E[Results in Dashboard]
```
1. **Index** - CLI analyzes your local files
2. **Upload** - Code is sent to Vidoc for analysis
3. **Analyze** - AI scans for security vulnerabilities
4. **Results** - View findings in the Vidoc dashboard
## Viewing Results
After scanning, view results in the Vidoc dashboard:
1. Go to [app.vidocsecurity.com](https://app.vidocsecurity.com)
2. Select your project
3. Navigate to **Issues** to see findings
## CI Mode
For CI/CD pipelines, use the dedicated `ci` command:
```bash theme={null}
vidoc ci
```
This runs in non-interactive mode optimized for automated environments. See [CI/CD Integration](/cli/ci-cd) for details.
## Global Options
These options work with any command:
| Option | Short | Description |
| ------------------ | ----- | ----------------------------- |
| `--force-reindex` | `-f` | Force complete reindex |
| `--only-indexing` | | Index only, skip full scan |
| `--profile ` | `-p` | Use named profile |
| `--api-url ` | | Override API URL |
| `--token ` | | Override authentication token |
| `--config ` | `-c` | Custom config file path |
## Troubleshooting
### "Not authenticated"
Run `vidoc login` to authenticate, or pass `--token` with your scan.
### "No files found"
1. Check you're in the correct directory
2. Ensure the directory contains supported file types
3. Verify the project is properly initialized
### Scan Taking Too Long
1. Use `--only-indexing` first to see indexing progress
2. Large codebases take longer on first scan
3. Subsequent scans are faster (incremental indexing)
## Related Pages
Install the CLI
Configure tokens
Automate in pipelines
Review scan results
# AI Chat
Source: https://docs.vidocsecurity.com/dashboard/ai-chat
Get AI assistance understanding and fixing security issues
AI Chat provides an intelligent assistant to help you understand security vulnerabilities, get remediation guidance, and answer questions about your code.
## Accessing AI Chat
### From an Issue
1. Open any issue in the dashboard
2. Click **"Ask AI"**
3. Chat opens with the issue context preloaded
### From the Header
1. Click the **AI Chat** icon in the project header
2. Chat opens for general security questions
3. No specific issue context
## What AI Chat Can Do
### Explain Vulnerabilities
Ask about any security issue:
* "What is SQL injection?"
* "How can this XSS be exploited?"
* "What's the impact of this vulnerability?"
### Suggest Fixes
Get remediation guidance:
* "How do I fix this?"
* "Show me a secure implementation"
* "What library should I use for sanitization?"
### Analyze Code
Discuss code patterns:
* "Is this input validation sufficient?"
* "What security issues might this function have?"
* "How can I make this more secure?"
### Answer Security Questions
General security guidance:
* "What's the best practice for storing passwords?"
* "How should I handle user authentication?"
* "What security headers should I set?"
## Example Conversations
### Understanding an Issue
```
You: What does this SQL injection issue mean?
AI: This SQL injection vulnerability occurs because user input
is directly concatenated into the SQL query string. An attacker
could input something like `' OR '1'='1` to bypass authentication
or `'; DROP TABLE users; --` to delete data.
The vulnerable code builds the query like:
"SELECT * FROM users WHERE id = " + userId
To fix this, use parameterized queries...
```
### Getting a Fix
```
You: How do I fix this XSS vulnerability?
AI: For this XSS issue where user input is being rendered in HTML,
you have several options:
1. Use textContent instead of innerHTML:
element.textContent = userInput;
2. Use a sanitization library:
element.innerHTML = DOMPurify.sanitize(userInput);
3. Encode the output for the context...
```
## Context Awareness
When opened from an issue, AI Chat knows:
* The vulnerability type and description
* The affected code snippet
* The file path and location
* Your codebase language and framework
This context helps provide relevant, specific guidance.
## Tips for Better Responses
### Be Specific
```
❌ "How do I fix this?"
✅ "How do I fix this SQL injection using Prisma ORM?"
```
### Provide Context
```
❌ "Is this secure?"
✅ "Is this secure for a public API endpoint that handles payments?"
```
### Ask Follow-ups
The chat maintains conversation history, so you can:
* Ask clarifying questions
* Request more detail
* Ask for alternative approaches
## Limitations
AI Chat is designed to help, but:
* Always verify suggestions before implementing
* It may not know your specific business logic
* Complex architectural questions may need human review
* It cannot access external systems or run code
## Chat History
* Chat history persists during your session
* History is cleared when you close the browser
* Conversations are not stored permanently
## Related Pages
View and manage findings
Create learnings from issues
Learn about vulnerability types
Understand AI detection
# Issues
Source: https://docs.vidocsecurity.com/dashboard/issues
View and manage security findings across your repositories
The Issues page displays all security vulnerabilities found in your code. Review findings, mark false positives, and track remediation progress.
## Issues Overview
Security issues are sorted by severity:
| Severity | Description |
| --------------- | ------------------------------------------------------ |
| **Critical** | Immediate exploitation risk, requires urgent attention |
| **High** | Serious vulnerability that should be fixed soon |
| **Medium** | Moderate risk, plan to address |
| **Low** | Minor security weakness |
| **Informative** | Security best practice suggestion |
## Viewing Issues
The issue list shows:
* **Severity** - Color-coded severity level
* **Title** - Brief description of the vulnerability
* **Category** - Security category (XSS, SQLi, etc.)
* **File** - Location in your codebase
* **Repository** - Source repository
* **Status** - Open, Ignored, or Closed
### Issue Details
Click any issue to see:
* **Full Description** - Detailed explanation of the vulnerability
* **Code Snippet** - Highlighted vulnerable code with line numbers
* **Remediation** - Suggested fix or mitigation
* **Context** - Repository, branch, and file path
* **AI Analysis** - Vidoc's reasoning for flagging this issue
## Filtering Issues
Use filters to find specific issues:
* **Severity** - Filter by Critical, High, Medium, Low, Informative
* **Status** - Open, Ignored, Closed
* **Repository** - Specific repository
* **Branch** - Git branch
* **Category** - Security category (XSS, SQL Injection, etc.)
* **File path** - Search by file path pattern
## Managing Issues
### Mark as Fixed
When you've remediated a vulnerability:
1. Click **"Mark as Fixed"**
2. The issue moves to Closed status
3. If the vulnerability reappears, it will be reopened automatically
### Ignore an Issue
For false positives or accepted risks:
1. Click **"Ignore"**
2. Provide a reason (required)
3. Vidoc creates a [learning](/dashboard/learnings) to avoid similar false positives
Write clear, specific reasons when ignoring issues. This helps Vidoc learn your codebase patterns and improves future scan accuracy.
### Reopen an Issue
To reactivate a closed or ignored issue:
1. Filter to show Closed or Ignored issues
2. Click **"Reopen"** on the issue
3. The issue returns to Open status
## Bulk Actions
Select multiple issues to perform bulk operations:
1. Check the boxes next to issues
2. Use the bulk action dropdown:
* **Mark as Fixed** - Close selected issues
* **Ignore** - Ignore with a shared reason
* **Reopen** - Reactivate selected issues
## Ask AI
For complex security issues, use the AI assistant:
1. Click **"Ask AI"** on any issue
2. Ask questions about:
* How the vulnerability could be exploited
* Recommended remediation approaches
* Impact assessment
See [AI Chat](/dashboard/ai-chat) for more on the AI assistant.
## Issue Lifecycle
```mermaid theme={null}
stateDiagram-v2
[*] --> Open: Scan detects issue
Open --> Closed: Mark as Fixed
Open --> Ignored: Ignore (create learning)
Closed --> Open: Reopen / Redetected
Ignored --> Open: Reopen
```
## Related Pages
View issues by repository
Review false positive learnings
Get AI help with issues
View issues by PR
# Learnings
Source: https://docs.vidocsecurity.com/dashboard/learnings
AI-driven rules from ignored issues to reduce false positives
Learnings are rules Vidoc creates when you ignore issues. They help Vidoc avoid flagging similar false positives in future scans.
## How Learnings Work
```mermaid theme={null}
flowchart LR
A[Ignore Issue] --> B[Provide Reason]
B --> C[Learning Created]
C --> D[Future Scans]
D --> E[Similar Issues Filtered]
```
1. You find a false positive issue
2. Click **"Ignore"** and provide a reason
3. Vidoc creates a learning from the context
4. Future scans apply the learning automatically
5. Similar false positives are filtered out
## Creating Effective Learnings
When ignoring an issue, provide clear, specific reasons:
| Good Reason | Why It's Effective |
| ---------------------------------------------------- | ------------------------------ |
| "Input is sanitized by sanitizeHtml() in middleware" | Explains the security control |
| "This is a test file, not production code" | Identifies context |
| "User input is validated against allowlist" | Describes protection mechanism |
Better reasons create more accurate learnings. Be specific about why the issue is a false positive.
## Viewing Learnings
The Learnings page displays:
* **Learning ID** - Unique identifier
* **Reason** - Why the original issue was ignored
* **Created** - When the learning was created
* **Applied Count** - Number of issues this learning affects
### Learning Details
Click a learning to see:
* Original issue that triggered the learning
* All issues where this learning is applied
* Full context and code snippets
## Managing Learnings
### Delete a Learning
If a learning is too broad or no longer valid:
1. Click the learning
2. Click **"Delete Learning"**
3. Affected issues return to Open status
Deleting a learning may cause previously filtered issues to reappear in future scans.
### Review Applied Issues
To see which issues a learning affects:
1. Click the learning
2. View the **"Applied Issues"** section
3. Review if the learning is correctly applied
## Best Practices
* **Review learnings periodically** - Ensure they're still valid
* **Use specific reasons** - Vague reasons create imprecise learnings
* **Don't ignore real issues** - Only create learnings for true false positives
* **Check applied count** - High counts may indicate overly broad learnings
## Related Pages
Ignore issues to create learnings
Get AI help with issues
# Dashboard Overview
Source: https://docs.vidocsecurity.com/dashboard/overview
Navigate the Vidoc dashboard to manage security across your projects
The Vidoc dashboard is your central hub for managing code security across all repositories and projects.
## Dashboard Layout
### Project Selector
Switch between projects using the dropdown in the sidebar. Each project contains its own repositories, issues, and settings.
### Main Navigation
| Section | Purpose |
| ----------------- | ----------------------------------------- |
| **Issues** | All security findings across repositories |
| **Repositories** | Manage repos and run scans |
| **Pull Requests** | PR-specific security results |
| **Learnings** | False positive rules from ignored issues |
| **AI Chat** | Security assistant |
| **Settings** | API keys, team members, integrations |
## Key Metrics
The dashboard displays:
* **Open Issues** - Total unresolved security findings
* **Critical/High** - Issues requiring immediate attention
* **Recent Scans** - Latest scan activity
* **Repositories** - Connected repositories count
## Quick Actions
### Run a Scan
1. Go to **Repositories**
2. Click **"Scan"** on any repository
3. Monitor progress in the scan list
### Review Issues
1. Go to **Issues**
2. Filter by severity to prioritize
3. Click an issue for details
### Connect GitHub
1. Go to **Settings** → **Integrations**
2. Click **"Connect GitHub"**
3. Authorize and select repositories
## Projects
Projects group related repositories. Use projects to:
* Separate security scans by team or application
* Apply different settings per project
* Manage team access at the project level
See [Projects](/dashboard/projects) for project management.
## Related Pages
Review security findings
Manage repositories and scans
Connect GitHub integration
Manage API keys
# Projects
Source: https://docs.vidocsecurity.com/dashboard/projects
Organize repositories and manage security settings by project
Projects group related repositories together, allowing you to organize security scanning by team, application, or any structure that fits your workflow.
## Creating a Project
1. Click **"New Project"** in the sidebar
2. Enter a project name
3. Click **"Create"**
## Project Structure
Each project contains:
| Section | Description |
| ----------------- | ----------------------------------- |
| **Repositories** | Connected code repositories |
| **Issues** | Security findings across all repos |
| **Pull Requests** | PR-specific scan results |
| **Learnings** | False positive rules |
| **Settings** | API keys, integrations, team access |
## Managing Projects
### Switch Projects
Use the project dropdown in the sidebar to switch between projects.
### Rename a Project
1. Go to project **Settings**
2. Click **"General"**
3. Update the project name
4. Click **"Save"**
### Delete a Project
1. Go to project **Settings**
2. Scroll to **"Danger Zone"**
3. Click **"Delete Project"**
4. Confirm deletion
Deleting a project permanently removes all repositories, issues, and learnings associated with it.
## Project Organization
### By Application
Create one project per application:
```
├── Web App
│ ├── frontend repo
│ └── backend repo
├── Mobile App
│ └── mobile repo
└── Admin Dashboard
└── admin repo
```
### By Team
Organize by team ownership:
```
├── Team Alpha
│ ├── service-a
│ └── service-b
├── Team Beta
│ └── service-c
```
### By Environment
Separate by deployment environment:
```
├── Production
│ └── prod repos
├── Staging
│ └── staging repos
```
## Project Settings
### API Keys
Each project has its own API keys:
1. Go to **Settings** → **API Keys**
2. Create keys for CI/CD or CLI access
3. Keys are scoped to this project only
See [API Keys](/settings/api-keys) for details.
### Team Members
Manage who has access:
1. Go to **Settings** → **Team**
2. Invite members by email
3. Assign roles (Admin, Member, Viewer)
See [Team Members](/settings/team-members) for details.
### Integrations
Configure project-specific integrations:
1. Go to **Settings** → **Integrations**
2. Connect GitHub for this project
3. Each project can have different GitHub orgs
## Project Metrics
The project dashboard shows:
* **Total Issues** - Open security findings
* **Critical/High** - Priority issues count
* **Repositories** - Connected repos count
* **Recent Activity** - Latest scans and changes
## Best Practices
### Naming Conventions
Use clear, consistent names:
* `customer-portal` not `cp`
* `payment-service` not `svc1`
### Repository Grouping
Group repos that:
* Deploy together
* Share the same security context
* Are managed by the same team
### Learnings Scope
Remember that learnings are project-scoped:
* A learning in Project A doesn't affect Project B
* Consider this when organizing repos
## Related Pages
Add repos to projects
Manage project API keys
Manage access
Navigate the dashboard
# Pull Requests
Source: https://docs.vidocsecurity.com/dashboard/pull-requests
Review security scans on GitHub pull requests
The Pull Requests page shows security scan results for GitHub PRs, helping you catch issues before code is merged.
## Pull Request List
View all PRs with security scans:
| Column | Description |
| -------------- | ------------------------------------------------- |
| **PR** | PR number and title |
| **Repository** | Source repository |
| **Status** | Scan status (Pending, Scanning, Complete, Failed) |
| **Issues** | Number of security issues found |
| **Created** | When the PR was opened |
## PR Detail View
Click a PR to see:
* **Security issues** introduced in this PR
* **Code changes** that triggered each finding
* **Link to GitHub** for the full PR context
* **Scan history** for the PR
### PR-Specific Filtering
Issues shown are filtered to changes in the PR only. This helps you focus on new vulnerabilities rather than pre-existing issues.
## Scan Triggers
PRs are automatically scanned when:
1. **PR Created** - Initial scan on new PR
2. **PR Updated** - Re-scan when new commits are pushed
3. **Manual Trigger** - Click "Scan" on the PR
Auto-scan requires [GitHub Integration](/github/setup) to be configured.
## PR Status Indicators
| Status | Meaning |
| ------------ | ------------------------- |
| **Pending** | Scan queued |
| **Scanning** | Scan in progress |
| **Complete** | Scan finished |
| **Failed** | Scan encountered an error |
## GitHub PR Comments
When scans complete, Vidoc posts findings as PR comments:
* **Inline comments** on specific lines of code
* **Summary comment** with all findings
See [PR Comments](/github/pr-comments) to configure comment behavior.
## Enabling PR Scans
To scan PRs automatically:
1. [Connect GitHub](/github/setup)
2. Enable auto-scan for the repository
3. Create or update a PR
## Related Pages
View all security findings
Configure PR comment settings
Configure automatic scanning
Manage repositories
# Repositories
Source: https://docs.vidocsecurity.com/dashboard/repositories
Manage code repositories and run security scans
The Repositories page shows all repositories in your project. Add repositories, run scans, and view security issues for each repository.
## Repository List
View all repositories with:
* **Repository name** - Name from GitHub or custom label
* **Last scan** - When the repository was last scanned
* **Issues** - Open issue count
* **Status** - Scan status (Idle, Scanning, etc.)
## Adding Repositories
### Via GitHub Integration (Recommended)
1. Go to **Settings** → **Integrations**
2. Click **"Connect GitHub"** if not connected
3. Return to **Repositories** → **"Add Repository"**
4. Select repositories from the dropdown
### Manual Setup
For repositories not in GitHub:
1. Click **"Add Repository"**
2. Select **"Manual Setup"**
3. Follow CLI instructions to upload your code
## Running Scans
### Manual Scan
1. Find the repository in the list
2. Click **"Scan"**
3. Monitor progress in the scan indicator
### Automatic Scans
Enable auto-scanning for repositories:
1. Click the repository settings (gear icon)
2. Toggle **"Auto Scan"** on
3. Scans trigger on:
* New pull requests
* Pushes to the default branch
See [Auto Scan](/github/auto-scan) for configuration options.
## Repository Detail View
Click a repository to see:
* **Issues tab** - Security findings for this repository only
* **Scans tab** - History of all scans
* **Settings** - Repository-specific configuration
### Filtering Issues
Within a repository view:
* Filter by **branch** to see branch-specific issues
* Filter by **severity** to prioritize critical findings
* Filter by **status** to see open, ignored, or closed issues
## Repository Settings
Configure per-repository options:
| Setting | Description |
| ------------------ | ------------------------------------ |
| **Default Branch** | Branch to scan for baseline issues |
| **Auto Scan** | Enable automatic scanning on PR/push |
| **Ignored Paths** | File patterns to exclude from scans |
## Deleting Repositories
1. Click repository settings (gear icon)
2. Scroll to **"Danger Zone"**
3. Click **"Delete Repository"**
Deleting a repository removes all associated issues and scan history.
## Related Pages
View all issues across repositories
Configure automatic scanning
Connect GitHub for easier setup
Scan via command line
# Auto Scan
Source: https://docs.vidocsecurity.com/github/auto-scan
Configure automatic security scanning for GitHub repositories
Auto Scan automatically triggers security scans when code changes occur in your GitHub repositories.
## Scan Triggers
When enabled, auto-scan runs on:
| Event | Description |
| -------------------------- | -------------------------------- |
| **Pull Request Opened** | Scans new PRs immediately |
| **Pull Request Updated** | Re-scans when commits are pushed |
| **Push to Default Branch** | Scans merges to main/master |
## Enabling Auto Scan
### Per Repository
1. Go to **Repositories**
2. Click settings (gear icon) on a repository
3. Toggle **"Auto Scan"** on
### For All Repositories
1. Go to **Settings** → **Integrations** → **GitHub**
2. Enable **"Auto Scan for New Repositories"**
3. New repositories will have auto-scan enabled by default
## Configuration Options
### Default Branch Scanning
Control when default branch scans occur:
* **On merge** - Scan after PR merges (recommended)
* **On push** - Scan every push to default branch
* **Disabled** - Don't scan default branch automatically
### PR Scan Settings
Configure PR scanning behavior:
| Setting | Description |
| ------------------ | ------------------------------- |
| **Scan on open** | Scan when PR is created |
| **Scan on update** | Re-scan when new commits pushed |
| **Skip draft PRs** | Don't scan draft pull requests |
## Scan Frequency
Vidoc rate-limits scans to prevent abuse:
* **PR scans** - Immediate, one per PR update
* **Default branch** - Batched if multiple merges occur quickly
## Scan Status
Monitor auto-scan status:
1. **Webhook delivery** - Check GitHub webhook settings
2. **Scan history** - View in Repositories → \[Repo] → Scans
3. **PR status** - Check the Pull Requests page
## Disabling Auto Scan
### Per Repository
1. Go to **Repositories**
2. Click settings on the repository
3. Toggle **"Auto Scan"** off
### Temporarily
Use branch patterns to exclude branches:
1. Repository settings → **"Ignored Branches"**
2. Add patterns (e.g., `feature/*`)
## Troubleshooting
### Scans Not Triggering
1. Verify GitHub integration is connected
2. Check webhook delivery in GitHub repo settings
3. Ensure auto-scan is enabled for the repository
4. See [Troubleshooting](/github/troubleshooting)
### Duplicate Scans
If you see duplicate scans:
1. Check if CLI and auto-scan are both running
2. Verify webhook isn't configured multiple times
## Related Pages
Configure GitHub integration
Configure PR feedback
Manage repository settings
Fix GitHub issues
# PR Comments
Source: https://docs.vidocsecurity.com/github/pr-comments
Configure how Vidoc reports security findings in GitHub pull requests
Vidoc posts security findings directly to your GitHub pull requests, helping developers catch issues before merging.
## Comment Types
### Inline Comments
Posted on specific lines of code where issues are found:
* Shows vulnerability type and severity
* Links to full issue details in Vidoc
* Appears in the PR's "Files changed" view
### Summary Comment
A single comment summarizing all findings:
* Lists all issues found in the PR
* Groups by severity
* Posted once per scan
## Enabling PR Comments
1. [Connect GitHub](/github/setup) if not already connected
2. Go to **Settings** → **Integrations** → **GitHub**
3. Enable **"Post PR Comments"**
4. Configure comment preferences
## Configuration Options
| Setting | Description | Default |
| ---------------------- | --------------------------------------------- | ------- |
| **Inline comments** | Comment on specific code lines | Enabled |
| **Summary comment** | Post summary of all findings | Enabled |
| **Minimum severity** | Only comment on issues at or above this level | Low |
| **Comment on re-scan** | Update comments when PR is re-scanned | Enabled |
### Minimum Severity
Control noise by setting a minimum severity for PR comments:
* **Critical only** - Only comment on critical issues
* **High and above** - Critical + High
* **Medium and above** - Critical + High + Medium
* **Low and above** - All except Informative
* **All** - Include informative issues
Start with "Medium and above" and adjust based on your team's preferences.
## Comment Format
### Inline Comment Example
```
🔴 **Critical: SQL Injection**
User input flows directly into SQL query without sanitization.
**Remediation:** Use parameterized queries or an ORM.
[View in Vidoc →](https://app.vidocsecurity.com/...)
```
### Summary Comment Example
```
## Vidoc Security Scan Results
Found **3 issues** in this pull request:
| Severity | Issue | File |
|----------|-------|------|
| 🔴 Critical | SQL Injection | src/db.js:45 |
| 🟠 High | XSS | src/render.js:12 |
| 🟡 Medium | Open Redirect | src/auth.js:78 |
[View full report →](https://app.vidocsecurity.com/...)
```
## Managing Comments
### Resolve Comments
When you fix an issue:
1. Push the fix to the PR
2. Vidoc re-scans automatically (if auto-scan enabled)
3. Resolved issues are marked as such in comments
### Hide Comments
To hide Vidoc comments from a PR:
1. On GitHub, click the "..." menu on the comment
2. Select "Hide" → "Resolved"
This doesn't affect the issue status in Vidoc.
## PR Check Status
Vidoc can also report as a GitHub Check:
1. Go to **Settings** → **Integrations** → **GitHub**
2. Enable **"Report as Check"**
3. PRs show Vidoc status in the checks section
### Check Status Logic
| Result | Status |
| ------------------------- | --------------------------- |
| No issues | ✅ Passed |
| Issues below threshold | ✅ Passed (with annotations) |
| Issues at/above threshold | ❌ Failed |
Configure the failure threshold in GitHub integration settings.
## Disabling PR Comments
1. Go to **Settings** → **Integrations** → **GitHub**
2. Disable **"Post PR Comments"**
Or disable per-repository in repository settings.
## Related Pages
Configure GitHub integration
Configure automatic scanning
View PR scan results
Manage all security issues
# GitHub Setup
Source: https://docs.vidocsecurity.com/github/setup
Connect GitHub to enable automatic security scanning
Connect your GitHub account to Vidoc for automatic scanning of pull requests and repositories.
## Installation
### Step 1: Connect GitHub
1. Go to your project in the Vidoc dashboard
2. Navigate to **Settings** → **Integrations**
3. Click **"Connect GitHub"**
4. You'll be redirected to GitHub to authorize the Vidoc app
### Step 2: Authorize Access
On the GitHub authorization page:
1. Review the permissions requested
2. Select which organizations to grant access
3. Click **"Authorize"**
Vidoc requires read access to your code and write access to pull request comments.
### Step 3: Select Repositories
After authorization:
1. Return to Vidoc
2. Click **"Add Repository"**
3. Select repositories from the list
4. Choose which branches to scan
## Permissions Explained
| Permission | Purpose |
| ------------------------ | ----------------------------------------- |
| **Read: Code** | Scan your source code for vulnerabilities |
| **Read: Pull requests** | Detect new PRs to scan |
| **Write: Pull requests** | Post security findings as comments |
| **Read: Metadata** | Access repository information |
## Repository Settings
After adding a repository, configure scanning behavior:
### Default Branch
The branch scanned for baseline security posture. Usually `main` or `master`.
### Auto Scan
Enable to automatically scan:
* New pull requests
* Pushes to the default branch
See [Auto Scan](/github/auto-scan) for configuration options.
### PR Comments
Configure how Vidoc reports findings in pull requests:
* **Inline comments** - Comments on specific lines of code
* **Summary comment** - Overview of all findings in the PR
See [PR Comments](/github/pr-comments) for detailed settings.
## Multiple Organizations
To scan repositories from multiple GitHub organizations:
1. Go to **Settings** → **Integrations**
2. Click **"Add Organization"**
3. Authorize Vidoc for the new organization
4. Select repositories to add
## Troubleshooting
### "Repository not appearing in list"
1. Check that Vidoc is authorized for the repository's organization
2. Go to GitHub → Settings → Applications → Vidoc
3. Click **"Configure"** and add the missing repository
### "Scans not triggering"
1. Verify Auto Scan is enabled for the repository
2. Check webhook delivery in GitHub repository settings
3. See [Troubleshooting](/github/troubleshooting) for more solutions
### Revoking Access
To disconnect GitHub:
1. Go to Vidoc **Settings** → **Integrations**
2. Click **"Disconnect"** next to GitHub
3. Optionally, revoke access in GitHub Settings → Applications
## Next Steps
Configure automatic scanning triggers
Customize PR feedback settings
# GitHub Troubleshooting
Source: https://docs.vidocsecurity.com/github/troubleshooting
Solve common GitHub integration issues
Solutions for common problems with Vidoc's GitHub integration.
## Scans Not Triggering
### Check Integration Status
1. Go to **Settings** → **Integrations**
2. Verify GitHub shows as "Connected"
3. If disconnected, click **"Connect GitHub"**
### Verify Repository Settings
1. Go to **Repositories**
2. Click settings (gear) on the repository
3. Ensure **"Auto Scan"** is enabled
### Check Webhooks
1. Go to GitHub → Repository → Settings → Webhooks
2. Find the Vidoc webhook
3. Check **"Recent Deliveries"**
4. Look for failed deliveries (red X)
**Common webhook issues:**
* `401 Unauthorized` - Reconnect GitHub integration
* `404 Not Found` - Repository may not be configured
* `500 Server Error` - Temporary issue, should auto-retry
### Verify PR Settings
If PR scans aren't triggering:
1. Check if the PR is a draft (drafts may be skipped)
2. Verify the target branch is monitored
3. Check if the repository has auto-scan enabled
## Repository Not Appearing
### Check Organization Access
1. Go to GitHub → Settings → Applications → Vidoc
2. Click **"Configure"**
3. Verify the organization is listed
4. Add any missing repositories
### Request Organization Approval
If you don't have admin access:
1. Ask an organization admin to approve Vidoc
2. Go to GitHub → Organization → Settings → Third-party access
3. Approve the Vidoc application
### Refresh Repository List
1. In Vidoc, go to **Repositories**
2. Click **"Add Repository"**
3. Click **"Refresh"** to sync with GitHub
## PR Comments Not Posting
### Check Permissions
1. Go to GitHub → Settings → Applications → Vidoc
2. Verify write access to pull requests
3. Re-authorize if needed
### Check Comment Settings
1. Go to Vidoc **Settings** → **Integrations** → **GitHub**
2. Ensure **"Post PR Comments"** is enabled
3. Check the minimum severity setting
### Verify Issue Existence
Comments are only posted if issues are found:
1. Check the scan completed successfully
2. Review issues in the Vidoc dashboard
3. Verify issues meet the minimum severity threshold
## Authentication Errors
### "Bad Credentials" Error
1. Go to **Settings** → **Integrations**
2. Click **"Disconnect"** next to GitHub
3. Click **"Connect GitHub"**
4. Re-authorize the application
### "Resource Not Accessible"
The token may have expired or lost permissions:
1. Disconnect GitHub in Vidoc
2. In GitHub, revoke Vidoc's access (Settings → Applications)
3. Reconnect from Vidoc
## Scan Failures
### "Repository Not Found"
1. Verify the repository exists
2. Check Vidoc has access (not removed in GitHub)
3. Refresh the repository list
### "Branch Not Found"
1. Check the branch name is correct
2. Verify the branch exists in GitHub
3. Push the branch if it's local only
### "Clone Failed"
1. Repository may be too large
2. Check for submodules requiring separate auth
3. Try scanning a specific branch
## Rate Limiting
### GitHub API Rate Limits
If you see rate limit errors:
1. Wait for the rate limit to reset (usually 1 hour)
2. Reduce the number of concurrent scans
3. Contact support for enterprise rate limits
### Vidoc Rate Limits
1. Check if multiple scans are running
2. Avoid triggering scans on every commit
3. Use branch filters to reduce scan frequency
## Sync Issues
### Issues Not Syncing
If issues in Vidoc don't match GitHub:
1. Refresh the browser
2. Wait for scan to complete
3. Check for sync errors in scan history
### Stale Data
1. Click **"Sync"** on the repository
2. Wait for re-scan to complete
3. Clear browser cache if needed
## Quick Fixes
| Problem | Quick Fix |
| ---------------- | -------------------------------- |
| Not connected | Reconnect GitHub integration |
| Missing repos | Configure in GitHub app settings |
| No PR comments | Enable in integration settings |
| Webhook failures | Check delivery logs in GitHub |
| Scan stuck | Check scan history for errors |
## Getting Help
If issues persist:
1. Check the [Vidoc Status Page](https://status.vidocsecurity.com) for outages
2. Email support at [contact@vidocsecurity.com](mailto:contact@vidocsecurity.com)
3. Include:
* Repository URL
* Error messages
* Steps to reproduce
## Related Pages
Initial setup guide
Configure triggers
Comment settings
Manage repos
# GitLab Integration
Source: https://docs.vidocsecurity.com/gitlab/coming-soon
GitLab integration is coming soon
GitLab integration is coming soon! We're working on bringing the same seamless experience you love with GitHub to GitLab.
## Planned Features
When GitLab integration launches, you'll be able to:
* **Connect GitLab repositories** - Link your GitLab projects to Vidoc
* **Automatic MR scanning** - Scan merge requests automatically
* **MR comments** - Get security findings as MR comments
* **Auto-scan on push** - Trigger scans on default branch updates
## Current Alternatives
While we work on GitLab integration, you can still scan GitLab repositories:
### Using the CLI
1. Clone your GitLab repository locally
2. Install and authenticate the Vidoc CLI
3. Run scans from your local machine
```bash theme={null}
# Install CLI
npm i -g @vidocsecurity/cli
# Authenticate
vidoc login
# Scan
cd your-gitlab-repo
vidoc scan
```
### In GitLab CI/CD
Add Vidoc to your `.gitlab-ci.yml`:
```yaml theme={null}
security-scan:
image: node:20
stage: test
script:
- npm i -g @vidocsecurity/cli
- vidoc scan --fail-on high
variables:
VIDOC_API_KEY: $VIDOC_API_KEY
```
See [CI/CD Integration](/cli/ci-cd) for detailed setup.
## Stay Updated
Want to be notified when GitLab integration launches?
1. Email us at [contact@vidocsecurity.com](mailto:contact@vidocsecurity.com)
2. Follow us on [Twitter](https://twitter.com/vidocsecurity)
3. Check our [blog](https://blog.vidocsecurity.com) for announcements
## Request Features
Have specific GitLab features you'd like to see? Let us know:
* Email: [contact@vidocsecurity.com](mailto:contact@vidocsecurity.com)
* Feature requests help us prioritize development
## Related Pages
GitHub integration (available now)
Scan any repo via CLI
Add to GitLab CI
Bitbucket integration status
# How It Works
Source: https://docs.vidocsecurity.com/how-it-works
AI-powered security scanning that finds real vulnerabilities
Vidoc uses AI to find real security vulnerabilities in your code while minimizing false positives.
## Context Engine
At the heart of Vidoc is our **Context Engine** - AI that deeply understands your codebase. Unlike traditional scanners that match patterns, Vidoc's Context Engine analyzes how your code actually works.
This means:
* **Fewer false positives** - Findings are validated against your actual code context
* **Finds complex issues** - Detects vulnerabilities that pattern matching misses
* **Understands your codebase** - Considers your frameworks, libraries, and coding patterns
## What Vidoc Detects
### Attack Vulnerabilities
Security threats that can be directly exploited:
* SQL Injection
* Cross-Site Scripting (XSS)
* Command Injection
* Server-Side Request Forgery (SSRF)
* Path Traversal
* And more...
See [Attack Vulnerabilities](/security/attack-vulnerabilities) for the full list.
### Compliance Issues
Security weaknesses and misconfigurations:
* Hardcoded Secrets
* Weak Cryptography
* Insecure Transport
* Information Disclosure
* Misconfigurations
See [Compliance Issues](/security/compliance-issues) for the full list.
## Learnings
Vidoc gets smarter as you use it. When you mark an issue as a false positive, Vidoc creates a learning that feeds back into the Context Engine.
* Provide a reason when ignoring issues
* Learnings apply to future scans automatically
* Your team's knowledge improves detection accuracy
See [Learnings](/dashboard/learnings) for more details.
## Security & Privacy
* Your code is encrypted in transit and at rest
* Code is processed securely and not stored permanently
* Scan results are retained according to your settings
## Related Pages
Full list of detected issues
How learnings improve accuracy
Review scan results
Run your first scan
# Introduction
Source: https://docs.vidocsecurity.com/introduction
AI-powered code security that finds real vulnerabilities
## What is Vidoc?
Vidoc is a code security platform that uses AI to detect real security vulnerabilities in your source code. Unlike traditional static analysis tools that flood you with false positives, Vidoc validates each finding against your codebase context to surface only actionable issues.
## Key Capabilities
LLMs analyze your code to find vulnerabilities that pattern-based scanners miss
Each finding is validated against your codebase to reduce false positives
Teach Vidoc your codebase patterns to continuously improve accuracy
Get security feedback directly in your GitHub pull requests
## Who Uses Vidoc?
**AppSec Teams** use the Vidoc dashboard to:
* Configure security scanning for repositories
* Review and triage security findings
* Create learnings to reduce false positives
* Track security posture across projects
**Developers** interact with Vidoc through:
* GitHub PR comments with security feedback
* CLI for local scanning during development
* AI chat for understanding security issues
## How It Works
```mermaid theme={null}
flowchart LR
A[Your Code] --> B[Vidoc Scan]
B --> C[AI Detection]
C --> D[Context Validation]
D --> E[Real Issues]
E --> F[PR Comments / Dashboard]
```
1. **Scan** - Vidoc analyzes your code via GitHub integration or CLI
2. **Detect** - AI identifies potential security vulnerabilities
3. **Validate** - Each finding is validated against codebase context
4. **Report** - Real issues surface in the dashboard and PR comments
## Security Categories
Vidoc detects two main types of security issues:
| Type | Description | Examples |
| -------------------------- | ----------------------------------------- | -------------------------------------------------------- |
| **Attack Vulnerabilities** | Issues that can be directly exploited | XSS, SQL Injection, Command Injection, SSRF |
| **Compliance Issues** | Security weaknesses and misconfigurations | Hardcoded secrets, weak cryptography, insecure transport |
## Get Started
Run your first scan in 5 minutes
Connect GitHub for automatic PR scanning
Install the Vidoc CLI for local scanning
Learn about Vidoc's AI-powered detection
# Quickstart
Source: https://docs.vidocsecurity.com/quickstart
Run your first security scan in 5 minutes
This guide walks you through setting up Vidoc and running your first security scan.
## Prerequisites
* A GitHub account with repositories to scan
* Node.js 18+ (for CLI scanning)
## Step 1: Create an Account
1. Go to [app.vidocsecurity.com](https://app.vidocsecurity.com)
2. Sign in with your GitHub account
3. You'll be redirected to your dashboard
## Step 2: Create a Project
Projects group related repositories together. To create your first project:
1. Click **"New Project"** in the dashboard
2. Enter a project name (e.g., "My App")
3. Click **"Create"**
## Step 3: Connect GitHub
Connect your GitHub account to enable automatic scanning:
1. Go to **Settings** → **Integrations**
2. Click **"Connect GitHub"**
3. Authorize Vidoc to access your repositories
4. Select which repositories to scan
See [GitHub Setup](/github/setup) for detailed configuration options.
## Step 4: Add a Repository
1. Click **"Add Repository"** in your project
2. Select a repository from the list
3. Choose the default branch to scan
## Step 5: Run Your First Scan
### Option A: GitHub Integration (Recommended)
Once connected, Vidoc automatically scans:
* New pull requests
* Pushes to the default branch
Create a pull request to trigger your first scan.
### Option B: CLI Scan
Install and run the CLI for immediate results:
```bash theme={null}
# Install the CLI
npm i -g @vidocsecurity/cli
# Login with your API key
vidoc login
# Scan your code
vidoc scan
```
Get your API key from **Settings** → **API Keys** in the dashboard.
## Step 6: Review Results
After the scan completes:
1. Go to **Issues** in your project
2. Review the security findings
3. Click on an issue to see details:
* Vulnerability description
* Affected code snippet
* Remediation guidance
### Handling False Positives
If an issue is a false positive:
1. Click **"Ignore"** on the issue
2. Provide a reason (e.g., "Input is already sanitized")
3. Vidoc creates a learning to avoid similar false positives
## Next Steps
Learn to navigate the Vidoc dashboard
Configure PR feedback settings
Advanced CLI scanning options
Teach Vidoc your codebase patterns
# Attack Vulnerabilities
Source: https://docs.vidocsecurity.com/security/attack-vulnerabilities
Security vulnerabilities that can be directly exploited
Attack vulnerabilities are code patterns that allow malicious actors to perform unauthorized actions. These represent direct security threats.
## Injection Attacks
### SQL Injection (sqli)
**Severity:** Critical
User input incorporated into SQL queries without proper sanitization.
```javascript theme={null}
// Vulnerable
const query = `SELECT * FROM users WHERE id = ${userId}`;
// Fixed
const query = `SELECT * FROM users WHERE id = ?`;
db.query(query, [userId]);
```
**Impact:** Database theft, modification, or deletion.
***
### NoSQL Injection (nosql-injection)
**Severity:** Critical
User input in NoSQL database queries.
```javascript theme={null}
// Vulnerable
db.users.find({ user: req.body.user, pass: req.body.pass });
// Fixed - validate input types
const user = String(req.body.user);
const pass = String(req.body.pass);
```
**Impact:** Authentication bypass, data theft.
***
### Command Injection (command-injection)
**Severity:** Critical
User input passed to system commands.
```javascript theme={null}
// Vulnerable
exec(`ping ${userInput}`);
// Fixed - use parameterized APIs
execFile('ping', ['-c', '4', userInput]);
```
**Impact:** Full system compromise.
***
### Code Evaluation (code-evaluation)
**Severity:** Critical
Dynamic code execution with user input.
```javascript theme={null}
// Vulnerable
eval(userInput);
new Function(userInput)();
// Fixed - avoid eval entirely
JSON.parse(userInput); // for JSON data
```
**Impact:** Arbitrary code execution.
***
### Server-Side Template Injection (ssti)
**Severity:** Critical
User input in server-side templates.
```python theme={null}
# Vulnerable
template.render("Hello " + user_input)
# Fixed
template.render("Hello {{ name }}", name=user_input)
```
**Impact:** Remote code execution.
## Cross-Site Scripting (XSS)
**Severity:** High
User input rendered in HTML without proper encoding.
```javascript theme={null}
// Vulnerable
element.innerHTML = userInput;
// Fixed
element.textContent = userInput;
// Or use proper sanitization
element.innerHTML = DOMPurify.sanitize(userInput);
```
**Impact:** Session hijacking, phishing, malware distribution.
## Request Forgery
### Server-Side Request Forgery (ssrf)
**Severity:** High
Server makes requests to URLs controlled by user input.
```javascript theme={null}
// Vulnerable
fetch(userProvidedUrl);
// Fixed - validate against allowlist
const allowed = ['api.example.com'];
const url = new URL(userProvidedUrl);
if (!allowed.includes(url.hostname)) throw new Error('Invalid URL');
```
**Impact:** Internal network access, cloud metadata exposure.
***
### Cross-Site Request Forgery (csrf)
**Severity:** Medium
State-changing requests without CSRF protection.
```javascript theme={null}
// Vulnerable - no CSRF token
app.post('/transfer', (req, res) => { /* ... */ });
// Fixed - verify CSRF token
app.post('/transfer', csrfProtection, (req, res) => { /* ... */ });
```
**Impact:** Unauthorized actions on behalf of users.
## Access Control
### Insecure Direct Object Reference (idor)
**Severity:** High
Access to resources without proper authorization checks.
```javascript theme={null}
// Vulnerable
app.get('/document/:id', (req, res) => {
return db.documents.findById(req.params.id);
});
// Fixed
app.get('/document/:id', (req, res) => {
const doc = db.documents.findById(req.params.id);
if (doc.userId !== req.user.id) return res.status(403);
return doc;
});
```
**Impact:** Unauthorized data access.
***
### Broken Access Control (broken-access-control)
**Severity:** High
Missing or improper access control checks.
**Impact:** Privilege escalation, unauthorized actions.
***
### Broken Authentication (broken-authentication)
**Severity:** High
Flawed authentication implementation.
**Impact:** Account takeover, unauthorized access.
## File System
### Path Traversal (path-traversal)
**Severity:** High
User input in file paths allowing access outside intended directory.
```javascript theme={null}
// Vulnerable
const file = path.join('/uploads', userInput);
// Fixed
const file = path.join('/uploads', path.basename(userInput));
```
**Impact:** Arbitrary file read/write.
***
### Unrestricted File Upload (unrestricted-file-upload)
**Severity:** High
File uploads without proper validation.
**Impact:** Remote code execution, malware hosting.
## Other Attack Vectors
### Remote Code Execution (rce)
**Severity:** Critical
Any method allowing arbitrary code execution.
**Impact:** Full system compromise.
***
### XML External Entity (xxe)
**Severity:** High
XML parsing with external entity processing enabled.
```javascript theme={null}
// Vulnerable
xmlParser.parse(userXml);
// Fixed - disable external entities
xmlParser.parse(userXml, { noent: false, dtdload: false });
```
**Impact:** File disclosure, SSRF, denial of service.
***
### Open Redirect (open-redirect)
**Severity:** Medium
Redirects to URLs controlled by user input.
```javascript theme={null}
// Vulnerable
res.redirect(req.query.next);
// Fixed
const allowedHosts = ['example.com'];
const url = new URL(req.query.next, 'https://example.com');
if (!allowedHosts.includes(url.hostname)) throw new Error('Invalid redirect');
```
**Impact:** Phishing, credential theft.
***
### Prototype Pollution (prototype-pollution)
**Severity:** High
Modification of JavaScript object prototypes via user input.
**Impact:** Denial of service, potential RCE.
***
### Insecure Deserialization (insecure-deserialization)
**Severity:** Critical
Deserializing untrusted data without validation.
**Impact:** Remote code execution.
***
### Header Injection (header-injection)
**Severity:** Medium
User input in HTTP headers.
**Impact:** Response splitting, cache poisoning.
***
### Log Injection (log-injection)
**Severity:** Low
User input in log messages without sanitization.
**Impact:** Log forging, log analysis bypass.
***
### Session Fixation (session-fixation)
**Severity:** Medium
Session ID can be set by attacker.
**Impact:** Session hijacking.
***
### Race Condition (race-condition)
**Severity:** Medium
Time-of-check to time-of-use vulnerabilities.
**Impact:** Security bypass, data corruption.
***
### Denial of Service (dos)
**Severity:** Medium
Code patterns that can cause service unavailability.
**Impact:** Service disruption.
***
### Regex Injection (regex-injection)
**Severity:** Medium
User input in regular expressions (ReDoS risk).
**Impact:** Denial of service.
***
### PostMessage Misuse (postmessage-misuse)
**Severity:** Medium
Improper handling of cross-origin messages.
**Impact:** Cross-origin attacks.
## Related Pages
Security weaknesses
All security categories
View your findings
Detection explained
# Compliance Issues
Source: https://docs.vidocsecurity.com/security/compliance-issues
Security weaknesses and misconfigurations detected by Vidoc
Compliance issues are security weaknesses that may not be directly exploitable but weaken your security posture and violate security best practices.
## Secrets & Credentials
### Hardcoded Secrets (hardcoded-secrets)
**Severity:** High
Credentials, API keys, or tokens embedded in source code.
```javascript theme={null}
// Vulnerable
const apiKey = "sk-1234567890abcdef";
const dbPassword = "supersecret123";
// Fixed - use environment variables
const apiKey = process.env.API_KEY;
const dbPassword = process.env.DB_PASSWORD;
```
**Risk:** Credential exposure if code is leaked or shared.
**Detection:** Vidoc identifies patterns matching:
* API keys (AWS, GCP, Stripe, etc.)
* Database credentials
* JWT secrets
* OAuth tokens
* Private keys
## Cryptography
### Weak Cryptography (weak-cryptography)
**Severity:** Medium
Use of deprecated or weak cryptographic algorithms.
```javascript theme={null}
// Vulnerable
crypto.createHash('md5').update(data).digest();
crypto.createCipheriv('des', key, iv);
// Fixed
crypto.createHash('sha256').update(data).digest();
crypto.createCipheriv('aes-256-gcm', key, iv);
```
**Weak algorithms:**
* MD5, SHA1 (for security purposes)
* DES, 3DES, RC4
* RSA keys \< 2048 bits
* ECDSA keys \< 256 bits
***
### Weak Randomness (weak-randomness)
**Severity:** Medium
Using non-cryptographic random number generators for security purposes.
```javascript theme={null}
// Vulnerable
const token = Math.random().toString(36);
// Fixed
const token = crypto.randomBytes(32).toString('hex');
```
**Risk:** Predictable values can be guessed by attackers.
## Transport Security
### Insecure Transport (insecure-transport)
**Severity:** Medium
Data transmitted without encryption.
```javascript theme={null}
// Vulnerable
const url = 'http://api.example.com/data';
// Fixed
const url = 'https://api.example.com/data';
```
**Issues detected:**
* HTTP URLs for sensitive data
* Disabled SSL/TLS verification
* Weak TLS versions (TLS 1.0, 1.1)
* Missing HSTS headers
## Information Disclosure
### Information Disclosure (information-disclosure)
**Severity:** Medium
Code that may expose sensitive information.
```javascript theme={null}
// Vulnerable - detailed error messages
app.use((err, req, res, next) => {
res.status(500).json({ error: err.stack });
});
// Fixed
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({ error: 'Internal server error' });
});
```
**Types:**
* Stack traces in responses
* Debug information in production
* Verbose error messages
* Internal paths exposed
* Version information disclosure
## Configuration
### Misconfiguration (misconfiguration)
**Severity:** Varies
Insecure default settings or missing security configurations.
**Examples:**
* Debug mode in production
* Default credentials
* Excessive permissions
* Missing security headers
* Disabled security features
```javascript theme={null}
// Vulnerable
app.use(cors()); // Allows all origins
// Fixed
app.use(cors({
origin: ['https://example.com'],
credentials: true
}));
```
***
### Excessive Privileges (excessive-privileges)
**Severity:** Medium
Code running with more permissions than necessary.
**Examples:**
* Running as root/admin unnecessarily
* Overly broad IAM policies
* File permissions too permissive
## Supply Chain
### Supply Chain Risk (supply-chain-risk)
**Severity:** Varies
Risks from third-party dependencies.
**Detection includes:**
* Known vulnerable packages
* Typosquatting package names
* Packages with known malicious versions
* Outdated dependencies with security patches
**Mitigation:**
* Keep dependencies updated
* Use lockfiles
* Review new dependencies
* Use security scanning for packages
## Timing & Side Channels
### Timing Side Channel (timing-side-channel)
**Severity:** Low
Code vulnerable to timing attacks.
```javascript theme={null}
// Vulnerable - timing attack on password comparison
if (password === storedPassword) { /* ... */ }
// Fixed - constant-time comparison
crypto.timingSafeEqual(
Buffer.from(password),
Buffer.from(storedPassword)
);
```
**Risk:** Attackers can deduce secrets by measuring response times.
## Memory Safety
### Memory Safety (memory-safety)
**Severity:** High
Memory-related vulnerabilities in languages like C/C++.
**Types:**
* Buffer overflows
* Use-after-free
* Double-free
* Memory leaks with sensitive data
## Summary Table
| Category | Typical Severity | Key Risk |
| ---------------------- | ---------------- | ------------------------ |
| Hardcoded Secrets | High | Credential exposure |
| Weak Cryptography | Medium | Broken encryption |
| Weak Randomness | Medium | Predictable values |
| Insecure Transport | Medium | Data interception |
| Information Disclosure | Medium | Data leakage |
| Misconfiguration | Varies | Security bypass |
| Supply Chain Risk | Varies | Compromised dependencies |
| Timing Side Channel | Low | Secret disclosure |
## Related Pages
Exploitable threats
All categories
View findings
Detection explained
# Security Categories
Source: https://docs.vidocsecurity.com/security/overview
Overview of vulnerability categories detected by Vidoc
Vidoc detects security vulnerabilities across two main categories: Attack Vulnerabilities and Compliance Issues.
## Category Types
### Attack Vulnerabilities
Direct security threats that can be actively exploited by attackers. These represent code that allows unauthorized actions when malicious input is provided.
**Examples:** SQL Injection, XSS, Command Injection, SSRF
[View all Attack Vulnerabilities →](/security/attack-vulnerabilities)
### Compliance Issues
Security weaknesses, misconfigurations, and violations of security best practices. These may not be directly exploitable but weaken your security posture.
**Examples:** Hardcoded Secrets, Weak Cryptography, Insecure Transport
[View all Compliance Issues →](/security/compliance-issues)
## Severity Levels
Each issue is assigned a severity based on potential impact and exploitability:
| Severity | Description | Response |
| --------------- | -------------------------------------------- | ------------------- |
| **Critical** | Immediately exploitable, high impact | Fix immediately |
| **High** | Easily exploitable, significant impact | Fix soon |
| **Medium** | Exploitable with conditions, moderate impact | Plan to fix |
| **Low** | Difficult to exploit, limited impact | Fix when convenient |
| **Informative** | Best practice suggestion | Consider improving |
## Attack Vulnerabilities Summary
| Category | Description | Typical Severity |
| --------------------- | ------------------------------ | ---------------- |
| **SQL Injection** | User input in SQL queries | Critical |
| **XSS** | Unsanitized output to browsers | High |
| **Command Injection** | User input in system commands | Critical |
| **RCE** | Remote code execution | Critical |
| **SSRF** | Server-side request forgery | High |
| **Path Traversal** | File access with user input | High |
| **IDOR** | Direct object reference | High |
| **CSRF** | Cross-site request forgery | Medium |
| **XXE** | XML external entity injection | High |
| **Open Redirect** | Redirect to untrusted URLs | Medium |
[Full list with details →](/security/attack-vulnerabilities)
## Compliance Issues Summary
| Category | Description | Typical Severity |
| -------------------------- | -------------------------- | ---------------- |
| **Hardcoded Secrets** | Credentials in source code | High |
| **Weak Cryptography** | Insecure algorithms | Medium |
| **Weak Randomness** | Predictable random values | Medium |
| **Insecure Transport** | Missing HTTPS/TLS | Medium |
| **Information Disclosure** | Sensitive data exposure | Medium |
| **Misconfiguration** | Insecure settings | Varies |
| **Supply Chain Risk** | Vulnerable dependencies | Varies |
[Full list with details →](/security/compliance-issues)
## Detection Confidence
Vidoc uses AI to validate findings, resulting in confidence levels:
| Confidence | Meaning |
| ------------- | -------------------------------------- |
| **Confirmed** | AI validated the vulnerability exists |
| **Likely** | Strong indicators, needs manual review |
| **Possible** | Potential issue, investigate further |
## How Categories Are Assigned
```mermaid theme={null}
flowchart TB
A[Issue Detected] --> B{Data Flow?}
B -->|User Input| C[Attack Vulnerability]
B -->|No User Input| D{Security Weakness?}
D -->|Yes| E[Compliance Issue]
D -->|No| F[Not Reported]
C --> G[Severity Assessment]
E --> G
```
## Related Pages
Exploitable security threats
Security weaknesses
View findings in dashboard
AI detection explained
# API Keys
Source: https://docs.vidocsecurity.com/settings/api-keys
Create and manage API keys for CLI and CI/CD integration
API keys authenticate the Vidoc CLI and API requests. Each key is scoped to a specific project.
## Creating an API Key
1. Go to your project
2. Navigate to **Settings** → **API Keys**
3. Click **"Create API Key"**
4. Enter a name (e.g., "CI/CD Pipeline", "Local Development")
5. Click **"Create"**
6. Copy the key immediately
The API key is only shown once. Store it securely before closing the dialog.
## API Key Properties
| Property | Description |
| --------------- | ------------------------------------- |
| **Name** | Descriptive label for identification |
| **Project** | The project this key authenticates to |
| **Created** | When the key was created |
| **Last Used** | Most recent API call with this key |
| **Permissions** | All keys have full project access |
## Using API Keys
### CLI Authentication
```bash theme={null}
# Interactive login
vidoc login
# Enter your API key when prompted
# Direct login
vidoc login your-api-key
# Environment variable (recommended for CI/CD)
export VIDOC_API_KEY=your-api-key
vidoc scan
```
### API Authentication
Include the key in the `Authorization` header:
```bash theme={null}
curl -H "Authorization: Bearer your-api-key" \
https://api.vidocsecurity.com/v1/scan-workflows/start
```
## Managing API Keys
### View Keys
1. Go to **Settings** → **API Keys**
2. See all keys for the project
3. Check last used timestamps
### Revoke a Key
1. Find the key in the list
2. Click **"Revoke"**
3. Confirm revocation
Revoking a key immediately invalidates it. CI/CD pipelines using the key will fail.
### Rotate Keys
To rotate a key:
1. Create a new key
2. Update your CI/CD pipelines with the new key
3. Verify scans work with the new key
4. Revoke the old key
## Best Practices
### Use Descriptive Names
Name keys by their purpose:
* `github-actions-prod`
* `gitlab-ci-staging`
* `local-dev-alice`
### One Key Per Purpose
Create separate keys for:
* Each CI/CD pipeline
* Each developer (for local development)
* Each environment
This allows granular revocation if a key is compromised.
### Secure Storage
| Environment | Storage Method |
| ------------------ | ------------------------------------- |
| **GitHub Actions** | Repository Secrets |
| **GitLab CI** | CI/CD Variables (masked) |
| **Local** | Environment variable or `vidoc login` |
| **Jenkins** | Credentials plugin |
### Regular Rotation
Rotate keys periodically:
* Every 90 days for production
* After team member departure
* After any suspected compromise
## Permissions
All API keys have full access to their project:
* Start scans
* View issues
* Access scan results
Project-level permissions are managed through [Team Members](/settings/team-members).
## Rate Limits
API calls are rate-limited per project:
| Operation | Limit |
| ----------- | -------------- |
| Start scan | 10 per minute |
| Get status | 100 per minute |
| List issues | 100 per minute |
Contact support if you need higher limits.
## Troubleshooting
### "Invalid API key"
1. Verify the key was copied correctly
2. Check for extra whitespace
3. Ensure the key hasn't been revoked
4. Verify you're using the right project's key
### "API key expired"
API keys don't expire automatically. If you see this error:
1. The key may have been revoked
2. Create a new key
### "Rate limit exceeded"
1. Reduce scan frequency
2. Check for duplicate CI/CD triggers
3. Contact support for limit increase
## Related Pages
CLI login methods
Pipeline setup
Manage access
API documentation
# Team Members
Source: https://docs.vidocsecurity.com/settings/team-members
Invite team members and manage access to your project
Manage who has access to your Vidoc project and what they can do.
## Inviting Members
1. Go to **Settings** → **Team**
2. Click **"Invite Member"**
3. Enter their email address
4. Select a role
5. Click **"Send Invite"**
The invited user receives an email with instructions to join.
## Roles
| Role | Permissions |
| ---------- | -------------------------------------- |
| **Owner** | Full access, can delete project |
| **Admin** | Manage settings, members, integrations |
| **Member** | View/manage issues, run scans |
| **Viewer** | Read-only access to issues |
### Permission Details
| Action | Owner | Admin | Member | Viewer |
| ------------------- | ----- | ----- | ------ | ------ |
| View issues | ✅ | ✅ | ✅ | ✅ |
| Run scans | ✅ | ✅ | ✅ | ❌ |
| Ignore issues | ✅ | ✅ | ✅ | ❌ |
| Manage learnings | ✅ | ✅ | ✅ | ❌ |
| Create API keys | ✅ | ✅ | ❌ | ❌ |
| Manage integrations | ✅ | ✅ | ❌ | ❌ |
| Invite members | ✅ | ✅ | ❌ | ❌ |
| Change roles | ✅ | ✅ | ❌ | ❌ |
| Delete project | ✅ | ❌ | ❌ | ❌ |
## Managing Members
### View Team
1. Go to **Settings** → **Team**
2. See all members and their roles
3. Check pending invitations
### Change Role
1. Find the member in the list
2. Click the role dropdown
3. Select new role
4. Confirm change
### Remove Member
1. Find the member in the list
2. Click **"Remove"**
3. Confirm removal
Removed members immediately lose access. Any API keys they created remain active until revoked.
## Pending Invitations
### Resend Invite
1. Find the pending invitation
2. Click **"Resend"**
3. New email is sent
### Cancel Invite
1. Find the pending invitation
2. Click **"Cancel"**
3. Invitation is invalidated
## Single Sign-On (SSO)
SSO is available on Enterprise plans. Contact support to configure.
Enterprise organizations can use:
* SAML 2.0
* Google Workspace
* Okta
* Azure AD
## Best Practices
### Use Appropriate Roles
* **Viewer** for stakeholders who only need to see issues
* **Member** for developers who need to run scans
* **Admin** for security team leads
### Regular Audits
1. Review team members quarterly
2. Remove inactive users
3. Verify roles are appropriate
### Offboarding
When a team member leaves:
1. Remove them from the project
2. Revoke any API keys they created
3. Review recent activity for their account
## Multiple Projects
Each project has its own team:
* Members must be invited to each project
* Roles are project-specific
* A user can be Admin in one project and Viewer in another
## Related Pages
Manage projects
Manage API keys
Navigate dashboard