The Elder REST API provides comprehensive access to all Elder functionality through RESTful HTTP endpoints.
http://localhost:5000/api/v1
Elder supports multiple authentication methods:
- Local Authentication: Username/password (development)
- API Keys: Bearer token authentication (recommended for automation)
- SAML/OAuth2: Enterprise SSO (Professional/Enterprise tiers)
- LDAP: Directory service integration (Enterprise tier)
curl -H "Authorization: Bearer YOUR_API_KEY" \
http://localhost:5000/api/v1/entitiesPOST /api/v1/auth/login- User loginPOST /api/v1/auth/register- User registrationPOST /api/v1/auth/logout- User logoutPOST /api/v1/auth/refresh- Refresh access tokenGET /api/v1/profile- Get current user profilePUT /api/v1/profile- Update current user profile
GET /api/v1/organizations- List organizationsPOST /api/v1/organizations- Create organizationGET /api/v1/organizations/{id}- Get organization detailsPUT /api/v1/organizations/{id}- Update organization (full)PATCH /api/v1/organizations/{id}- Update organization (partial)DELETE /api/v1/organizations/{id}- Delete organizationGET /api/v1/organizations/{id}/children- Get child organizationsGET /api/v1/organizations/{id}/hierarchy- Get organization hierarchyGET /api/v1/organizations/{id}/entities- Get organization entitiesGET /api/v1/organizations/{id}/issues- Get organization issuesGET /api/v1/organizations/{id}/projects- Get organization projectsGET /api/v1/organizations/{id}/secrets- Get organization secretsGET /api/v1/organizations/{id}/users- Get organization usersGET /api/v1/organizations/{id}/dependencies- Get organization dependenciesGET /api/v1/organization-tree- Get full organization tree
GET /api/v1/entities- List entitiesPOST /api/v1/entities- Create entityGET /api/v1/entities/{id}- Get entity detailsPUT /api/v1/entities/{id}- Update entity (full)PATCH /api/v1/entities/{id}- Update entity (partial)DELETE /api/v1/entities/{id}- Delete entityGET /api/v1/entities/{id}/dependencies- Get entity dependenciesPATCH /api/v1/entities/{id}/attributes- Update entity attributesGET /api/v1/entities/{id}/issues- Get entity issuesGET /api/v1/entities/{id}/metadata- Get entity metadataGET /api/v1/entity-types- List available entity typesGET /api/v1/entity-types/{type}- Get entity type details
GET /api/v1/dependencies- List all dependenciesPOST /api/v1/dependencies- Create dependencyGET /api/v1/dependencies/{id}- Get dependency detailsPUT /api/v1/dependencies/{id}- Update dependencyDELETE /api/v1/dependencies/{id}- Delete dependency
GET /api/v1/identities- List identitiesPOST /api/v1/identities- Create identityGET /api/v1/identities/{id}- Get identity detailsPUT /api/v1/identities/{id}- Update identityPATCH /api/v1/identities/{id}- Update identity (partial)DELETE /api/v1/identities/{id}- Delete identity
GET /api/v1/issues- List issuesPOST /api/v1/issues- Create issueGET /api/v1/issues/{id}- Get issue detailsPUT /api/v1/issues/{id}- Update issuePATCH /api/v1/issues/{id}- Update issue (partial)DELETE /api/v1/issues/{id}- Delete issuePOST /api/v1/issues/{id}/comments- Add commentGET /api/v1/issues/{id}/comments- Get commentsDELETE /api/v1/issues/{id}/comments/{comment_id}- Delete commentPOST /api/v1/issues/{id}/labels- Add label to issueDELETE /api/v1/issues/{id}/labels/{label_id}- Remove label from issuePOST /api/v1/issues/{id}/entities- Link entity to issueDELETE /api/v1/issues/{id}/entities/{entity_id}- Unlink entity from issueGET /api/v1/issues/{id}/timeline- Get issue timeline
GET /api/v1/projects- List projectsPOST /api/v1/projects- Create projectGET /api/v1/projects/{id}- Get project detailsPUT /api/v1/projects/{id}- Update projectDELETE /api/v1/projects/{id}- Delete projectGET /api/v1/projects/{id}/issues- Get project issuesGET /api/v1/milestones- List milestonesPOST /api/v1/milestones- Create milestoneGET /api/v1/milestones/{id}- Get milestone detailsPUT /api/v1/milestones/{id}- Update milestoneDELETE /api/v1/milestones/{id}- Delete milestone
GET /api/v1/labels- List labelsPOST /api/v1/labels- Create labelGET /api/v1/labels/{id}- Get label detailsPUT /api/v1/labels/{id}- Update labelDELETE /api/v1/labels/{id}- Delete label
GET /api/v1/secrets- List secretsPOST /api/v1/secrets- Create secretGET /api/v1/secrets/{id}- Get secret detailsPUT /api/v1/secrets/{id}- Update secretDELETE /api/v1/secrets/{id}- Delete secretPOST /api/v1/secrets/test-connection- Test secrets provider connectionGET /api/v1/secrets/providers- List available secrets providersGET /api/v1/secrets/{id}/versions- Get secret versions (versioned providers)
GET /api/v1/builtin-secrets- List built-in secretsPOST /api/v1/builtin-secrets- Create built-in secretGET /api/v1/builtin-secrets/{path}- Get built-in secret by pathPUT /api/v1/builtin-secrets/{path}- Update built-in secretDELETE /api/v1/builtin-secrets/{path}- Delete built-in secretPOST /api/v1/builtin-secrets/test-connection- Test built-in secrets connection
GET /api/v1/api-keys- List API keysPOST /api/v1/api-keys- Create API keyGET /api/v1/api-keys/{id}- Get API key detailsPUT /api/v1/api-keys/{id}- Update API keyDELETE /api/v1/api-keys/{id}- Delete API keyPOST /api/v1/api-keys/{id}/rotate- Rotate API keyPOST /api/v1/api-keys/{id}/disable- Disable API key
GET /api/v1/keys- List encryption keysPOST /api/v1/keys- Create encryption keyGET /api/v1/keys/{id}- Get key detailsPUT /api/v1/keys/{id}- Update keyDELETE /api/v1/keys/{id}- Delete keyPOST /api/v1/keys/{id}/rotate- Rotate encryption key
GET /api/v1/iam/providers- List IAM providersPOST /api/v1/iam/providers- Create IAM providerGET /api/v1/iam/providers/{id}- Get provider detailsPUT /api/v1/iam/providers/{id}- Update providerDELETE /api/v1/iam/providers/{id}- Delete providerPOST /api/v1/iam/providers/{id}/test- Test provider connectivityPOST /api/v1/iam/providers/{id}/sync- Sync provider resources
GET /api/v1/iam/providers/{id}/users- List users from providerPOST /api/v1/iam/providers/{id}/users- Create userGET /api/v1/iam/providers/{id}/users/{user_id}- Get user detailsPUT /api/v1/iam/providers/{id}/users/{user_id}- Update userDELETE /api/v1/iam/providers/{id}/users/{user_id}- Delete user
GET /api/v1/iam/providers/{id}/roles- List roles from providerPOST /api/v1/iam/providers/{id}/roles- Create roleGET /api/v1/iam/providers/{id}/roles/{role_id}- Get role detailsPUT /api/v1/iam/providers/{id}/roles/{role_id}- Update roleDELETE /api/v1/iam/providers/{id}/roles/{role_id}- Delete role
GET /api/v1/iam/providers/{id}/policies- List policiesPOST /api/v1/iam/providers/{id}/policies- Create policyGET /api/v1/iam/providers/{id}/policies/{policy_id}- Get policy detailsDELETE /api/v1/iam/providers/{id}/policies/{policy_id}- Delete policy
POST /api/v1/iam/providers/{id}/users/{user_id}/policies/{policy_id}- Attach policy to userDELETE /api/v1/iam/providers/{id}/users/{user_id}/policies/{policy_id}- Detach policy from userPOST /api/v1/iam/providers/{id}/roles/{role_id}/policies/{policy_id}- Attach policy to roleDELETE /api/v1/iam/providers/{id}/roles/{role_id}/policies/{policy_id}- Detach policy from roleGET /api/v1/iam/providers/{id}/users/{user_id}/policies- List user policiesGET /api/v1/iam/providers/{id}/roles/{role_id}/policies- List role policies
POST /api/v1/iam/providers/{id}/users/{user_id}/access-keys- Create access keyGET /api/v1/iam/providers/{id}/users/{user_id}/access-keys- List access keysDELETE /api/v1/iam/providers/{id}/users/{user_id}/access-keys/{key_id}- Delete access key
GET /api/v1/iam/providers/{id}/groups- List groupsPOST /api/v1/iam/providers/{id}/groups- Create groupDELETE /api/v1/iam/providers/{id}/groups/{group_id}- Delete groupPOST /api/v1/iam/providers/{id}/groups/{group_id}/users/{user_id}- Add user to groupDELETE /api/v1/iam/providers/{id}/groups/{group_id}/users/{user_id}- Remove user from group
GET /api/v1/google-workspace/users- List Google Workspace usersGET /api/v1/google-workspace/users/{id}- Get user detailsGET /api/v1/google-workspace/groups- List groupsGET /api/v1/google-workspace/groups/{id}- Get group detailsPOST /api/v1/google-workspace/sync- Sync Google WorkspaceGET /api/v1/google-workspace/status- Get sync status
GET /api/v1/networking/networks- List networking resourcesPOST /api/v1/networking/networks- Create network resourceGET /api/v1/networking/networks/{id}- Get network detailsPUT /api/v1/networking/networks/{id}- Update networkDELETE /api/v1/networking/networks/{id}- Delete network (soft or hard)
GET /api/v1/networking/topology/connections- List topology connectionsPOST /api/v1/networking/topology/connections- Create topology connectionGET /api/v1/networking/topology/connections/{id}- Get connection detailsDELETE /api/v1/networking/topology/connections/{id}- Delete connection
GET /api/v1/networking/mappings- List entity-network mappingsPOST /api/v1/networking/mappings- Map entity to networkGET /api/v1/networking/mappings/{id}- Get mapping detailsDELETE /api/v1/networking/mappings/{id}- Delete mapping
GET /api/v1/networking/topology/graph- Get network topology graph
GET /api/v1/resource-roles- List resource rolesPOST /api/v1/resource-roles- Assign resource roleGET /api/v1/resource-roles/{id}- Get resource role detailsPUT /api/v1/resource-roles/{id}- Update resource roleDELETE /api/v1/resource-roles/{id}- Remove resource roleGET /api/v1/resource-roles/check- Check user's role for resource
GET /api/v1/metadata/entity/{entity_id}- List entity metadata fieldsPOST /api/v1/metadata/entity/{entity_id}/fields- Set entity metadata fieldGET /api/v1/metadata/entity/{entity_id}/fields/{field_name}- Get entity metadata fieldDELETE /api/v1/metadata/entity/{entity_id}/fields/{field_name}- Delete entity metadata fieldGET /api/v1/metadata/organization/{org_id}- List organization metadata fieldsPOST /api/v1/metadata/organization/{org_id}/fields- Set organization metadata fieldGET /api/v1/metadata/organization/{org_id}/fields/{field_name}- Get organization metadata fieldDELETE /api/v1/metadata/organization/{org_id}/fields/{field_name}- Delete organization metadata field
GET /api/v1/graph- Get complete entity graphGET /api/v1/graph/organization/{org_id}- Get organization graphGET /api/v1/graph/entity/{entity_id}- Get entity-centric graphGET /api/v1/graph/dependency-chain/{entity_id}- Get dependency chainGET /api/v1/graph/impact-analysis/{entity_id}- Get impact analysis
GET /api/v1/lookup/entity/{unique_id}- Lookup entity by unique IDGET /api/v1/lookup/external/{provider}/{external_id}- Lookup by external IDGET /api/v1/lookup/organization/{unique_id}- Lookup organization by unique IDGET /api/v1/lookup/user/{username}- Lookup user by username
GET /api/v1/search- Global searchGET /api/v1/search/entities- Search entitiesGET /api/v1/search/organizations- Search organizations
GET /api/v1/discovery/jobs- List discovery jobsPOST /api/v1/discovery/jobs- Create discovery jobGET /api/v1/discovery/jobs/{id}- Get job detailsPUT /api/v1/discovery/jobs/{id}- Update jobDELETE /api/v1/discovery/jobs/{id}- Delete jobPOST /api/v1/discovery/jobs/{id}/run- Run discovery job
GET /api/v1/webhooks- List webhooksPOST /api/v1/webhooks- Create webhookGET /api/v1/webhooks/{id}- Get webhook detailsPUT /api/v1/webhooks/{id}- Update webhookDELETE /api/v1/webhooks/{id}- Delete webhookPOST /api/v1/webhooks/{id}/test- Test webhookGET /api/v1/webhooks/{id}/deliveries- Get webhook deliveries
GET /api/v1/backups- List backupsPOST /api/v1/backups- Create backupGET /api/v1/backups/{id}- Get backup detailsDELETE /api/v1/backups/{id}- Delete backupPOST /api/v1/backups/{id}/restore- Restore from backupPOST /api/v1/backups/{id}/download- Download backupGET /api/v1/backups/schedule- Get backup schedule
POST /api/v1/sync/aws- Sync AWS resourcesPOST /api/v1/sync/gcp- Sync GCP resourcesPOST /api/v1/sync/kubernetes- Sync Kubernetes resources
GET /api/v1/audit/logs- List audit logsGET /api/v1/audit/logs/{id}- Get audit log detailsGET /api/v1/audit/export- Export audit logs
GET /api/v1/users- List users (admin)POST /api/v1/users- Create user (admin)GET /api/v1/users/{id}- Get user details (admin)PUT /api/v1/users/{id}- Update user (admin)DELETE /api/v1/users/{id}- Delete user (admin)
Manage hierarchical organizational structures (Company → Department → Teams).
GET /api/v1/organizationsQuery Parameters:
page(int): Page number (default: 1)per_page(int): Items per page (default: 50, max: 1000)parent_id(int): Filter by parent organization IDname(string): Filter by name (partial match)
Response:
{
"items": [
{
"id": 1,
"name": "Engineering",
"description": "Engineering department",
"parent_id": null,
"ldap_dn": "ou=Engineering,dc=example,dc=com",
"saml_group": "eng@example.com",
"owner_identity_id": 10,
"owner_group_id": 5,
"created_at": "2025-10-01T10:00:00Z",
"updated_at": "2025-10-01T10:00:00Z"
}
],
"total": 100,
"page": 1,
"per_page": 50,
"pages": 2
}POST /api/v1/organizationsRequest Body:
{
"name": "Platform Team",
"description": "Platform engineering team",
"parent_id": 1,
"ldap_dn": "ou=Platform,ou=Engineering,dc=example,dc=com",
"owner_identity_id": 10
}Track infrastructure and organizational resources.
datacenter- Physical or virtual datacentersvpc- Virtual Private Cloudssubnet- Network subnetscompute- Servers, VMs, containersnetwork- Load balancers, VPNs, firewallsuser- Users and service accountssecurity_issue- Vulnerabilities and CVEs
GET /api/v1/entitiesQuery Parameters:
page,per_page- Paginationentity_type- Filter by typeorganization_id- Filter by organizationname- Filter by name (partial match)is_active- Filter by active status
POST /api/v1/entitiesRequest Body:
{
"name": "web-server-01",
"entity_type": "compute",
"organization_id": 1,
"description": "Production web server",
"attributes": {
"hostname": "web01.example.com",
"ip": "10.0.1.10",
"os": "Ubuntu 22.04",
"cpu": 4,
"memory_gb": 16
},
"tags": ["production", "web", "us-east-1"],
"is_active": true
}Manage network resources and topology connections.
datacenter- Physical or virtual datacenterscloud_region- Cloud provider regionsvpc- Virtual Private Cloudssubnet- Network subnetsvpn- VPN connectionsdirect_connect- Direct connections (AWS Direct Connect, Azure ExpressRoute)peering- Network peering connectionstransit_gateway- Transit gatewaysload_balancer- Load balancersfirewall- Firewalls and security groups
GET /api/v1/networking/networksQuery Parameters:
organization_id(int): Filter by organizationnetwork_type(string): Filter by network typeparent_id(int): Filter by parent networkregion(string): Filter by regionis_active(boolean): Filter by active status (default: true)limit(int): Maximum results (default: 100)offset(int): Offset for pagination (default: 0)
Response:
{
"networks": [
{
"id": 1,
"name": "Production VPC",
"network_type": "vpc",
"organization_id": 1,
"description": "Production VPC in us-east-1",
"parent_id": null,
"region": "us-east-1",
"location": "AWS us-east-1",
"poc": "network-team@example.com",
"organizational_unit": "Infrastructure",
"attributes": {
"cidr": "10.0.0.0/16",
"ipv6_cidr": "2600:1f18::/56"
},
"status_metadata": {
"state": "available"
},
"tags": ["production", "vpc"],
"is_active": true,
"created_at": "2025-10-01T10:00:00Z",
"updated_at": "2025-10-01T10:00:00Z"
}
],
"total": 50,
"limit": 100,
"offset": 0
}POST /api/v1/networking/networksRequest Body:
{
"name": "Production VPC",
"network_type": "vpc",
"organization_id": 1,
"description": "Production VPC in us-east-1",
"region": "us-east-1",
"location": "AWS us-east-1",
"poc": "network-team@example.com",
"attributes": {
"cidr": "10.0.0.0/16",
"provider": "aws"
},
"tags": ["production", "vpc"]
}POST /api/v1/networking/topology/connectionsRequest Body:
{
"source_network_id": 1,
"target_network_id": 2,
"connection_type": "vpn",
"bandwidth": "100Mbps",
"latency": "50ms",
"metadata": {
"encryption": "AES-256",
"protocol": "IPSec"
}
}GET /api/v1/networking/topology/graph?organization_id=1&include_entities=trueResponse:
{
"nodes": [
{
"id": "network_1",
"label": "Production VPC",
"type": "vpc",
"group": "network",
"region": "us-east-1"
},
{
"id": "entity_10",
"label": "web-server-01",
"type": "compute",
"group": "entity"
}
],
"edges": [
{
"from": "network_1",
"to": "network_2",
"label": "VPN",
"type": "vpn",
"bandwidth": "100Mbps"
}
]
}Elder's native secrets management with encryption at rest.
GET /api/v1/builtin-secrets?organization_id=1&prefix=/app/Response:
{
"secrets": [
{
"path": "/app/db/password",
"description": "Database password",
"secret_type": "password",
"tags": ["production", "database"],
"created_at": "2025-10-01T10:00:00Z",
"updated_at": "2025-10-01T10:00:00Z",
"expires_at": null,
"version": 1,
"value_masked": "***MASKED***"
}
]
}POST /api/v1/builtin-secretsRequest Body:
{
"name": "/app/db/password",
"value": "super-secret-password",
"organization_id": 1,
"description": "Database password",
"secret_type": "password",
"tags": ["production", "database"],
"expires_at": "2026-01-01T00:00:00Z"
}Secret Types:
password- Passwords and credentialsapi_key- API keys and tokenscertificate- SSL/TLS certificatesssh_key- SSH private keysencryption_key- Encryption keystoken- Generic tokensother- Other secret types
Manage IAM users, roles, and policies across AWS, GCP, Azure, and Kubernetes.
aws_iam- AWS IAMgcp_iam- GCP IAMazure_ad- Azure Active Directorykubernetes- Kubernetes RBAC
POST /api/v1/iam/providersRequest Body (AWS IAM):
{
"name": "AWS Production IAM",
"provider_type": "aws_iam",
"description": "Production AWS IAM integration",
"config": {
"region": "us-east-1",
"access_key_id": "AKIA...",
"secret_access_key": "..."
}
}Request Body (GCP IAM):
{
"name": "GCP Production IAM",
"provider_type": "gcp_iam",
"description": "Production GCP IAM integration",
"config": {
"project_id": "my-project",
"credentials": {
"type": "service_account",
"project_id": "my-project",
"private_key_id": "...",
"private_key": "...",
"client_email": "...",
"client_id": "..."
}
}
}GET /api/v1/iam/providers/1/users?limit=100Response:
{
"users": [
{
"user_id": "john.doe",
"username": "john.doe",
"display_name": "John Doe",
"email": "john.doe@example.com",
"created_at": "2025-10-01T10:00:00Z",
"tags": {"department": "engineering"}
}
],
"next_token": "..."
}POST /api/v1/iam/providers/1/usersRequest Body:
{
"username": "jane.smith",
"display_name": "Jane Smith",
"tags": {"department": "platform", "role": "engineer"}
}POST /api/v1/iam/providers/1/users/jane.smith/policies/arn:aws:iam::aws:policy/ReadOnlyAccess{
"data": { /* response data */ },
"message": "Success"
}{
"error": "Entity not found",
"code": 404,
"details": {}
}All list endpoints support pagination:
Query Parameters:
page- Page number (1-indexed)per_page- Items per page (max: 1000)
Response includes:
{
"items": [/* data */],
"total": 500,
"page": 1,
"per_page": 50,
"pages": 10
}- Community: 100 requests/15 minutes
- Professional: 1000 requests/15 minutes
- Enterprise: Unlimited
| Code | Meaning |
|---|---|
| 200 | Success |
| 201 | Created |
| 204 | No Content (successful delete) |
| 400 | Bad Request (validation error) |
| 401 | Unauthorized |
| 403 | Forbidden (insufficient permissions) |
| 404 | Not Found |
| 409 | Conflict |
| 429 | Rate Limit Exceeded |
| 500 | Internal Server Error |
# 1. Create an organization
ORG=$(curl -X POST http://localhost:5000/api/v1/organizations \
-H "Content-Type: application/json" \
-d '{
"name": "Production Infrastructure",
"description": "Production environment"
}' | jq -r '.id')
# 2. Create entities
WEB_SERVER=$(curl -X POST http://localhost:5000/api/v1/entities \
-H "Content-Type: application/json" \
-d "{
\"name\": \"web-server-01\",
\"entity_type\": \"compute\",
\"organization_id\": $ORG,
\"attributes\": {
\"ip\": \"10.0.1.10\",
\"os\": \"Ubuntu 22.04\"
}
}" | jq -r '.id')
DB_SERVER=$(curl -X POST http://localhost:5000/api/v1/entities \
-H "Content-Type: application/json" \
-d "{
\"name\": \"db-server-01\",
\"entity_type\": \"compute\",
\"organization_id\": $ORG,
\"attributes\": {
\"ip\": \"10.0.1.20\",
\"os\": \"Ubuntu 22.04\"
}
}" | jq -r '.id')
# 3. Create dependency
curl -X POST http://localhost:5000/api/v1/dependencies \
-H "Content-Type: application/json" \
-d "{
\"source_entity_id\": $WEB_SERVER,
\"target_entity_id\": $DB_SERVER,
\"dependency_type\": \"database\",
\"metadata\": {\"port\": 5432}
}"
# 4. Create network (v2.0.0)
VPC=$(curl -X POST http://localhost:5000/api/v1/networking/networks \
-H "Content-Type: application/json" \
-d "{
\"name\": \"Production VPC\",
\"network_type\": \"vpc\",
\"organization_id\": $ORG,
\"region\": \"us-east-1\",
\"attributes\": {\"cidr\": \"10.0.0.0/16\"}
}" | jq -r '.id')
# 5. Map entities to network
curl -X POST http://localhost:5000/api/v1/networking/mappings \
-H "Content-Type: application/json" \
-d "{
\"network_id\": $VPC,
\"entity_id\": $WEB_SERVER,
\"relationship_type\": \"resides_in\"
}"
# 6. Get topology graph
curl "http://localhost:5000/api/v1/networking/topology/graph?organization_id=$ORG&include_entities=true" | jq
# 7. Create built-in secret (v2.0.0)
curl -X POST http://localhost:5000/api/v1/builtin-secrets \
-H "Content-Type: application/json" \
-d "{
\"name\": \"/app/db/password\",
\"value\": \"super-secret\",
\"organization_id\": $ORG,
\"secret_type\": \"password\"
}"- Python: Official Python client (coming soon)
- Go: Official Go client (coming soon)
- JavaScript/TypeScript: Official JS client (coming soon)
Full OpenAPI 3.0 specification available at:
http://localhost:5000/api/v1/openapi.json