new-endpoint

star 6.5k

Scaffold a new Fleet API endpoint with request/response structs, endpoint function, service method, datastore interface, handler registration, and test stubs.

fleetdm By fleetdm schedule Updated 4/6/2026

name: new-endpoint description: Scaffold a new Fleet API endpoint with request/response structs, endpoint function, service method, datastore interface, handler registration, and test stubs. allowed-tools: Read, Write, Edit, Grep, Glob model: sonnet effort: high disable-model-invocation: true

Scaffold a New Fleet API Endpoint

Create a new API endpoint for: $ARGUMENTS

Process

1. Gather Requirements

  • Resource name and HTTP method (GET/POST/PATCH/DELETE)
  • URL path (e.g., /api/_version_/fleet/resource)
  • Request body fields (if any)
  • Response body fields
  • Which API version (use StartingAtVersion("2022-04") for new endpoints)
  • Does it need a datastore method?

2. Read Reference Patterns

Read server/service/vulnerabilities.go for the canonical request/response/endpoint pattern:

  • Request struct with json tags
  • Response struct with Err error field and Error() method
  • Endpoint function with (ctx, request, svc) signature

Read server/service/handler.go to find where to register the new endpoint.

3. Create Request/Response Structs

type myResourceRequest struct {
    ID   uint   `url:"id"`
    Name string `json:"name"`
}

type myResourceResponse struct {
    Resource *fleet.Resource `json:"resource,omitempty"`
    Err      error           `json:"error,omitempty"`
}

func (r myResourceResponse) Error() error { return r.Err }

4. Create Endpoint Function

func myResourceEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (fleet.Errorer, error) {
    req := request.(*myResourceRequest)
    result, err := svc.MyResource(ctx, req.ID)
    if err != nil {
        return myResourceResponse{Err: err}, nil
    }
    return myResourceResponse{Resource: result}, nil
}

5. Add Service Interface Method

In server/fleet/service.go, add the method to the Service interface.

6. Implement Service Method

In the appropriate server/service/*.go file:

  • Start with svc.authz.Authorize(ctx, &fleet.Entity{}, fleet.ActionRead)
  • Implement business logic
  • Wrap errors with ctxerr.Wrap

7. Add Datastore Interface Method (if needed)

In server/fleet/datastore.go, add the method to the Datastore interface.

8. Register in handler.go

ue.StartingAtVersion("2022-04").GET("/api/_version_/fleet/resource", myResourceEndpoint, myResourceRequest{})

9. Create Test Stubs

  • Unit test with mock datastore in server/service/*_test.go
  • Integration test stub if it touches the database

10. Verify

  • Run go build ./... to check compilation
  • Run go test ./server/service/ to check mocks are satisfied
Install via CLI
npx skills add https://github.com/fleetdm/fleet --skill new-endpoint
Repository Details
star Stars 6,489
call_split Forks 914
navigation Branch main
article Path SKILL.md
More from Creator