Skip to content

Rate limits

Rate limits unless otherwise specified are per project.

datasets endpoints

method endpoint rate limit
POST /datasets/ 1/s
GET /datasets/ 1/s
GET /datasets/{dataset_id} 1/s
PUT /datasets/{dataset_id} 1/60s
DELETE /datasets/{dataset_id} 1/90s

features endpoints

method endpoint rate limit
POST /datasets/{dataset_id}/features 20/s
GET /datasets/{dataset_id}/features/{feature_id} 20/s
PUT /datasets/{dataset_id}/features/{feature_id} 20/s
DELETE /datasets/{dataset_id}/features/{feature_id} 20/s

search endpoints

method endpoint rate limit
POST /datasets/{dataset_id}/features/search 20/s
GET /datasets/{dataset_id}/features/intersect 20/s
PUT /datasets/{dataset_id}/features/within 20/s
DELETE /datasets/{dataset_id}/features/contains 20/s

tiles endpoints

method endpoint rate limit
GET /datasets/{dataset_id}/tiles/{z}/{x}/{y}.pbf 50/s

The ratelimit are implemented as fastapi dependencies:

project_token_dependency = Depends(AuthenticateKey(product=Products.DATASETS))

@tile_router.get(
    "/{dataset_id}/tiles/{z}/{x}/{y}.pbf",
    response_class=PBFResponse,
    dependencies=[
        project_token_dependency,
        Depends(ProjectRateLimiter(max_requests=20, expiry=1)),
        Depends(get_add_job_to_metrics("DATASET", "tile")),
    ],
)
async def get_dataset_tile(
    response: Response,
    dataset_id: UUID,
    x: int,
    y: int,
    z: int,
    tile_manager: TileManager = Depends(get_tile_manager),
) -> Response: