diff --git a/api_documentation/api_documentation.go b/api_documentation/api_documentation.go
index 44e1528e7abc21ddafd7e9af8eac837d28501ae4..ef371c7cb93f5f91212d7c9d5ae4196a04a94574 100644
--- a/api_documentation/api_documentation.go
+++ b/api_documentation/api_documentation.go
@@ -102,7 +102,7 @@ func GetDocs(endpointHandlers map[string]map[string]interface{}, corePath string
 					docMethod.RequestBody = &requestBody
 
 					if handler.RequestBodyType.Kind() == reflect.Struct && handler.RequestBodyType.NumField() > 0 {
-						schema, err := StructSchema(handler.RequestBodyType.Field(0).Type)
+						schema, err := StructSchema(handler.RequestBodyType)
 						if err != nil {
 							return Docs{}, err
 						}
@@ -115,7 +115,7 @@ func GetDocs(endpointHandlers map[string]map[string]interface{}, corePath string
 					response, responseBodyTypeString := GetResponse(handler)
 					docMethod.Responses = &response
 					if handler.ResponseType.Kind() == reflect.Struct && handler.ResponseType.NumField() > 0 {
-						schema, err := StructSchema(handler.ResponseType.Field(0).Type)
+						schema, err := StructSchema(handler.ResponseType)
 						if err != nil {
 							return Docs{}, err
 						}
@@ -289,7 +289,12 @@ func StructSchema(t reflect.Type) (interface{}, error) {
 		schema["type"] = "object"
 	case reflect.Slice:
 		schema["type"] = "array"
-		schema["items"] = t.Elem()
+		element := reflect.TypeOf(t).Elem()
+		items, err := StructSchema(element)
+		if err != nil {
+			return nil, errors.Wrapf(err, "failed to document")
+		}
+		schema["items"] = items
 	default:
 		return nil, errors.Errorf("cannot generate schema for %v kind=%v", t, t.Kind())
 	}