API Reference
The Recoger API allows you to integrate device compliance and service tracking into your workflows, automate reporting, and build custom integrations.
Base URL
https://api.recoger.app/v1 Authentication
All API requests require authentication using a Bearer token. You can use either:
- Access Token — Short-lived JWT from the login flow
- API Key — Long-lived key for server-to-server integrations
Using an Access Token
curl -X GET https://api.recoger.app/v1/devices \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIs..." Using an API Key
Generate API keys in Settings → API Keys. API keys have the prefix rk_.
curl -X GET https://api.recoger.app/v1/devices \
-H "Authorization: Bearer rk_live_..." Rate Limits
| Plan | Requests/minute | Requests/day |
|---|---|---|
| Startup | 60 | 10,000 |
| Scaleup | 120 | 50,000 |
| Enterprise | Custom | Custom |
Rate limit headers are included in all responses:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
X-RateLimit-Reset: 1704412800 Endpoints
Authentication
POST /auth/login
Authenticate and receive access tokens.
{
"username": "user@example.com",
"password": "your-password"
} Response:
{
"access_token": "eyJhbGciOiJSUzI1NiIs...",
"refresh_token": "eyJhbGciOiJSUzI1NiIs...",
"user_id": "user_abc123",
"tenant_id": "tenant_xyz789",
"role": "admin"
} POST /auth/refresh
Refresh an expired access token.
{
"refresh_token": "eyJhbGciOiJSUzI1NiIs..."
} POST /auth/logout
Invalidate the current access token.
Devices
GET /devices/my-devices
List devices owned by the current user.
Query parameters:
include_data— Include device data (default: true)skip— Pagination offset (default: 0)limit— Results per page (default: 50, max: 100)
GET /devices/tenant-devices
List all devices in the tenant. Admin only.
Query parameters:
user_id— Filter by userinclude_data— Include device data (default: true)skip/limit— Pagination
GET /devices/{device_id}
Get details for a specific device.
Response:
{
"id": "dev_abc123",
"device_name": "MacBook Pro 16\"",
"serial_number": "C02XL0GTJG5J",
"device_type": "laptop",
"os_type": "macos",
"os_version": "14.2.1",
"last_seen": "2026-01-04T10:30:00Z",
"user_id": "user_xyz",
"device_data": [...]
} POST /devices/report
Report device data from an agent. Creates or updates the device.
{
"device_name": "MacBook Pro 16\"",
"serial_number": "C02XL0GTJG5J",
"device_type": "laptop",
"os_type": "macos",
"os_version": "14.2.1",
"security": {
"disk_encryption": true,
"firewall_enabled": true,
"screen_lock_enabled": true
},
"hardware": {...},
"software": {...}
} GET /devices/{device_id}/data/{data_type}
Get device data by type (security, hardware, software, network, custom).
Services
GET /services
List services. Admins see all; users see services they own.
Query parameters:
status— Filter by statussearch— Search by nameskip/limit— Pagination
POST /services
Create a new service. Admin only.
{
"name": "GitHub",
"description": "Source code hosting",
"category": "development",
"url": "https://github.com",
"owner_id": "user_xyz",
"data_classification": "confidential",
"sso_enabled": true,
"mfa_enforced": true
} GET /services/{service_id}
Get service details.
PATCH /services/{service_id}
Update a service. Admin or service owner.
DELETE /services/{service_id}
Delete a service. Admin only.
GET /services/my-dashboard
Get dashboard stats for services owned by current user.
Security Reviews
GET /services/{service_id}/reviews
List reviews for a service.
POST /services/{service_id}/reviews
Create a security review.
{
"review_date": "2026-01-04",
"next_review_date": "2026-04-04",
"findings": "All security controls verified.",
"sso_enabled": true,
"mfa_enforced": true,
"audit_logging_enabled": true
} Users
GET /users/me
Get current user profile.
PATCH /users/me
Update current user profile.
GET /users (Admin)
List users in tenant.
Reports
POST /reports/compliance
Generate a compliance report.
{
"framework": "iso27001",
"format": "pdf",
"date_range": {
"start": "2025-01-01",
"end": "2026-01-01"
}
} GET /reports/{report_id}
Get a generated report.
GET /reports
List generated reports.
Audit Logs
GET /audit-logs
List audit log entries. Admin only.
Query parameters:
event_name— Filter by event typeresource_type— Filter by resource (device, service, user)actor_id— Filter by actorstart_date/end_date— Date range
Error Handling
Errors return appropriate HTTP status codes with a JSON body:
{
"detail": "Device not found"
} | Status | Meaning |
|---|---|
| 400 | Bad Request — Invalid parameters |
| 401 | Unauthorized — Invalid or missing token |
| 403 | Forbidden — Insufficient permissions |
| 404 | Not Found — Resource doesn't exist |
| 423 | Locked — Account locked |
| 429 | Too Many Requests — Rate limited |
| 500 | Internal Server Error |
OpenAPI Specification
The full OpenAPI spec is available at:
https://api.recoger.app/openapi.json Interactive documentation is available at:
https://api.recoger.app/docs SDKs & Libraries
Official SDKs are coming soon. In the meantime, the API works with any HTTP client.
Example using Python:
import requests
api_key = "rk_live_..."
headers = {"Authorization": f"Bearer {api_key}"}
response = requests.get(
"https://api.recoger.app/v1/devices/tenant-devices",
headers=headers
)
devices = response.json()