diff --git a/validation/api/src/types.rs b/validation/api/src/types.rs
index 1be3133..41e282e 100644
--- a/validation/api/src/types.rs
+++ b/validation/api/src/types.rs
@@ -60,9 +60,9 @@ pub async fn response_ok(response:reqwest::Response)->Result<reqwest::Response,R
 	}
 }
 
-#[derive(Clone,Copy,PartialEq,Eq,serde::Serialize,serde::Deserialize)]
+#[derive(Clone,Copy,Debug,PartialEq,Eq,serde::Serialize,serde::Deserialize)]
 pub struct ScriptID(pub(crate)i64);
-#[derive(Clone,Copy,serde::Serialize,serde::Deserialize)]
+#[derive(Clone,Copy,Debug,serde::Serialize,serde::Deserialize)]
 pub struct ScriptPolicyID(pub(crate)i64);
 
 #[allow(nonstandard_style)]
@@ -70,7 +70,7 @@ pub struct GetScriptRequest{
 	pub ScriptID:ScriptID,
 }
 #[allow(nonstandard_style)]
-#[derive(serde::Serialize)]
+#[derive(Clone,Debug,serde::Serialize)]
 pub struct GetScriptsRequest<'a>{
 	pub Page:u32,
 	pub Limit:u32,
@@ -83,11 +83,12 @@ pub struct GetScriptsRequest<'a>{
 	#[serde(skip_serializing_if="Option::is_none")]
 	pub SubmissionID:Option<i64>,
 }
+#[derive(Clone,Copy,Debug)]
 pub struct HashRequest<'a>{
 	pub hash:&'a str,
 }
 #[allow(nonstandard_style)]
-#[derive(serde::Deserialize)]
+#[derive(Clone,Debug,serde::Deserialize)]
 pub struct ScriptResponse{
 	pub ID:ScriptID,
 	pub Name:String,
@@ -96,7 +97,7 @@ pub struct ScriptResponse{
 	pub SubmissionID:i64,
 }
 #[allow(nonstandard_style)]
-#[derive(serde::Serialize)]
+#[derive(Clone,Debug,serde::Serialize)]
 pub struct CreateScriptRequest<'a>{
 	pub Name:&'a str,
 	pub Source:&'a str,
@@ -104,12 +105,12 @@ pub struct CreateScriptRequest<'a>{
 	pub SubmissionID:Option<i64>,
 }
 #[allow(nonstandard_style)]
-#[derive(serde::Deserialize)]
+#[derive(Clone,Debug,serde::Deserialize)]
 pub struct ScriptIDResponse{
 	pub ID:ScriptID,
 }
 
-#[derive(PartialEq,Eq,serde_repr::Serialize_repr,serde_repr::Deserialize_repr)]
+#[derive(Clone,Copy,Debug,PartialEq,Eq,serde_repr::Serialize_repr,serde_repr::Deserialize_repr)]
 #[repr(i32)]
 pub enum Policy{
 	None=0, // not yet reviewed
@@ -120,7 +121,7 @@ pub enum Policy{
 }
 
 #[allow(nonstandard_style)]
-#[derive(serde::Serialize)]
+#[derive(Clone,Debug,serde::Serialize)]
 pub struct GetScriptPoliciesRequest<'a>{
 	pub Page:u32,
 	pub Limit:u32,
@@ -132,7 +133,7 @@ pub struct GetScriptPoliciesRequest<'a>{
 	pub Policy:Option<Policy>,
 }
 #[allow(nonstandard_style)]
-#[derive(serde::Deserialize)]
+#[derive(Clone,Debug,serde::Deserialize)]
 pub struct ScriptPolicyResponse{
 	pub ID:ScriptPolicyID,
 	pub FromScriptHash:String,
@@ -140,20 +141,20 @@ pub struct ScriptPolicyResponse{
 	pub Policy:Policy
 }
 #[allow(nonstandard_style)]
-#[derive(serde::Serialize)]
+#[derive(Clone,Debug,serde::Serialize)]
 pub struct CreateScriptPolicyRequest{
 	pub FromScriptID:ScriptID,
 	pub ToScriptID:ScriptID,
 	pub Policy:Policy,
 }
 #[allow(nonstandard_style)]
-#[derive(serde::Deserialize)]
+#[derive(Clone,Debug,serde::Deserialize)]
 pub struct ScriptPolicyIDResponse{
 	pub ID:ScriptPolicyID,
 }
 
 #[allow(nonstandard_style)]
-#[derive(serde::Serialize)]
+#[derive(Clone,Debug,serde::Serialize)]
 pub struct UpdateScriptPolicyRequest{
 	pub ID:ScriptPolicyID,
 	#[serde(skip_serializing_if="Option::is_none")]
@@ -165,6 +166,7 @@ pub struct UpdateScriptPolicyRequest{
 }
 
 #[allow(nonstandard_style)]
+#[derive(Clone,Debug)]
 pub struct UpdateSubmissionModelRequest{
 	pub SubmissionID:i64,
 	pub ModelID:u64,
@@ -172,15 +174,18 @@ pub struct UpdateSubmissionModelRequest{
 }
 
 #[allow(nonstandard_style)]
+#[derive(Clone,Debug)]
 pub struct ActionSubmissionUploadedRequest{
 	pub SubmissionID:i64,
 	pub TargetAssetID:Option<u64>,
 }
 
 #[allow(nonstandard_style)]
+#[derive(Clone,Debug)]
 pub struct ActionSubmissionAcceptedRequest{
 	pub SubmissionID:i64,
 	pub StatusMessage:String,
 }
 
+#[derive(Clone,Copy,Debug)]
 pub struct SubmissionID(pub i64);