Registry server
Registry server
Description
The Registry server supports both gRPC and REST interfaces for interacting with feature metadata. While gRPC remains the default protocol—enabling clients in any language with gRPC support—the REST API allows users to interact with the registry over standard HTTP using any REST-capable tool or language.
Feast supports running the Registry Server in three distinct modes:
gRPC only
feast serve_registry
Default behavior for SDK and clients
REST + gRPC
feast serve_registry --rest-api
Enables both interfaces
REST only
feast serve_registry --rest-api --no-grpc
Used for REST-only clients like the UI
REST API Endpoints
The REST API provides HTTP/JSON endpoints for accessing all registry metadata. All endpoints are prefixed with /api/v1
and return JSON responses.
Global /all
Endpoints
Endpoints with
/all
(e.g.,/entities/all
) aggregate results across all projects.Each object in the response includes a
project
field.Support global pagination, sorting, and relationships (where applicable).
No
project
parameter is required for/all
endpoints.
Authentication
The REST API supports Bearer token authentication. Include your token in the Authorization header:
Authorization: Bearer <your-token>
Common Query Parameters
Most endpoints support these common query parameters:
project
(required for most endpoints): The project nameallow_cache
(optional, default:true
): Whether to allow cached datatags
(optional): Filter results by tags in key=value format
Relationship Parameters
include_relationships
(optional, default:false
): Include all relationships (both direct and indirect) for the object(s) in the response
Pagination Parameters (List Endpoints Only)
page
(optional): Page number (starts from 1)limit
(optional, max: 100): Number of items per pagesort_by
(optional): Field to sort bysort_order
(optional): Sort order: "asc" or "desc" (default: "asc")
Entities
List Entities
Endpoint:
GET /api/v1/entities
Description: Retrieve all entities in a project
Parameters:
project
(required): Project nameinclude_relationships
(optional): Include relationships for each entityallow_cache
(optional): Whether to allow cached datapage
(optional): Page number for paginationlimit
(optional): Number of items per pagesort_by
(optional): Field to sort bysort_order
(optional): Sort order ("asc" or "desc")
Examples:
# Basic list curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/entities?project=my_project" # With pagination curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/entities?project=my_project&page=1&limit=10&sort_by=name" # With relationships curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/entities?project=my_project&include_relationships=true"
Get Entity
Endpoint:
GET /api/v1/entities/{name}
Description: Retrieve a specific entity by name
Parameters:
name
(path): Entity nameproject
(required): Project nameinclude_relationships
(optional): Include relationships for this entityallow_cache
(optional): Whether to allow cached data
Examples:
# Basic get curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/entities/user_id?project=my_project" # With relationships curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/entities/user_id?project=my_project&include_relationships=true"
List All Entities (All Projects)
Endpoint:
GET /api/v1/entities/all
Description: Retrieve all entities across all projects. Each entity includes a
project
field.Parameters:
allow_cache
(optional): Whether to allow cached datapage
(optional): Page number for paginationlimit
(optional): Number of items per pagesort_by
(optional): Field to sort bysort_order
(optional): Sort order ("asc" or "desc")include_relationships
(optional): Include relationships for each entity
Examples:
# List all entities across all projects curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/entities/all?page=1&limit=10&sort_by=name" # With relationships curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/entities/all?include_relationships=true"
Response Example:
{ "entities": [ { "name": "customer_id", "project": "project1", ... }, { "name": "driver_id", "project": "project2", ... } ], "pagination": { "page": 1, "limit": 10, "total": 25, "totalPages": 3 }, "relationships": { ... } }
Data Sources
List Data Sources
Endpoint:
GET /api/v1/data_sources
Description: Retrieve all data sources in a project
Parameters:
project
(required): Project nameinclude_relationships
(optional): Include relationships for each data sourceallow_cache
(optional): Whether to allow cached datatags
(optional): Filter by tagspage
(optional): Page number for paginationlimit
(optional): Number of items per pagesort_by
(optional): Field to sort bysort_order
(optional): Sort order ("asc" or "desc")
Examples:
# Basic list curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/data_sources?project=my_project" # With pagination and relationships curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/data_sources?project=my_project&include_relationships=true&page=1&limit=10"
Get Data Source
Endpoint:
GET /api/v1/data_sources/{name}
Description: Retrieve a specific data source by name
Parameters:
name
(path): Data source nameproject
(required): Project nameinclude_relationships
(optional): Include relationships for this data sourceallow_cache
(optional): Whether to allow cached data
Examples:
# Basic get curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/data_sources/user_data?project=my_project" # With relationships curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/data_sources/user_data?project=my_project&include_relationships=true"
List All Data Sources (All Projects)
Endpoint:
GET /api/v1/data_sources/all
Description: Retrieve all data sources across all projects. Each data source includes a
project
field.Parameters:
allow_cache
(optional): Whether to allow cached datapage
(optional): Page number for paginationlimit
(optional): Number of items per pagesort_by
(optional): Field to sort bysort_order
(optional): Sort order ("asc" or "desc")include_relationships
(optional): Include relationships for each data source
Examples:
curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/data_sources/all?page=1&limit=10&sort_by=name" # With relationships curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/data_sources/all?include_relationships=true"
Response Example:
{ "dataSources": [ { "name": "user_data", "project": "project1", ... }, { "name": "item_data", "project": "project2", ... } ], "pagination": { "page": 1, "limit": 10, "total": 25, "totalPages": 3 }, "relationships": { ... } }
Feature Views
List Feature Views
Endpoint:
GET /api/v1/feature_views
Description: Retrieve all feature views in a project
Parameters:
project
(required): Project nameinclude_relationships
(optional): Include relationships for each feature viewallow_cache
(optional): Whether to allow cached datatags
(optional): Filter by tagsentity
(optional): Filter feature views by entity namefeature
(optional): Filter feature views by feature namefeature_service
(optional): Filter feature views by feature service namedata_source
(optional): Filter feature views by data source namepage
(optional): Page number for paginationlimit
(optional): Number of items per pagesort_by
(optional): Field to sort bysort_order
(optional): Sort order ("asc" or "desc")
Examples:
# Basic list curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/feature_views?project=my_project" # With pagination and relationships curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/feature_views?project=my_project&include_relationships=true&page=1&limit=5&sort_by=name" # Filter by entity curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/feature_views?project=my_project&entity=user" # Filter by feature curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/feature_views?project=my_project&feature=age" # Filter by data source curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/feature_views?project=my_project&data_source=user_profile_source" # Filter by feature service curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/feature_views?project=my_project&feature_service=user_service" # Multiple filters combined curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/feature_views?project=my_project&entity=user&feature=age"
Get Feature View
Endpoint:
GET /api/v1/feature_views/{name}
Description: Retrieve a specific feature view by name
Parameters:
name
(path): Feature view nameproject
(required): Project nameinclude_relationships
(optional): Include relationships for this feature viewallow_cache
(optional): Whether to allow cached data
Examples:
# Basic get curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/feature_views/user_features?project=my_project" # With relationships curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/feature_views/user_features?project=my_project&include_relationships=true"
List All Feature Views (All Projects)
Endpoint:
GET /api/v1/feature_views/all
Description: Retrieve all feature views across all projects. Each feature view includes a
project
field.Parameters:
allow_cache
(optional): Whether to allow cached datapage
(optional): Page number for paginationlimit
(optional): Number of items per pagesort_by
(optional): Field to sort bysort_order
(optional): Sort order ("asc" or "desc")include_relationships
(optional): Include relationships for each feature view
Examples:
curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/feature_views/all?page=1&limit=10&sort_by=name" # With relationships curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/feature_views/all?include_relationships=true"
Response Example:
{ "featureViews": [ { "name": "user_features", "project": "project1", ... }, { "name": "item_features", "project": "project2", ... } ], "pagination": { "page": 1, "limit": 10, "total": 25, "totalPages": 3 }, "relationships": { ... } }
Features
List Features
Endpoint:
GET /api/v1/features
Description: Retrieve all features in a project
Parameters:
project
(required): Project namefeature_view
(optional): Filter by feature view namename
(optional): Filter by feature nameinclude_relationships
(optional): Include relationships for each feature (relationships are keyed by feature name)allow_cache
(optional): Whether to allow cached datapage
(optional): Page number for paginationlimit
(optional): Number of items per pagesort_by
(optional): Field to sort bysort_order
(optional): Sort order ("asc" or "desc")
Examples:
# Basic list curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/features?project=my_project" # With pagination and relationships curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/features?project=my_project&include_relationships=true&page=1&limit=5"
Response Example:
{ "features": [ { "name": "conv_rate", "featureView": "driver_hourly_stats_fresh", "type": "Float32" }, { "name": "acc_rate", "featureView": "driver_hourly_stats_fresh", "type": "Float32" }, { "name": "avg_daily_trips", "featureView": "driver_hourly_stats_fresh", "type": "Int64" }, { "name": "conv_rate", "featureView": "driver_hourly_stats", "type": "Float32" }, { "name": "acc_rate", "featureView": "driver_hourly_stats", "type": "Float32" } ], "pagination": { "page": 1, "limit": 5, "totalCount": 10, "totalPages": 2, "hasNext": true }, "relationships": { "conv_rate": [ { "source": { "type": "feature", "name": "conv_rate" }, "target": { "type": "featureView", "name": "driver_hourly_stats_fresh" } }, { "source": { "type": "feature", "name": "conv_rate" }, "target": { "type": "featureView", "name": "driver_hourly_stats" } }, { "source": { "type": "feature", "name": "conv_rate" }, "target": { "type": "featureService", "name": "driver_activity_v1" } } ] } }
Get Feature
Endpoint:
GET /api/v1/features/{feature_view}/{name}
Description: Retrieve a specific feature by feature view and name
Parameters:
feature_view
(path): Feature view namename
(path): Feature nameproject
(required): Project nameinclude_relationships
(optional): Include relationships for this featureallow_cache
(optional): Whether to allow cached data
Examples:
# Basic get curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/features/driver_hourly_stats/conv_rate?project=my_project" # With relationships curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/features/driver_hourly_stats/conv_rate?project=my_project&include_relationships=true"
Response Example:
{ "name": "conv_rate", "featureView": "driver_hourly_stats", "type": "Float32", "relationships": [ { "source": { "type": "feature", "name": "conv_rate" }, "target": { "type": "featureView", "name": "driver_hourly_stats_fresh" } }, { "source": { "type": "feature", "name": "conv_rate" }, "target": { "type": "featureView", "name": "driver_hourly_stats" } }, { "source": { "type": "feature", "name": "conv_rate" }, "target": { "type": "featureService", "name": "driver_activity_v1" } } ] }
List All Features (All Projects)
Endpoint:
GET /api/v1/features/all
Description: Retrieve all features across all projects. Each feature includes a
project
field.Parameters:
page
(optional): Page number for paginationlimit
(optional): Number of items per pagesort_by
(optional): Field to sort bysort_order
(optional): Sort order ("asc" or "desc")include_relationships
(optional): Include relationships for each featureallow_cache
(optional): Whether to allow cached data
Examples:
curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/features/all?page=1&limit=5&sort_by=name" # With relationships curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/features/all?include_relationships=true"
Response Example:
{ "features": [ { "name": "conv_rate", "featureView": "driver_hourly_stats_fresh", "type": "Float32", "project": "multiproject" }, { "name": "acc_rate", "featureView": "driver_hourly_stats_fresh", "type": "Float32", "project": "multiproject" }, { "name": "avg_daily_trips", "featureView": "driver_hourly_stats_fresh", "type": "Int64", "project": "multiproject" }, { "name": "conv_rate", "featureView": "driver_hourly_stats", "type": "Float32", "project": "multiproject" }, { "name": "acc_rate", "featureView": "driver_hourly_stats", "type": "Float32", "project": "multiproject" } ], "pagination": { "page": 1, "limit": 5, "total_count": 20, "total_pages": 4, "has_next": true, "has_previous": false }, "relationships": { "conv_rate": [ { "source": { "type": "feature", "name": "conv_rate" }, "target": { "type": "featureView", "name": "driver_hourly_stats" } }, { "source": { "type": "feature", "name": "conv_rate" }, "target": { "type": "featureView", "name": "driver_hourly_stats_fresh" } }, { "source": { "type": "feature", "name": "conv_rate" }, "target": { "type": "featureService", "name": "driver_activity_v3" } } ] } }
Feature Services
List Feature Services
Endpoint:
GET /api/v1/feature_services
Description: Retrieve all feature services in a project
Parameters:
project
(required): Project nameinclude_relationships
(optional): Include relationships for each feature serviceallow_cache
(optional): Whether to allow cached datatags
(optional): Filter by tagsfeature_view
(optional): Filter feature services by feature view namepage
(optional): Page number for paginationlimit
(optional): Number of items per pagesort_by
(optional): Field to sort bysort_order
(optional): Sort order ("asc" or "desc")
Examples:
# Basic list curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/feature_services?project=my_project" # With pagination and relationships curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/feature_services?project=my_project&include_relationships=true&page=1&limit=10" # Filter by feature view curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/feature_services?project=my_project&feature_view=user_profile"
Get Feature Service
Endpoint:
GET /api/v1/feature_services/{name}
Description: Retrieve a specific feature service by name
Parameters:
name
(path): Feature service nameproject
(required): Project nameinclude_relationships
(optional): Include relationships for this feature serviceallow_cache
(optional): Whether to allow cached data
Examples:
# Basic get curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/feature_services/recommendation_service?project=my_project" # With relationships curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/feature_services/recommendation_service?project=my_project&include_relationships=true"
List All Feature Services (All Projects)
Endpoint:
GET /api/v1/feature_services/all
Description: Retrieve all feature services across all projects. Each feature service includes a
project
field.Parameters:
allow_cache
(optional): Whether to allow cached datapage
(optional): Page number for paginationlimit
(optional): Number of items per pagesort_by
(optional): Field to sort bysort_order
(optional): Sort order ("asc" or "desc")include_relationships
(optional): Include relationships for each feature service
Examples:
curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/feature_services/all?page=1&limit=10&sort_by=name" # With relationships curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/feature_services/all?include_relationships=true"
Response Example:
{ "featureServices": [ { "name": "recommendation_service", "project": "project1", ... }, { "name": "scoring_service", "project": "project2", ... } ], "pagination": { "page": 1, "limit": 10, "total": 25, "totalPages": 3 }, "relationships": { ... } }
Lineage and Relationships
Get Registry Lineage
Endpoint:
GET /api/v1/lineage/registry
Description: Retrieve complete registry lineage with relationships and indirect relationships
Parameters:
project
(required): Project nameallow_cache
(optional): Whether to allow cached datafilter_object_type
(optional): Filter by object type (dataSource
,entity
,featureView
,featureService
,feature
)filter_object_name
(optional): Filter by object name
Example:
curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/lineage/registry?project=my_project"
Get Object Relationships
Endpoint:
GET /api/v1/lineage/objects/{object_type}/{object_name}
Description: Retrieve relationships for a specific object
Parameters:
object_type
(path): Type of object (dataSource
,entity
,featureView
,featureService
,feature
)object_name
(path): Name of the objectproject
(required): Project nameinclude_indirect
(optional): Whether to include indirect relationshipsallow_cache
(optional): Whether to allow cached data
Example:
curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/lineage/objects/feature/conv_rate?project=my_project&include_indirect=true"
Response Example:
{ "relationships": [ { "source": { "type": "feature", "name": "conv_rate" }, "target": { "type": "featureView", "name": "driver_hourly_stats_fresh" } }, { "source": { "type": "feature", "name": "conv_rate" }, "target": { "type": "featureView", "name": "driver_hourly_stats" } } ], "pagination": { "totalCount": 2, "totalPages": 1 } }
Get Complete Registry Data
Endpoint:
GET /api/v1/lineage/complete
Description: Retrieve complete registry data including all objects and relationships (optimized for UI consumption)
Parameters:
project
(required): Project nameallow_cache
(optional): Whether to allow cached data
Example:
curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/lineage/complete?project=my_project"
Response Example:
{ "project": "multiproject", "objects": { "entities": [ ... ], "dataSources": [ ... ], "featureViews": [ ... ], "featureServices": [ ... ], "features": [ { "name": "conv_rate", "featureView": "driver_hourly_stats_fresh", "type": "Float32" }, { "name": "acc_rate", "featureView": "driver_hourly_stats_fresh", "type": "Float32" }, { "name": "avg_daily_trips", "featureView": "driver_hourly_stats_fresh", "type": "Int64" }, { "name": "conv_rate", "featureView": "driver_hourly_stats", "type": "Float32" }, { "name": "acc_rate", "featureView": "driver_hourly_stats", "type": "Float32" }, { "name": "conv_rate_plus_val1", "featureView": "transformed_conv_rate_fresh", "type": "Float64" }, { "name": "conv_rate_plus_val2", "featureView": "transformed_conv_rate_fresh", "type": "Float64" }, { "name": "conv_rate_plus_val1", "featureView": "transformed_conv_rate", "type": "Float64" }, { "name": "conv_rate_plus_val2", "featureView": "transformed_conv_rate", "type": "Float64" } ] }, "relationships": [ ... ], "indirectRelationships": [ ... ], "pagination": { "features": { "totalCount": 10, "totalPages": 1 }, ... } }
Get Registry Lineage (All Projects)
Endpoint:
GET /api/v1/lineage/registry/all
Description: Retrieve registry lineage (relationships and indirect relationships) for all projects.
Parameters:
allow_cache
(optional): Whether to allow cached datafilter_object_type
(optional): Filter by object type (dataSource
,entity
,featureView
,featureService
)filter_object_name
(optional): Filter by object name
Example:
curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/lineage/registry/all"
Response Example:
{ "relationships": [ { ... , "project": "project1" }, ... ], "indirect_relationships": [ { ... , "project": "project2" }, ... ] }
Get Complete Registry Data (All Projects)
Endpoint:
GET /api/v1/lineage/complete/all
Description: Retrieve complete registry data, including all objects and relationships, for all projects. Optimized for UI consumption.
Parameters:
allow_cache
(optional): Whether to allow cached data
Example:
curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/lineage/complete/all"
Response Example:
{ "projects": [ { "project": "project1", "objects": { "entities": [ ... ], "dataSources": [ ... ], "featureViews": [ ... ], "featureServices": [ ... ] }, "relationships": [ ... ], "indirectRelationships": [ ... ] }, { "project": "project2", ... } ] }
Permissions
List Permissions
Endpoint:
GET /api/v1/permissions
Description: Retrieve all permissions in a project
Parameters:
project
(required): Project nameinclude_relationships
(optional): Include relationships for each permissionallow_cache
(optional): Whether to allow cached datapage
(optional): Page number for paginationlimit
(optional): Number of items per pagesort_by
(optional): Field to sort bysort_order
(optional): Sort order ("asc" or "desc")
Examples:
# Basic list curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/permissions?project=my_project" # With pagination and relationships curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/permissions?project=my_project&include_relationships=true&page=1&limit=10"
Get Permission
Endpoint:
GET /api/v1/permissions/{name}
Description: Retrieve a specific permission by name
Parameters:
name
(path): Permission nameproject
(required): Project nameinclude_relationships
(optional): Include relationships for this permissionallow_cache
(optional): Whether to allow cached data
Examples:
# Basic get curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/permissions/read_features?project=my_project" # With relationships curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/permissions/read_features?project=my_project&include_relationships=true"
Projects
List Projects
Endpoint:
GET /api/v1/projects
Description: Retrieve all projects
Parameters:
allow_cache
(optional): Whether to allow cached datapage
(optional): Page number for paginationlimit
(optional): Number of items per pagesort_by
(optional): Field to sort bysort_order
(optional): Sort order ("asc" or "desc")
Examples:
# Basic list curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/projects" # With pagination curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/projects?page=1&limit=10&sort_by=name"
Get Project
Endpoint:
GET /api/v1/projects/{name}
Description: Retrieve a specific project by name
Parameters:
name
(path): Project nameallow_cache
(optional): Whether to allow cached data
Example:
curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/projects/my_project"
Saved Datasets
List Saved Datasets
Endpoint:
GET /api/v1/saved_datasets
Description: Retrieve all saved datasets in a project
Parameters:
project
(required): Project nameinclude_relationships
(optional): Include relationships for each saved datasetallow_cache
(optional): Whether to allow cached datatags
(optional): Filter by tagspage
(optional): Page number for paginationlimit
(optional): Number of items per pagesort_by
(optional): Field to sort bysort_order
(optional): Sort order ("asc" or "desc")
Examples:
# Basic list curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/saved_datasets?project=my_project" # With pagination and relationships curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/saved_datasets?project=my_project&include_relationships=true&page=1&limit=10"
Get Saved Dataset
Endpoint:
GET /api/v1/saved_datasets/{name}
Description: Retrieve a specific saved dataset by name
Parameters:
name
(path): Saved dataset nameproject
(required): Project nameinclude_relationships
(optional): Include relationships for this saved datasetallow_cache
(optional): Whether to allow cached data
Examples:
# Basic get curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/saved_datasets/training_data?project=my_project" # With relationships curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/saved_datasets/training_data?project=my_project&include_relationships=true"
List All Saved Datasets (All Projects)
Endpoint:
GET /api/v1/saved_datasets/all
Description: Retrieve all saved datasets across all projects. Each saved dataset includes a
project
field.Parameters:
allow_cache
(optional): Whether to allow cached datapage
(optional): Page number for paginationlimit
(optional): Number of items per pagesort_by
(optional): Field to sort bysort_order
(optional): Sort order ("asc" or "desc")include_relationships
(optional): Include relationships for each saved dataset
Examples:
curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/saved_datasets/all?page=1&limit=10&sort_by=name" # With relationships curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/saved_datasets/all?include_relationships=true"
Response Example:
{ "savedDatasets": [ { "name": "training_data", "project": "project1", ... }, { "name": "validation_data", "project": "project2", ... } ], "pagination": { "page": 1, "limit": 10, "total": 25, "totalPages": 3 }, "relationships": { ... } }
Response Formats
All endpoints return JSON responses with the following general structure:
Success (200): Returns the requested data
Bad Request (400): Invalid parameters or request format
Unauthorized (401): Missing or invalid authentication token
Not Found (404): Requested resource does not exist
Internal Server Error (500): Server-side error
Enhanced Response Formats
The REST API now supports enhanced response formats for relationships and pagination:
Single Object Endpoints (GET /resource/{name}
):
Without relationships:
{
"entity": { ... }
}
With relationships:
{
"entity": { ... },
"relationships": [
{
"source": {
"type": "entity",
"name": "customer_id"
},
"target": {
"type": "featureView",
"name": "customer_features"
}
}
]
}
List Endpoints (GET /resources
):
Without relationships or pagination:
{
"entities": [
{ "name": "customer_id", ... },
{ "name": "driver_id", ... }
]
}
With pagination only:
{
"entities": [
{ "name": "customer_id", ... },
{ "name": "driver_id", ... }
],
"pagination": {
"page": 1,
"limit": 10,
"total": 25,
"totalPages": 3
}
}
With relationships and pagination:
{
"entities": [
{ "name": "customer_id", ... },
{ "name": "driver_id", ... }
],
"pagination": {
"page": 1,
"limit": 10,
"total": 25,
"totalPages": 3
},
"relationships": {
"customer_id": [
{
"source": {
"type": "entity",
"name": "customer_id"
},
"target": {
"type": "featureView",
"name": "customer_features"
}
}
],
"driver_id": [
{
"source": {
"type": "entity",
"name": "driver_id"
},
"target": {
"type": "featureView",
"name": "driver_features"
}
}
]
}
}
Relationships and Pagination
The REST API has been enhanced with comprehensive support for relationships and pagination across all endpoints.
Relationships
Relationships show how different Feast objects connect to each other, providing insight into dependencies and data lineage. When the include_relationships
parameter is set to true
, the API returns both direct and indirect relationships.
Supported Object Types:
entity
- Feast entitiesdataSource
- Data sourcesfeatureView
- Feature views (including regular, on-demand, and stream)feature
- Features (including features from on-demand feature views)featureService
- Feature servicespermission
- PermissionssavedDataset
- Saved datasets
Common Relationship Patterns:
Feature Views → Data Sources (feature views depend on data sources)
Feature Views → Entities (feature views use entities as join keys)
Feature Services → Feature Views (feature services consume feature views)
Features → Feature Views (features belong to feature views, including on-demand feature views)
Features → Feature Services (features are consumed by feature services)
Entities → Data Sources (entities connect to data sources through feature views)
Entities → Feature Services (entities connect to feature services through feature views)
Pagination
All list endpoints support pagination to improve performance and manageability of large datasets:
page
- Page number (starts from 1)limit
- Number of items per page (maximum 100)sort_by
- Field to sort bysort_order
- Sort order: "asc" (ascending) or "desc" (descending)
Interactive API Documentation
When the REST API server is running, you can access interactive documentation at:
Swagger UI:
http://localhost:6572/
(root path)ReDoc:
http://localhost:6572/docs
OpenAPI Schema:
http://localhost:6572/openapi.json
How to configure the server
CLI
There is a CLI command that starts the Registry server: feast serve_registry
. By default, remote Registry Server uses port 6570, the port can be overridden with a --port
flag. To start the Registry Server in TLS mode, you need to provide the private and public keys using the --key
and --cert
arguments. More info about TLS mode can be found in feast-client-connecting-to-remote-registry-sever-started-in-tls-mode
To enable REST API support along with gRPC, start the registry server with REST mode enabled :
feast serve_registry --rest-api
This launches both the gRPC and REST servers concurrently. The REST server listens on port 6572 by default.
To run a REST-only server (no gRPC):
feast serve_registry --rest-api --no-grpc
How to configure the client
Please see the detail how to configure Remote Registry client remote.md
Registry Server Permissions and Access Control
Please refer the page for more details on API Endpoints and Permissions.
How to configure Authentication and Authorization ?
Please refer the page for more details on how to configure authentication and authorization.
Metrics
Get Resource Counts
Endpoint:
GET /api/v1/metrics/resource_counts
Description: Retrieve counts of registry objects (entities, data sources, feature views, etc.) for a project or across all projects.
Parameters:
project
(optional): Project name to filter resource counts (if not provided, returns counts for all projects)
Examples:
# Get counts for specific project curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/metrics/resource_counts?project=my_project" # Get counts for all projects curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/metrics/resource_counts"
Response Example (single project):
{ "project": "my_project", "counts": { "entities": 5, "dataSources": 3, "savedDatasets": 2, "features": 12, "featureViews": 4, "featureServices": 2 } }
Response Example (all projects):
{ "total": { "entities": 15, "dataSources": 8, "savedDatasets": 5, "features": 35, "featureViews": 12, "featureServices": 6 }, "perProject": { "project_a": { "entities": 5, "dataSources": 3, "savedDatasets": 2, "features": 12, "featureViews": 4, "featureServices": 2 }, "project_b": { "entities": 10, "dataSources": 5, "savedDatasets": 3, "features": 23, "featureViews": 8, "featureServices": 4 } } }
Get Recently Visited Objects
Endpoint:
GET /api/v1/metrics/recently_visited
Description: Retrieve the most recently visited registry objects for the authenticated user in a project.
Parameters:
project
(optional): Project name to filter recent visits (defaults to current project)object
(optional): Object type to filter recent visits (e.g., entities, features, feature_services)page
(optional): Page number for pagination (starts from 1)limit
(optional): Number of items per page (maximum 100)sort_by
(optional): Field to sort by (e.g., timestamp, path, object)sort_order
(optional): Sort order: "asc" or "desc" (default: "asc")
Examples:
# Get all recent visits for a project curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/metrics/recently_visited?project=my_project" # Get recent visits with pagination curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/metrics/recently_visited?project=my_project&page=1&limit=10" # Get recent visits filtered by object type curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/metrics/recently_visited?project=my_project&object=entities" # Get recent visits sorted by timestamp descending curl -H "Authorization: Bearer <token>" \ "http://localhost:6572/api/v1/metrics/recently_visited?project=my_project&sort_by=timestamp&sort_order=desc"
Response Example (without pagination):
{ "visits": [ { "path": "/api/v1/entities/driver", "timestamp": "2024-07-18T12:34:56.789Z", "project": "my_project", "user": "alice", "object": "entities", "object_name": "driver", "method": "GET" }, { "path": "/api/v1/feature_services/user_service", "timestamp": "2024-07-18T12:30:45.123Z", "project": "my_project", "user": "alice", "object": "feature_services", "object_name": "user_service", "method": "GET" } ], "pagination": { "totalCount": 2 } }
Response Example (with pagination):
{ "visits": [ { "path": "/api/v1/entities/driver", "timestamp": "2024-07-18T12:34:56.789Z", "project": "my_project", "user": "alice", "object": "entities", "object_name": "driver", "method": "GET" } ], "pagination": { "page": 1, "limit": 10, "totalCount": 25, "totalPages": 3, "hasNext": true, "hasPrevious": false } }
Note: Recent visits are automatically logged when users access registry objects via the REST API. The logging behavior can be configured through the feature_server.recent_visit_logging
section in feature_store.yaml
(see configuration section below).
Registry Server Configuration: Recent Visit Logging
The registry server supports configuration of recent visit logging via the feature_server
section in feature_store.yaml
.
Example:
feature_server:
type: local
recent_visit_logging:
limit: 100 # Number of recent visits to store per user
log_patterns:
- ".*/entities/(?!all$)[^/]+$"
- ".*/data_sources/(?!all$)[^/]+$"
- ".*/feature_views/(?!all$)[^/]+$"
- ".*/features/(?!all$)[^/]+$"
- ".*/feature_services/(?!all$)[^/]+$"
- ".*/saved_datasets/(?!all$)[^/]+$"
- ".*/custom_api/.*"
Configuration Options:
recent_visit_logging.limit: Maximum number of recent visits to store per user (default: 100).
recent_visit_logging.log_patterns: List of regex patterns for API paths to log as recent visits.
Default Log Patterns:
.*/entities/(?!all$)[^/]+$
- Individual entity endpoints.*/data_sources/(?!all$)[^/]+$
- Individual data source endpoints.*/feature_views/(?!all$)[^/]+$
- Individual feature view endpoints.*/features/(?!all$)[^/]+$
- Individual feature endpoints.*/feature_services/(?!all$)[^/]+$
- Individual feature service endpoints.*/saved_datasets/(?!all$)[^/]+$
- Individual saved dataset endpoints
Behavior:
Only requests matching one of the
log_patterns
will be trackedOnly the most recent
limit
visits per user are storedMetrics endpoints (
/metrics/*
) are automatically excluded from logging to prevent circular referencesVisit data is stored per user and per project in the registry metadata
Last updated
Was this helpful?