diff --git a/design/design.go b/design/design.go
index fd374e5ab73bc794b97ae288f0ed22f8978d88d9..323e5b72211f49b8d224ec9f22c72ae876da974f 100644
--- a/design/design.go
+++ b/design/design.go
@@ -10,7 +10,7 @@ var _ = API("policy", func() {
 		Description("Policy Server")
 		Host("development", func() {
 			Description("Local development server")
-			URI("http://localhost:8080")
+			URI("http://localhost:8081")
 		})
 	})
 })
@@ -24,6 +24,7 @@ var _ = Service("policy", func() {
 		Result(EvaluateResult)
 		HTTP(func() {
 			POST("/policy/{group}/{policyName}/{version}/evaluation")
+			Body("input")
 			Response(StatusOK)
 		})
 	})
diff --git a/design/types.go b/design/types.go
index a0820bff93317f074f9259501af54828726ef20e..3c83c2c64b5e35d1746b72ce1dbdbc9d4192ff44 100644
--- a/design/types.go
+++ b/design/types.go
@@ -4,11 +4,11 @@ package design
 import . "goa.design/goa/v3/dsl"
 
 var EvaluateRequest = Type("EvaluateRequest", func() {
-	Field(1, "group", String, "Policy group")
-	Field(2, "policyName", String, "Policy name")
-	Field(3, "version", String, "Policy version")
-	Field(4, "data", Any, "Data passed as input to the policy execution runtime")
-	Required("group", "policyName", "version", "data")
+	Field(1, "group", String, "Policy group.")
+	Field(2, "policyName", String, "Policy name.")
+	Field(3, "version", String, "Policy version.")
+	Field(4, "input", Any, "Input data passed to the policy execution runtime.")
+	Required("group", "policyName", "version", "input")
 })
 
 var EvaluateResult = Type("EvaluateResult", func() {
@@ -17,15 +17,15 @@ var EvaluateResult = Type("EvaluateResult", func() {
 })
 
 var LockRequest = Type("LockRequest", func() {
-	Field(1, "group", String, "Policy group")
-	Field(2, "policyName", String, "Policy name")
-	Field(3, "version", String, "Policy version")
+	Field(1, "group", String, "Policy group.")
+	Field(2, "policyName", String, "Policy name.")
+	Field(3, "version", String, "Policy version.")
 	Required("group", "policyName", "version")
 })
 
 var UnlockRequest = Type("UnlockRequest", func() {
-	Field(1, "group", String, "Policy group")
-	Field(2, "policyName", String, "Policy name")
-	Field(3, "version", String, "Policy version")
+	Field(1, "group", String, "Policy group.")
+	Field(2, "policyName", String, "Policy name.")
+	Field(3, "version", String, "Policy version.")
 	Required("group", "policyName", "version")
 })
diff --git a/gen/http/cli/policy/cli.go b/gen/http/cli/policy/cli.go
index 2f770acae427087ce3ddc84daf65f4289e580817..895aaa1760a5f7231224704a7050339bf635f4bd 100644
--- a/gen/http/cli/policy/cli.go
+++ b/gen/http/cli/policy/cli.go
@@ -32,9 +32,7 @@ policy (evaluate|lock|unlock)
 // UsageExamples produces an example of a valid invocation of the CLI tool.
 func UsageExamples() string {
 	return os.Args[0] + ` health liveness` + "\n" +
-		os.Args[0] + ` policy evaluate --body '{
-      "data": "Id odio aperiam voluptatem molestias corrupti sunt."
-   }' --group "Ipsum nihil quo." --policy-name "Repellat velit omnis." --version "Vitae qui."` + "\n" +
+		os.Args[0] + ` policy evaluate --body "Similique quisquam optio." --group "Repellat velit omnis." --policy-name "Vitae qui." --version "Provident fugiat at cupiditate."` + "\n" +
 		""
 }
 
@@ -58,19 +56,19 @@ func ParseEndpoint(
 
 		policyEvaluateFlags          = flag.NewFlagSet("evaluate", flag.ExitOnError)
 		policyEvaluateBodyFlag       = policyEvaluateFlags.String("body", "REQUIRED", "")
-		policyEvaluateGroupFlag      = policyEvaluateFlags.String("group", "REQUIRED", "Policy group")
-		policyEvaluatePolicyNameFlag = policyEvaluateFlags.String("policy-name", "REQUIRED", "Policy name")
-		policyEvaluateVersionFlag    = policyEvaluateFlags.String("version", "REQUIRED", "Policy version")
+		policyEvaluateGroupFlag      = policyEvaluateFlags.String("group", "REQUIRED", "Policy group.")
+		policyEvaluatePolicyNameFlag = policyEvaluateFlags.String("policy-name", "REQUIRED", "Policy name.")
+		policyEvaluateVersionFlag    = policyEvaluateFlags.String("version", "REQUIRED", "Policy version.")
 
 		policyLockFlags          = flag.NewFlagSet("lock", flag.ExitOnError)
-		policyLockGroupFlag      = policyLockFlags.String("group", "REQUIRED", "Policy group")
-		policyLockPolicyNameFlag = policyLockFlags.String("policy-name", "REQUIRED", "Policy name")
-		policyLockVersionFlag    = policyLockFlags.String("version", "REQUIRED", "Policy version")
+		policyLockGroupFlag      = policyLockFlags.String("group", "REQUIRED", "Policy group.")
+		policyLockPolicyNameFlag = policyLockFlags.String("policy-name", "REQUIRED", "Policy name.")
+		policyLockVersionFlag    = policyLockFlags.String("version", "REQUIRED", "Policy version.")
 
 		policyUnlockFlags          = flag.NewFlagSet("unlock", flag.ExitOnError)
-		policyUnlockGroupFlag      = policyUnlockFlags.String("group", "REQUIRED", "Policy group")
-		policyUnlockPolicyNameFlag = policyUnlockFlags.String("policy-name", "REQUIRED", "Policy name")
-		policyUnlockVersionFlag    = policyUnlockFlags.String("version", "REQUIRED", "Policy version")
+		policyUnlockGroupFlag      = policyUnlockFlags.String("group", "REQUIRED", "Policy group.")
+		policyUnlockPolicyNameFlag = policyUnlockFlags.String("policy-name", "REQUIRED", "Policy name.")
+		policyUnlockVersionFlag    = policyUnlockFlags.String("version", "REQUIRED", "Policy version.")
 	)
 	healthFlags.Usage = healthUsage
 	healthLivenessFlags.Usage = healthLivenessUsage
@@ -244,14 +242,12 @@ func policyEvaluateUsage() {
 
 Evaluate executes a policy with the given 'data' as input.
     -body JSON: 
-    -group STRING: Policy group
-    -policy-name STRING: Policy name
-    -version STRING: Policy version
+    -group STRING: Policy group.
+    -policy-name STRING: Policy name.
+    -version STRING: Policy version.
 
 Example:
-    %[1]s policy evaluate --body '{
-      "data": "Id odio aperiam voluptatem molestias corrupti sunt."
-   }' --group "Ipsum nihil quo." --policy-name "Repellat velit omnis." --version "Vitae qui."
+    %[1]s policy evaluate --body "Similique quisquam optio." --group "Repellat velit omnis." --policy-name "Vitae qui." --version "Provident fugiat at cupiditate."
 `, os.Args[0])
 }
 
@@ -259,12 +255,12 @@ func policyLockUsage() {
 	fmt.Fprintf(os.Stderr, `%[1]s [flags] policy lock -group STRING -policy-name STRING -version STRING
 
 Lock a policy so that it cannot be evaluated.
-    -group STRING: Policy group
-    -policy-name STRING: Policy name
-    -version STRING: Policy version
+    -group STRING: Policy group.
+    -policy-name STRING: Policy name.
+    -version STRING: Policy version.
 
 Example:
-    %[1]s policy lock --group "Repudiandae dolore quod." --policy-name "Aut ut fuga quae eius minus." --version "Architecto quibusdam ab."
+    %[1]s policy lock --group "In illum est et hic." --policy-name "Deleniti non nihil dolor aut sed." --version "Incidunt unde consequatur voluptas dolorem nisi temporibus."
 `, os.Args[0])
 }
 
@@ -272,11 +268,11 @@ func policyUnlockUsage() {
 	fmt.Fprintf(os.Stderr, `%[1]s [flags] policy unlock -group STRING -policy-name STRING -version STRING
 
 Unlock a policy so it can be evaluated again.
-    -group STRING: Policy group
-    -policy-name STRING: Policy name
-    -version STRING: Policy version
+    -group STRING: Policy group.
+    -policy-name STRING: Policy name.
+    -version STRING: Policy version.
 
 Example:
-    %[1]s policy unlock --group "Omnis quasi aut consequuntur." --policy-name "Tempore minus." --version "Quis quos qui earum velit illum."
+    %[1]s policy unlock --group "Aliquam atque voluptatum ut dolorem." --policy-name "Aut facere veniam repudiandae id." --version "Aut minus alias."
 `, os.Args[0])
 }
diff --git a/gen/http/openapi.json b/gen/http/openapi.json
index 488e432520f2553f7461bd93837d50fd7a0a9be0..b5984d3e4ea0da00dbc8096509d6e4125d42c9e9 100644
--- a/gen/http/openapi.json
+++ b/gen/http/openapi.json
@@ -1 +1 @@
-{"swagger":"2.0","info":{"title":"Policy Service","description":"The policy service exposes HTTP API for executing policies.","version":""},"host":"localhost:8080","consumes":["application/json","application/xml","application/gob"],"produces":["application/json","application/xml","application/gob"],"paths":{"/liveness":{"get":{"tags":["health"],"summary":"Liveness health","operationId":"health#Liveness","responses":{"200":{"description":"OK response."}},"schemes":["http"]}},"/policy/{group}/{policyName}/{version}/evaluation":{"post":{"tags":["policy"],"summary":"Evaluate policy","description":"Evaluate executes a policy with the given 'data' as input.","operationId":"policy#Evaluate","parameters":[{"name":"group","in":"path","description":"Policy group","required":true,"type":"string"},{"name":"policyName","in":"path","description":"Policy name","required":true,"type":"string"},{"name":"version","in":"path","description":"Policy version","required":true,"type":"string"},{"name":"EvaluateRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/PolicyEvaluateRequestBody","required":["data"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/PolicyEvaluateResponseBody","required":["result"]}}},"schemes":["http"]}},"/policy/{group}/{policyName}/{version}/lock":{"post":{"tags":["policy"],"summary":"Lock policy","description":"Lock a policy so that it cannot be evaluated.","operationId":"policy#Lock","parameters":[{"name":"group","in":"path","description":"Policy group","required":true,"type":"string"},{"name":"policyName","in":"path","description":"Policy name","required":true,"type":"string"},{"name":"version","in":"path","description":"Policy version","required":true,"type":"string"}],"responses":{"200":{"description":"OK response."}},"schemes":["http"]},"delete":{"tags":["policy"],"summary":"Unlock policy","description":"Unlock a policy so it can be evaluated again.","operationId":"policy#Unlock","parameters":[{"name":"group","in":"path","description":"Policy group","required":true,"type":"string"},{"name":"policyName","in":"path","description":"Policy name","required":true,"type":"string"},{"name":"version","in":"path","description":"Policy version","required":true,"type":"string"}],"responses":{"200":{"description":"OK response."}},"schemes":["http"]}},"/readiness":{"get":{"tags":["health"],"summary":"Readiness health","operationId":"health#Readiness","responses":{"200":{"description":"OK response."}},"schemes":["http"]}}},"definitions":{"PolicyEvaluateRequestBody":{"title":"PolicyEvaluateRequestBody","type":"object","properties":{"data":{"type":"string","description":"Data passed as input to the policy execution runtime","example":"Aut minus alias.","format":"binary"}},"example":{"data":"At eos facilis molestias in voluptas rem."},"required":["data"]},"PolicyEvaluateResponseBody":{"title":"PolicyEvaluateResponseBody","type":"object","properties":{"result":{"type":"string","description":"Arbitrary JSON response.","example":"Aliquam atque voluptatum ut dolorem.","format":"binary"}},"example":{"result":"Aut facere veniam repudiandae id."},"required":["result"]}}}
\ No newline at end of file
+{"swagger":"2.0","info":{"title":"Policy Service","description":"The policy service exposes HTTP API for executing policies.","version":""},"host":"localhost:8081","consumes":["application/json","application/xml","application/gob"],"produces":["application/json","application/xml","application/gob"],"paths":{"/liveness":{"get":{"tags":["health"],"summary":"Liveness health","operationId":"health#Liveness","responses":{"200":{"description":"OK response."}},"schemes":["http"]}},"/policy/{group}/{policyName}/{version}/evaluation":{"post":{"tags":["policy"],"summary":"Evaluate policy","description":"Evaluate executes a policy with the given 'data' as input.","operationId":"policy#Evaluate","parameters":[{"name":"group","in":"path","description":"Policy group.","required":true,"type":"string"},{"name":"policyName","in":"path","description":"Policy name.","required":true,"type":"string"},{"name":"version","in":"path","description":"Policy version.","required":true,"type":"string"},{"name":"any","in":"body","description":"Input data passed to the policy execution runtime.","required":true,"schema":{"type":"string","format":"binary"}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/PolicyEvaluateResponseBody","required":["result"]}}},"schemes":["http"]}},"/policy/{group}/{policyName}/{version}/lock":{"post":{"tags":["policy"],"summary":"Lock policy","description":"Lock a policy so that it cannot be evaluated.","operationId":"policy#Lock","parameters":[{"name":"group","in":"path","description":"Policy group.","required":true,"type":"string"},{"name":"policyName","in":"path","description":"Policy name.","required":true,"type":"string"},{"name":"version","in":"path","description":"Policy version.","required":true,"type":"string"}],"responses":{"200":{"description":"OK response."}},"schemes":["http"]},"delete":{"tags":["policy"],"summary":"Unlock policy","description":"Unlock a policy so it can be evaluated again.","operationId":"policy#Unlock","parameters":[{"name":"group","in":"path","description":"Policy group.","required":true,"type":"string"},{"name":"policyName","in":"path","description":"Policy name.","required":true,"type":"string"},{"name":"version","in":"path","description":"Policy version.","required":true,"type":"string"}],"responses":{"200":{"description":"OK response."}},"schemes":["http"]}},"/readiness":{"get":{"tags":["health"],"summary":"Readiness health","operationId":"health#Readiness","responses":{"200":{"description":"OK response."}},"schemes":["http"]}}},"definitions":{"PolicyEvaluateResponseBody":{"title":"PolicyEvaluateResponseBody","type":"object","properties":{"result":{"type":"string","description":"Arbitrary JSON response.","example":"At eos facilis molestias in voluptas rem.","format":"binary"}},"example":{"result":"Ab accusantium ut ut aliquid sint animi."},"required":["result"]}}}
\ No newline at end of file
diff --git a/gen/http/openapi.yaml b/gen/http/openapi.yaml
index 9b1b80e7cbecd453341b3519a52d7c274388710c..60990b84a7a9ebe2751a44abe450aa6e7b9f0bde 100644
--- a/gen/http/openapi.yaml
+++ b/gen/http/openapi.yaml
@@ -3,7 +3,7 @@ info:
   title: Policy Service
   description: The policy service exposes HTTP API for executing policies.
   version: ""
-host: localhost:8080
+host: localhost:8081
 consumes:
 - application/json
 - application/xml
@@ -34,26 +34,26 @@ paths:
       parameters:
       - name: group
         in: path
-        description: Policy group
+        description: Policy group.
         required: true
         type: string
       - name: policyName
         in: path
-        description: Policy name
+        description: Policy name.
         required: true
         type: string
       - name: version
         in: path
-        description: Policy version
+        description: Policy version.
         required: true
         type: string
-      - name: EvaluateRequestBody
+      - name: any
         in: body
+        description: Input data passed to the policy execution runtime.
         required: true
         schema:
-          $ref: '#/definitions/PolicyEvaluateRequestBody'
-          required:
-          - data
+          type: string
+          format: binary
       responses:
         "200":
           description: OK response.
@@ -73,17 +73,17 @@ paths:
       parameters:
       - name: group
         in: path
-        description: Policy group
+        description: Policy group.
         required: true
         type: string
       - name: policyName
         in: path
-        description: Policy name
+        description: Policy name.
         required: true
         type: string
       - name: version
         in: path
-        description: Policy version
+        description: Policy version.
         required: true
         type: string
       responses:
@@ -100,17 +100,17 @@ paths:
       parameters:
       - name: group
         in: path
-        description: Policy group
+        description: Policy group.
         required: true
         type: string
       - name: policyName
         in: path
-        description: Policy name
+        description: Policy name.
         required: true
         type: string
       - name: version
         in: path
-        description: Policy version
+        description: Policy version.
         required: true
         type: string
       responses:
@@ -130,19 +130,6 @@ paths:
       schemes:
       - http
 definitions:
-  PolicyEvaluateRequestBody:
-    title: PolicyEvaluateRequestBody
-    type: object
-    properties:
-      data:
-        type: string
-        description: Data passed as input to the policy execution runtime
-        example: Aut minus alias.
-        format: binary
-    example:
-      data: At eos facilis molestias in voluptas rem.
-    required:
-    - data
   PolicyEvaluateResponseBody:
     title: PolicyEvaluateResponseBody
     type: object
@@ -150,9 +137,9 @@ definitions:
       result:
         type: string
         description: Arbitrary JSON response.
-        example: Aliquam atque voluptatum ut dolorem.
+        example: At eos facilis molestias in voluptas rem.
         format: binary
     example:
-      result: Aut facere veniam repudiandae id.
+      result: Ab accusantium ut ut aliquid sint animi.
     required:
     - result
diff --git a/gen/http/openapi3.json b/gen/http/openapi3.json
index b5e80c94b4f27263fde97dabb3bc5853bc081ee7..e2c4e9780257067b00d350858e29fa720157039b 100644
--- a/gen/http/openapi3.json
+++ b/gen/http/openapi3.json
@@ -1 +1 @@
-{"openapi":"3.0.3","info":{"title":"Policy Service","description":"The policy service exposes HTTP API for executing policies.","version":"1.0"},"servers":[{"url":"http://localhost:8080","description":"Policy Server"}],"paths":{"/liveness":{"get":{"tags":["health"],"summary":"Liveness health","operationId":"health#Liveness","responses":{"200":{"description":"OK response."}}}},"/policy/{group}/{policyName}/{version}/evaluation":{"post":{"tags":["policy"],"summary":"Evaluate policy","description":"Evaluate executes a policy with the given 'data' as input.","operationId":"policy#Evaluate","parameters":[{"name":"group","in":"path","description":"Policy group","required":true,"schema":{"type":"string","description":"Policy group","example":"Non mollitia nesciunt impedit facere."},"example":"Ut commodi perspiciatis corporis."},{"name":"policyName","in":"path","description":"Policy name","required":true,"schema":{"type":"string","description":"Policy name","example":"Accusamus autem sequi."},"example":"Et nulla."},{"name":"version","in":"path","description":"Policy version","required":true,"schema":{"type":"string","description":"Policy version","example":"In quis nesciunt autem et."},"example":"Sunt in et quia cum."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvaluateRequestBody"},"example":{"data":"Id odio aperiam voluptatem molestias corrupti sunt."}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvaluateResult"},"example":{"result":"Provident fugiat at cupiditate."}}}}}}},"/policy/{group}/{policyName}/{version}/lock":{"delete":{"tags":["policy"],"summary":"Unlock policy","description":"Unlock a policy so it can be evaluated again.","operationId":"policy#Unlock","parameters":[{"name":"group","in":"path","description":"Policy group","required":true,"schema":{"type":"string","description":"Policy group","example":"Accusamus enim."},"example":"Recusandae est rerum corrupti quia."},{"name":"policyName","in":"path","description":"Policy name","required":true,"schema":{"type":"string","description":"Policy name","example":"Quam dolores architecto itaque."},"example":"Voluptas ad corporis adipisci inventore ipsum."},{"name":"version","in":"path","description":"Policy version","required":true,"schema":{"type":"string","description":"Policy version","example":"Recusandae dolorum nisi distinctio vitae ad."},"example":"Perspiciatis voluptatem."}],"responses":{"200":{"description":"OK response."}}},"post":{"tags":["policy"],"summary":"Lock policy","description":"Lock a policy so that it cannot be evaluated.","operationId":"policy#Lock","parameters":[{"name":"group","in":"path","description":"Policy group","required":true,"schema":{"type":"string","description":"Policy group","example":"Commodi nemo fugiat id praesentium accusantium expedita."},"example":"Qui non quia."},{"name":"policyName","in":"path","description":"Policy name","required":true,"schema":{"type":"string","description":"Policy name","example":"Error maxime quasi quia non voluptatibus error."},"example":"Optio quia et laborum."},{"name":"version","in":"path","description":"Policy version","required":true,"schema":{"type":"string","description":"Policy version","example":"In libero perspiciatis voluptatum ut soluta."},"example":"Ut amet."}],"responses":{"200":{"description":"OK response."}}}},"/readiness":{"get":{"tags":["health"],"summary":"Readiness health","operationId":"health#Readiness","responses":{"200":{"description":"OK response."}}}}},"components":{"schemas":{"EvaluateRequestBody":{"type":"object","properties":{"data":{"type":"string","description":"Data passed as input to the policy execution runtime","example":"Ab accusantium ut ut aliquid sint animi.","format":"binary"}},"example":{"data":"Dolorem cumque laborum quis nesciunt."},"required":["data"]},"EvaluateResult":{"type":"object","properties":{"result":{"type":"string","description":"Arbitrary JSON response.","example":"Aut voluptas.","format":"binary"}},"example":{"result":"Sint nam voluptatem ea consequatur similique et."},"required":["result"]}}},"tags":[{"name":"health","description":"Health service provides health check endpoints."},{"name":"policy","description":"Policy Service provides evaluation of policies through Open Policy Agent."}]}
\ No newline at end of file
+{"openapi":"3.0.3","info":{"title":"Policy Service","description":"The policy service exposes HTTP API for executing policies.","version":"1.0"},"servers":[{"url":"http://localhost:8081","description":"Policy Server"}],"paths":{"/liveness":{"get":{"tags":["health"],"summary":"Liveness health","operationId":"health#Liveness","responses":{"200":{"description":"OK response."}}}},"/policy/{group}/{policyName}/{version}/evaluation":{"post":{"tags":["policy"],"summary":"Evaluate policy","description":"Evaluate executes a policy with the given 'data' as input.","operationId":"policy#Evaluate","parameters":[{"name":"group","in":"path","description":"Policy group.","required":true,"schema":{"type":"string","description":"Policy group.","example":"Ut commodi perspiciatis corporis."},"example":"Accusamus autem sequi."},{"name":"policyName","in":"path","description":"Policy name.","required":true,"schema":{"type":"string","description":"Policy name.","example":"Et nulla."},"example":"In quis nesciunt autem et."},{"name":"version","in":"path","description":"Policy version.","required":true,"schema":{"type":"string","description":"Policy version.","example":"Sunt in et quia cum."},"example":"Commodi nemo fugiat id praesentium accusantium expedita."}],"requestBody":{"description":"Input data passed to the policy execution runtime.","required":true,"content":{"application/json":{"schema":{"type":"string","description":"Input data passed to the policy execution runtime.","example":"Dolorem cumque laborum quis nesciunt.","format":"binary"},"example":"Non mollitia nesciunt impedit facere."}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvaluateResult"},"example":{"result":"Explicabo beatae quisquam officiis libero voluptatibus."}}}}}}},"/policy/{group}/{policyName}/{version}/lock":{"delete":{"tags":["policy"],"summary":"Unlock policy","description":"Unlock a policy so it can be evaluated again.","operationId":"policy#Unlock","parameters":[{"name":"group","in":"path","description":"Policy group.","required":true,"schema":{"type":"string","description":"Policy group.","example":"Recusandae est rerum corrupti quia."},"example":"Quam dolores architecto itaque."},{"name":"policyName","in":"path","description":"Policy name.","required":true,"schema":{"type":"string","description":"Policy name.","example":"Voluptas ad corporis adipisci inventore ipsum."},"example":"Recusandae dolorum nisi distinctio vitae ad."},{"name":"version","in":"path","description":"Policy version.","required":true,"schema":{"type":"string","description":"Policy version.","example":"Perspiciatis voluptatem."},"example":"Corporis est rem."}],"responses":{"200":{"description":"OK response."}}},"post":{"tags":["policy"],"summary":"Lock policy","description":"Lock a policy so that it cannot be evaluated.","operationId":"policy#Lock","parameters":[{"name":"group","in":"path","description":"Policy group.","required":true,"schema":{"type":"string","description":"Policy group.","example":"Qui non quia."},"example":"Error maxime quasi quia non voluptatibus error."},{"name":"policyName","in":"path","description":"Policy name.","required":true,"schema":{"type":"string","description":"Policy name.","example":"Optio quia et laborum."},"example":"In libero perspiciatis voluptatum ut soluta."},{"name":"version","in":"path","description":"Policy version.","required":true,"schema":{"type":"string","description":"Policy version.","example":"Ut amet."},"example":"Accusamus enim."}],"responses":{"200":{"description":"OK response."}}}},"/readiness":{"get":{"tags":["health"],"summary":"Readiness health","operationId":"health#Readiness","responses":{"200":{"description":"OK response."}}}}},"components":{"schemas":{"EvaluateResult":{"type":"object","properties":{"result":{"type":"string","description":"Arbitrary JSON response.","example":"Aut voluptas.","format":"binary"}},"example":{"result":"Sint nam voluptatem ea consequatur similique et."},"required":["result"]}}},"tags":[{"name":"health","description":"Health service provides health check endpoints."},{"name":"policy","description":"Policy Service provides evaluation of policies through Open Policy Agent."}]}
\ No newline at end of file
diff --git a/gen/http/openapi3.yaml b/gen/http/openapi3.yaml
index caa0e51e5f51f2a69885fe8bd6566acb5c947d5c..66d1ca8c53bb54867873fea7086b7e895af411f3 100644
--- a/gen/http/openapi3.yaml
+++ b/gen/http/openapi3.yaml
@@ -4,7 +4,7 @@ info:
   description: The policy service exposes HTTP API for executing policies.
   version: "1.0"
 servers:
-- url: http://localhost:8080
+- url: http://localhost:8081
   description: Policy Server
 paths:
   /liveness:
@@ -26,39 +26,42 @@ paths:
       parameters:
       - name: group
         in: path
-        description: Policy group
+        description: Policy group.
         required: true
         schema:
           type: string
-          description: Policy group
-          example: Non mollitia nesciunt impedit facere.
-        example: Ut commodi perspiciatis corporis.
+          description: Policy group.
+          example: Ut commodi perspiciatis corporis.
+        example: Accusamus autem sequi.
       - name: policyName
         in: path
-        description: Policy name
+        description: Policy name.
         required: true
         schema:
           type: string
-          description: Policy name
-          example: Accusamus autem sequi.
-        example: Et nulla.
+          description: Policy name.
+          example: Et nulla.
+        example: In quis nesciunt autem et.
       - name: version
         in: path
-        description: Policy version
+        description: Policy version.
         required: true
         schema:
           type: string
-          description: Policy version
-          example: In quis nesciunt autem et.
-        example: Sunt in et quia cum.
+          description: Policy version.
+          example: Sunt in et quia cum.
+        example: Commodi nemo fugiat id praesentium accusantium expedita.
       requestBody:
+        description: Input data passed to the policy execution runtime.
         required: true
         content:
           application/json:
             schema:
-              $ref: '#/components/schemas/EvaluateRequestBody'
-            example:
-              data: Id odio aperiam voluptatem molestias corrupti sunt.
+              type: string
+              description: Input data passed to the policy execution runtime.
+              example: Dolorem cumque laborum quis nesciunt.
+              format: binary
+            example: Non mollitia nesciunt impedit facere.
       responses:
         "200":
           description: OK response.
@@ -67,7 +70,7 @@ paths:
               schema:
                 $ref: '#/components/schemas/EvaluateResult'
               example:
-                result: Provident fugiat at cupiditate.
+                result: Explicabo beatae quisquam officiis libero voluptatibus.
   /policy/{group}/{policyName}/{version}/lock:
     delete:
       tags:
@@ -78,31 +81,31 @@ paths:
       parameters:
       - name: group
         in: path
-        description: Policy group
+        description: Policy group.
         required: true
         schema:
           type: string
-          description: Policy group
-          example: Accusamus enim.
-        example: Recusandae est rerum corrupti quia.
+          description: Policy group.
+          example: Recusandae est rerum corrupti quia.
+        example: Quam dolores architecto itaque.
       - name: policyName
         in: path
-        description: Policy name
+        description: Policy name.
         required: true
         schema:
           type: string
-          description: Policy name
-          example: Quam dolores architecto itaque.
-        example: Voluptas ad corporis adipisci inventore ipsum.
+          description: Policy name.
+          example: Voluptas ad corporis adipisci inventore ipsum.
+        example: Recusandae dolorum nisi distinctio vitae ad.
       - name: version
         in: path
-        description: Policy version
+        description: Policy version.
         required: true
         schema:
           type: string
-          description: Policy version
-          example: Recusandae dolorum nisi distinctio vitae ad.
-        example: Perspiciatis voluptatem.
+          description: Policy version.
+          example: Perspiciatis voluptatem.
+        example: Corporis est rem.
       responses:
         "200":
           description: OK response.
@@ -115,31 +118,31 @@ paths:
       parameters:
       - name: group
         in: path
-        description: Policy group
+        description: Policy group.
         required: true
         schema:
           type: string
-          description: Policy group
-          example: Commodi nemo fugiat id praesentium accusantium expedita.
-        example: Qui non quia.
+          description: Policy group.
+          example: Qui non quia.
+        example: Error maxime quasi quia non voluptatibus error.
       - name: policyName
         in: path
-        description: Policy name
+        description: Policy name.
         required: true
         schema:
           type: string
-          description: Policy name
-          example: Error maxime quasi quia non voluptatibus error.
-        example: Optio quia et laborum.
+          description: Policy name.
+          example: Optio quia et laborum.
+        example: In libero perspiciatis voluptatum ut soluta.
       - name: version
         in: path
-        description: Policy version
+        description: Policy version.
         required: true
         schema:
           type: string
-          description: Policy version
-          example: In libero perspiciatis voluptatum ut soluta.
-        example: Ut amet.
+          description: Policy version.
+          example: Ut amet.
+        example: Accusamus enim.
       responses:
         "200":
           description: OK response.
@@ -154,18 +157,6 @@ paths:
           description: OK response.
 components:
   schemas:
-    EvaluateRequestBody:
-      type: object
-      properties:
-        data:
-          type: string
-          description: Data passed as input to the policy execution runtime
-          example: Ab accusantium ut ut aliquid sint animi.
-          format: binary
-      example:
-        data: Dolorem cumque laborum quis nesciunt.
-      required:
-      - data
     EvaluateResult:
       type: object
       properties:
diff --git a/gen/http/policy/client/cli.go b/gen/http/policy/client/cli.go
index a21b84cac1c1820fe19f0ab1a431c8c4322412b2..8b74da63e55e748a960e35ff3a512a48bb008aa1 100644
--- a/gen/http/policy/client/cli.go
+++ b/gen/http/policy/client/cli.go
@@ -12,24 +12,17 @@ import (
 	"fmt"
 
 	policy "code.vereign.com/gaiax/tsa/policy/gen/policy"
-	goa "goa.design/goa/v3/pkg"
 )
 
 // BuildEvaluatePayload builds the payload for the policy Evaluate endpoint
 // from CLI flags.
 func BuildEvaluatePayload(policyEvaluateBody string, policyEvaluateGroup string, policyEvaluatePolicyName string, policyEvaluateVersion string) (*policy.EvaluateRequest, error) {
 	var err error
-	var body EvaluateRequestBody
+	var body interface{}
 	{
 		err = json.Unmarshal([]byte(policyEvaluateBody), &body)
 		if err != nil {
-			return nil, fmt.Errorf("invalid JSON for body, \nerror: %s, \nexample of valid JSON:\n%s", err, "'{\n      \"data\": \"Id odio aperiam voluptatem molestias corrupti sunt.\"\n   }'")
-		}
-		if body.Data == nil {
-			err = goa.MergeErrors(err, goa.MissingFieldError("data", "body"))
-		}
-		if err != nil {
-			return nil, err
+			return nil, fmt.Errorf("invalid JSON for body, \nerror: %s, \nexample of valid JSON:\n%s", err, "\"Similique quisquam optio.\"")
 		}
 	}
 	var group string
@@ -44,14 +37,15 @@ func BuildEvaluatePayload(policyEvaluateBody string, policyEvaluateGroup string,
 	{
 		version = policyEvaluateVersion
 	}
-	v := &policy.EvaluateRequest{
-		Data: body.Data,
+	v := body
+	res := &policy.EvaluateRequest{
+		Input: v,
 	}
-	v.Group = group
-	v.PolicyName = policyName
-	v.Version = version
+	res.Group = group
+	res.PolicyName = policyName
+	res.Version = version
 
-	return v, nil
+	return res, nil
 }
 
 // BuildLockPayload builds the payload for the policy Lock endpoint from CLI
diff --git a/gen/http/policy/client/encode_decode.go b/gen/http/policy/client/encode_decode.go
index 8ca9db57355d87d67861d55a2f10f3e3b8dd7eac..cc62c4177f5b9f56c14adaca7dff08c6771e72a3 100644
--- a/gen/http/policy/client/encode_decode.go
+++ b/gen/http/policy/client/encode_decode.go
@@ -55,7 +55,7 @@ func EncodeEvaluateRequest(encoder func(*http.Request) goahttp.Encoder) func(*ht
 		if !ok {
 			return goahttp.ErrInvalidType("policy", "Evaluate", "*policy.EvaluateRequest", v)
 		}
-		body := NewEvaluateRequestBody(p)
+		body := p.Input
 		if err := encoder(req).Encode(&body); err != nil {
 			return goahttp.ErrEncodingError("policy", "Evaluate", err)
 		}
diff --git a/gen/http/policy/client/types.go b/gen/http/policy/client/types.go
index 36eb2a2eb58025c94f3491b0cd2a245daf5dab09..4bbf4babfe1d591928aa72fd43035cf89b3aeecd 100644
--- a/gen/http/policy/client/types.go
+++ b/gen/http/policy/client/types.go
@@ -12,13 +12,6 @@ import (
 	goa "goa.design/goa/v3/pkg"
 )
 
-// EvaluateRequestBody is the type of the "policy" service "Evaluate" endpoint
-// HTTP request body.
-type EvaluateRequestBody struct {
-	// Data passed as input to the policy execution runtime
-	Data interface{} `form:"data" json:"data" xml:"data"`
-}
-
 // EvaluateResponseBody is the type of the "policy" service "Evaluate" endpoint
 // HTTP response body.
 type EvaluateResponseBody struct {
@@ -26,15 +19,6 @@ type EvaluateResponseBody struct {
 	Result interface{} `form:"result,omitempty" json:"result,omitempty" xml:"result,omitempty"`
 }
 
-// NewEvaluateRequestBody builds the HTTP request body from the payload of the
-// "Evaluate" endpoint of the "policy" service.
-func NewEvaluateRequestBody(p *policy.EvaluateRequest) *EvaluateRequestBody {
-	body := &EvaluateRequestBody{
-		Data: p.Data,
-	}
-	return body
-}
-
 // NewEvaluateResultOK builds a "policy" service "Evaluate" endpoint result
 // from a HTTP "OK" response.
 func NewEvaluateResultOK(body *EvaluateResponseBody) *policy.EvaluateResult {
diff --git a/gen/http/policy/server/encode_decode.go b/gen/http/policy/server/encode_decode.go
index 19a86aaa201cc698c951109f332e94bacedc26d8..702747a37d0596b6f22cb31d6bbc69c1543e5374 100644
--- a/gen/http/policy/server/encode_decode.go
+++ b/gen/http/policy/server/encode_decode.go
@@ -34,7 +34,7 @@ func EncodeEvaluateResponse(encoder func(context.Context, http.ResponseWriter) g
 func DecodeEvaluateRequest(mux goahttp.Muxer, decoder func(*http.Request) goahttp.Decoder) func(*http.Request) (interface{}, error) {
 	return func(r *http.Request) (interface{}, error) {
 		var (
-			body EvaluateRequestBody
+			body interface{}
 			err  error
 		)
 		err = decoder(r).Decode(&body)
@@ -44,10 +44,6 @@ func DecodeEvaluateRequest(mux goahttp.Muxer, decoder func(*http.Request) goahtt
 			}
 			return nil, goa.DecodePayloadError(err.Error())
 		}
-		err = ValidateEvaluateRequestBody(&body)
-		if err != nil {
-			return nil, err
-		}
 
 		var (
 			group      string
@@ -59,7 +55,7 @@ func DecodeEvaluateRequest(mux goahttp.Muxer, decoder func(*http.Request) goahtt
 		group = params["group"]
 		policyName = params["policyName"]
 		version = params["version"]
-		payload := NewEvaluateRequest(&body, group, policyName, version)
+		payload := NewEvaluateRequest(body, group, policyName, version)
 
 		return payload, nil
 	}
diff --git a/gen/http/policy/server/types.go b/gen/http/policy/server/types.go
index 7db542fff9bb167b49ff6d329f4b42269c1c2154..8f123712ae895818271de3f69460ece5d5d20577 100644
--- a/gen/http/policy/server/types.go
+++ b/gen/http/policy/server/types.go
@@ -9,16 +9,8 @@ package server
 
 import (
 	policy "code.vereign.com/gaiax/tsa/policy/gen/policy"
-	goa "goa.design/goa/v3/pkg"
 )
 
-// EvaluateRequestBody is the type of the "policy" service "Evaluate" endpoint
-// HTTP request body.
-type EvaluateRequestBody struct {
-	// Data passed as input to the policy execution runtime
-	Data interface{} `form:"data,omitempty" json:"data,omitempty" xml:"data,omitempty"`
-}
-
 // EvaluateResponseBody is the type of the "policy" service "Evaluate" endpoint
 // HTTP response body.
 type EvaluateResponseBody struct {
@@ -36,15 +28,16 @@ func NewEvaluateResponseBody(res *policy.EvaluateResult) *EvaluateResponseBody {
 }
 
 // NewEvaluateRequest builds a policy service Evaluate endpoint payload.
-func NewEvaluateRequest(body *EvaluateRequestBody, group string, policyName string, version string) *policy.EvaluateRequest {
-	v := &policy.EvaluateRequest{
-		Data: body.Data,
+func NewEvaluateRequest(body interface{}, group string, policyName string, version string) *policy.EvaluateRequest {
+	v := body
+	res := &policy.EvaluateRequest{
+		Input: v,
 	}
-	v.Group = group
-	v.PolicyName = policyName
-	v.Version = version
+	res.Group = group
+	res.PolicyName = policyName
+	res.Version = version
 
-	return v
+	return res
 }
 
 // NewLockRequest builds a policy service Lock endpoint payload.
@@ -66,12 +59,3 @@ func NewUnlockRequest(group string, policyName string, version string) *policy.U
 
 	return v
 }
-
-// ValidateEvaluateRequestBody runs the validations defined on
-// EvaluateRequestBody
-func ValidateEvaluateRequestBody(body *EvaluateRequestBody) (err error) {
-	if body.Data == nil {
-		err = goa.MergeErrors(err, goa.MissingFieldError("data", "body"))
-	}
-	return
-}
diff --git a/gen/policy/service.go b/gen/policy/service.go
index 5d58f37a1abbd213f46448ac9e60d8493f6a3055..25f54089f5b7c33d79059c1cb7196c6a8b8f21b3 100644
--- a/gen/policy/service.go
+++ b/gen/policy/service.go
@@ -33,14 +33,14 @@ var MethodNames = [3]string{"Evaluate", "Lock", "Unlock"}
 
 // EvaluateRequest is the payload type of the policy service Evaluate method.
 type EvaluateRequest struct {
-	// Policy group
+	// Policy group.
 	Group string
-	// Policy name
+	// Policy name.
 	PolicyName string
-	// Policy version
+	// Policy version.
 	Version string
-	// Data passed as input to the policy execution runtime
-	Data interface{}
+	// Input data passed to the policy execution runtime.
+	Input interface{}
 }
 
 // EvaluateResult is the result type of the policy service Evaluate method.
@@ -51,20 +51,20 @@ type EvaluateResult struct {
 
 // LockRequest is the payload type of the policy service Lock method.
 type LockRequest struct {
-	// Policy group
+	// Policy group.
 	Group string
-	// Policy name
+	// Policy name.
 	PolicyName string
-	// Policy version
+	// Policy version.
 	Version string
 }
 
 // UnlockRequest is the payload type of the policy service Unlock method.
 type UnlockRequest struct {
-	// Policy group
+	// Policy group.
 	Group string
-	// Policy name
+	// Policy name.
 	PolicyName string
-	// Policy version
+	// Policy version.
 	Version string
 }
diff --git a/internal/service/policy/service.go b/internal/service/policy/service.go
index a9f6616aca71da37771186bf4a345af04aa1fc38..cb3012f5992f501a5ef799e2acaba44f5ba7a21e 100644
--- a/internal/service/policy/service.go
+++ b/internal/service/policy/service.go
@@ -2,6 +2,7 @@ package policy
 
 import (
 	"context"
+	"fmt"
 
 	"github.com/open-policy-agent/opa/rego"
 	"go.uber.org/zap"
@@ -28,7 +29,14 @@ func New(storage Storage, logger *zap.Logger) *Service {
 	}
 }
 
-// Evaluate executes a policy with the given 'data' as input.
+// Evaluate executes a policy with the given input.
+//
+// IMPORTANT: The policy must follow a strict convention so that such generic
+// evaluation function could work: package declaration inside the policy must
+// be exactly the same as 'group.policy'. For example:
+// Evaluating the URL: `.../policies/mygroup/example/1.0/evaluation` will
+// return results correctly, only if the package declaration inside the policy is:
+// `package mygroup.example`
 func (s *Service) Evaluate(ctx context.Context, req *policy.EvaluateRequest) (*policy.EvaluateResult, error) {
 	logger := s.logger.With(
 		zap.String("name", req.PolicyName),
@@ -49,33 +57,36 @@ func (s *Service) Evaluate(ctx context.Context, req *policy.EvaluateRequest) (*p
 		return nil, errors.New(errors.Forbidden, "policy is locked")
 	}
 
+	// regoQuery must match both the package declaration inside the policy
+	// and the group and policy name.
+	regoQuery := fmt.Sprintf("data.%s.%s", req.Group, req.PolicyName)
+
 	query, err := rego.New(
 		rego.Module(pol.Filename, pol.Rego),
-		rego.Query("result = data.gaiax.result"),
+		rego.Query(regoQuery),
 	).PrepareForEval(ctx)
 	if err != nil {
 		logger.Error("error preparing rego query", zap.Error(err))
 		return nil, errors.New("error preparing rego query", err)
 	}
 
-	resultSet, err := query.Eval(ctx, rego.EvalInput(req.Data))
+	resultSet, err := query.Eval(ctx, rego.EvalInput(req.Input))
 	if err != nil {
 		logger.Error("error evaluating rego query", zap.Error(err))
 		return nil, errors.New("error evaluating rego query", err)
 	}
 
 	if len(resultSet) == 0 {
-		logger.Error("policy evaluation result set is empty")
-		return nil, errors.New("policy evaluation result set is empty")
+		logger.Error("policy evaluation results are missing")
+		return nil, errors.New("policy evaluation results are missing")
 	}
 
-	result, ok := resultSet[0].Bindings["result"]
-	if !ok {
-		logger.Error("policy result bindings not found")
-		return nil, errors.New("policy result bindings not found")
+	if len(resultSet[0].Expressions) == 0 {
+		logger.Error("policy evaluation result expressions are missing")
+		return nil, errors.New("policy evaluation result expressions are missing")
 	}
 
-	return &policy.EvaluateResult{Result: result}, nil
+	return &policy.EvaluateResult{Result: resultSet[0].Expressions[0].Value}, nil
 }
 
 // Lock a policy so that it cannot be evaluated.