diff --git a/lib/NGCP/Panel/Controller/API/Subscribers.pm b/lib/NGCP/Panel/Controller/API/Subscribers.pm
index 0c9198e0a9..d2f300f6a0 100644
--- a/lib/NGCP/Panel/Controller/API/Subscribers.pm
+++ b/lib/NGCP/Panel/Controller/API/Subscribers.pm
@@ -409,7 +409,7 @@ sub POST :Allow {
         } catch(DBIx::Class::Exception $e where { /Duplicate entry '([^']+)' for key 'number_idx'/ }) {
             $e =~ /Duplicate entry '([^']+)' for key 'number_idx'/;
             $c->log->error("failed to create subscriber, number " . $c->qs($1) . " already exists"); # TODO: user, message, trace, ...
-            $self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Number '" . $c->qs($1) . "' already exists.");
+            $self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Number '" . $1 . "' already exists.", "Number already exists.");
             last;
         } catch($e) {
             if (ref $error_info->{extended} eq 'HASH' && $error_info->{extended}->{response_code}) {
diff --git a/lib/NGCP/Panel/Role/API.pm b/lib/NGCP/Panel/Role/API.pm
index 13282cd0dc..66a77a0d36 100644
--- a/lib/NGCP/Panel/Role/API.pm
+++ b/lib/NGCP/Panel/Role/API.pm
@@ -346,9 +346,10 @@ sub validate_fields {
 }
 
 sub error {
-    my ($self, $c, $code, $message) = @_;
+    my ($self, $c, $code, $message, $insensitive_message) = @_;
 
-    $c->log->error("error $code - $message"); # TODO: user, trace etc
+    my $msg = $insensitive_message // $message;
+    $c->log->error("error $code - $msg"); # TODO: user, trace etc
 
     $c->response->content_type('application/json');
     $c->response->status($code);
diff --git a/lib/NGCP/Panel/Role/API/Subscribers.pm b/lib/NGCP/Panel/Role/API/Subscribers.pm
index 2381a9b6c2..cebe7a5433 100644
--- a/lib/NGCP/Panel/Role/API/Subscribers.pm
+++ b/lib/NGCP/Panel/Role/API/Subscribers.pm
@@ -707,7 +707,7 @@ sub update_item {
     } catch(DBIx::Class::Exception $e where { /Duplicate entry '([^']+)' for key 'number_idx'/ }) {
         $e =~ /Duplicate entry '([^']+)' for key 'number_idx'/;
         $c->log->error("failed to update subscriber, number " . $c->qs($1) . " already exists"); # TODO: user, message, trace, ...
-        $self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Number '" . $c->qs($1) . "' already exists.");
+        $self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Number '" . $1 . "' already exists.", "Number already exists.");
         return;
     }
 
diff --git a/t/api-rest/api-subscribers.t b/t/api-rest/api-subscribers.t
index d4c4bb5a87..9f771726f5 100644
--- a/t/api-rest/api-subscribers.t
+++ b/t/api-rest/api-subscribers.t
@@ -234,7 +234,7 @@ if($remote_config->{config}->{features}->{cloudpbx}){
             $pilot_local = $pilot;
         } else {
             $pilot_local = $pilot;
-            
+
             $test_machine->request_patch(  [ { op => 'replace', path => '/alias_numbers', value => $alias_numbers } ], $pilot_local->{location} );
         }
         diag("50802: create member_to_terminate");
@@ -286,14 +286,14 @@ if($remote_config->{config}->{features}->{cloudpbx}){
             is($member_to_get_number->{content}->{id},$alias->{content}->{subscriber_id},"50802: check ownership: prev owner id: ".$member_to_get_number->{content}->{id}."; alias subscriber_id:".$alias->{content}->{subscriber_id});
             $test_machine->check_patch2get([ { op => 'replace', path => '/subscriber_id', value => $member_to_terminate->{content}->{id} } ] , $alias->{location});
         }
-        
+
         my $terminated_primary_number = $member_to_terminate->{content}->{primary_number};
         diag("50802: primary_number of member_to_terminate");
         diag(Dumper($terminated_primary_number));
-        
+
         diag("50802: terminate member_to_terminate");
         $test_machine->request_delete($member_to_terminate->{location});
- 
+
         $aliases = $test_machine->get_collection_hal('numbers', '/api/numbers/?type=alias&subscriber_id='.$pilot_local->{content}->{id}, 1)->{collection};
         #print Dumper $aliases;
         ok(((scalar @$aliases) == 4),"50802: aliases of ".$pilot_local->{content}->{id}." arent empty:".(scalar @$aliases ).". We returned aliases to pilot.");
@@ -514,7 +514,7 @@ if($remote_config->{config}->{features}->{cloudpbx}){
             ($res,$content,$req) = $test_machine->request_patch(  [ { op => 'replace', path => '/display_name', value => 'patched 34021' } ], $subscriber->{location} );
             $test_machine->http_code_msg(200, "Check display_name patch for subscriberadmin", $res, $content);
             my $pilot_34021 = $test_machine->get_item_hal('subscribers','/api/subscribers/?customer_id='.$subscriber->{content}->{customer_id}.'&'.'is_pbx_pilot=1');
-            my($res, $mod_34021_pilot) = $test_machine->request_patch([ 
+            my($res, $mod_34021_pilot) = $test_machine->request_patch([
                 #to don't intersect with manual testing on the web
                 { op => 'replace', path => '/profile_set_id', value => $fake_data->get_id('subscriberprofilesets') },
                 { op => 'replace', path => '/profile_id', value => undef },#we will take default profile for profile_set
@@ -545,7 +545,7 @@ if($remote_config->{config}->{features}->{cloudpbx}){
             $test_machine->http_code_msg(422, "Check incorrect profile_id patch for administrator", $res, $content);
             ($res,$content,$req) = $test_machine->request_patch( [ { op => 'replace', path => '/profile_set_id', value => $wrong_profile_sets->[0]->{content}->{id} } ], $subscriber->{location} );
             $test_machine->http_code_msg(422, "Check profile_set_id patch for administrator", $res, $content);
-            
+
             ($res,$content,$req) = $test_machine->request_patch( [ { op => 'replace', path => '/profile_id', value => $wrong_profiles->[0]->{content}->{id} } ], $subscriber->{location} );
             $test_machine->http_code_msg(422, "Check profile_id patch for administrator", $res, $content);
 
@@ -596,7 +596,7 @@ if($remote_config->{config}->{features}->{cloudpbx}){
                 'name' => 'other_reseller_subscriberprofile',
             },
         });
-        my($subscribers_other_reseller, $subscriberadmins_other_reseller) 
+        my($subscribers_other_reseller, $subscriberadmins_other_reseller)
             = create_subs_and_subadmin($fake_data_other_reseller, $test_machine_other_reseller);
 
         diag("#------------------------ create subscriber of other customer\n");
@@ -632,7 +632,7 @@ if($remote_config->{config}->{features}->{cloudpbx}){
                 'name' => 'other_customer_subscriberprofile',
             },
         });
-        my($subscribers_other_customer, $subscriberadmins_other_customer) 
+        my($subscribers_other_customer, $subscriberadmins_other_customer)
             = create_subs_and_subadmin($fake_data_other_customer, $test_machine_other_customer);
 
         diag("#------------------------ create usual subscriber of default test customer and reseller\n");
@@ -647,9 +647,9 @@ if($remote_config->{config}->{features}->{cloudpbx}){
         $fake_data_processed = $fake_data->process('subscribers');
         $test_machine->DATA_ITEM($fake_data_processed);
         #print Dumper $test_machine->DATA_ITEM;
-        my($subscribers, $subscriberadmins) 
+        my($subscribers, $subscriberadmins)
             = create_subs_and_subadmin($fake_data, $test_machine);
-        
+
         $test_machine->set_subscriber_credentials($subscriberadmins->[0]->{content});
         $test_machine->runas('subscriber');
         diag("\n\n\nSUBSCRIBERADMIN ".$subscriberadmins->[0]->{content}->{id}.":");
@@ -673,12 +673,12 @@ if($remote_config->{config}->{features}->{cloudpbx}){
         }, $subscribers_other_reseller->[0]->{content})->[0];
 
         #print Dumper [
-        #    $sub_create_attempt->{content}, 
-        #    $subscribers_other_reseller->[0]->{content}->{customer_id}, 
+        #    $sub_create_attempt->{content},
+        #    $subscribers_other_reseller->[0]->{content}->{customer_id},
         #    $subscriberadmins->[0]->{content}->{customer_id}];
         #print Dumper [$sub_create_attempt->{content}, $sub_create_attempt->{content_post}];
 
-        ok(($sub_create_attempt->{content}->{customer_id} != $subscribers_other_reseller->[0]->{content}->{customer_id}) 
+        ok(($sub_create_attempt->{content}->{customer_id} != $subscribers_other_reseller->[0]->{content}->{customer_id})
             && ($sub_create_attempt->{content}->{customer_id} == $subscriberadmins->[0]->{content}->{customer_id})
             && ($sub_create_attempt->{content_post}->{customer_id} == $subscribers_other_reseller->[0]->{content}->{customer_id}),
             "check that subscriberadminadmin customer_id ".$subscriberadmins->[0]->{content}->{customer_id}
@@ -690,19 +690,19 @@ if($remote_config->{config}->{features}->{cloudpbx}){
             .$sub_create_attempt->{content_post}->{administrative}
             ."=>".$sub_create_attempt->{content}->{administrative}.";");
 
-        #here we have unexpected error: 
+        #here we have unexpected error:
         #Sep  9 22:37:02 sp1 ngcp-panel: DEBUG: username:43350_8_; resource.domain_id:101;item.domain_id:535;
         #Sep  9 22:37:02 sp1 ngcp-panel: ERROR: error 422 - Subscriber with this username does not exist in the domain.
         diag("#-------------------------- 1. Check customer_id management ----------");
         my ($content_get,$content_put, $content_patch);
-        $test_machine->request_patch( [ { 
-                op     => 'replace', 
-                path   => '/customer_id', 
-                value  => $subscribers_other_customer->[0]->{content}->{customer_id} 
+        $test_machine->request_patch( [ {
+                op     => 'replace',
+                path   => '/customer_id',
+                value  => $subscribers_other_customer->[0]->{content}->{customer_id}
             } ], $subscribers->[0]->{location});
         (undef,$content_get) = $test_machine->check_item_get($subscribers->[0]->{location});
-        ok($content_get->{customer_id} == $fake_data->get_id('customers') 
-            && $content_get->{customer_id} != $subscribers_other_customer->[0]->{content}->{customer_id}, 
+        ok($content_get->{customer_id} == $fake_data->get_id('customers')
+            && $content_get->{customer_id} != $subscribers_other_customer->[0]->{content}->{customer_id},
             "check that subscribersadmin can't apply foreign customer_id to own subscribers: "
             .$subscribers_other_customer->[0]->{content}->{customer_id}."=>".$content_get->{customer_id});
 
@@ -710,8 +710,8 @@ if($remote_config->{config}->{features}->{cloudpbx}){
 
         $test_machine->request_put( $content_get, $subscribers->[0]->{location});
         (undef,$content_get) = $test_machine->check_item_get($subscribers->[0]->{location});
-        ok($content_get->{customer_id} == $fake_data->get_id('customers') 
-            && $content_get->{customer_id} != $subscribers_other_customer->[0]->{content}->{customer_id}, 
+        ok($content_get->{customer_id} == $fake_data->get_id('customers')
+            && $content_get->{customer_id} != $subscribers_other_customer->[0]->{content}->{customer_id},
             "check that subscribersadmin can't apply foreign customer_id to own subscribers: "
             .$subscribers_other_customer->[0]->{content}->{customer_id}."=>".$content_get->{customer_id});
 
@@ -747,7 +747,7 @@ if($remote_config->{config}->{features}->{cloudpbx}){
         delete $content_get->{alias_numbers}->[0]->{number_id};
         delete $subscribers_other_customer->[0]->{content}->{primary_number}->{number_id};
         # 0 if different, 1 if equal
-        #k(!Data::Compare::Compare($content_get->{alias_numbers}->[0], $subscribers_other_customer->[0]->{content}->{primary_number}), 
+        #k(!Data::Compare::Compare($content_get->{alias_numbers}->[0], $subscribers_other_customer->[0]->{content}->{primary_number}),
         #   "check that subscribersadmin can't manage others customers numbers. Other subscriber primary_number:\n"
         #   .Dumper($subscribers_other_customer->[0]->{content}->{primary_number})."\n=>\n".Dumper($content_get->{alias_numbers}->[0])
         #   );
@@ -760,7 +760,7 @@ if($remote_config->{config}->{features}->{cloudpbx}){
         $test_machine->http_code_msg(422, "check that subscribersadmin can't manage others customers profile_id", $res, $content_put);
         ($res,$content_get) = $test_machine->check_item_get($subscribers->[0]->{location});
         $content_get->{profile_id} //= '';
-        ok($content_get->{profile_id} != $subscribers_other_customer->[0]->{content}->{profile_id}, 
+        ok($content_get->{profile_id} != $subscribers_other_customer->[0]->{content}->{profile_id},
             "check that subscribersadmin can't apply others customers profile_id. "
             .$subscribers_other_customer->[0]->{content}->{profile_id}." => ".$content_get->{profile_id});
 
@@ -798,7 +798,7 @@ if($remote_config->{config}->{features}->{cloudpbx}){
         $test_machine->http_code_msg(422, "check that subscribersadmin can't assign other profileset profile_id", $res, $content_put);
         ($res,$content_get) = $test_machine->check_item_get($subscribers->[0]->{location});
         $content_get->{profile_id} //= '';
-        ok($content_get->{profile_id} != $subscriberprofile_other_profile_set->{content}->{id}, 
+        ok($content_get->{profile_id} != $subscriberprofile_other_profile_set->{content}->{id},
             "check that subscribersadmin can't apply other profileset profile_id. "
             .$subscriberprofile_other_profile_set->{content}->{id}." => ".$content_get->{profile_id});
 
@@ -833,7 +833,7 @@ if($remote_config->{config}->{features}->{cloudpbx}){
         $test_machine->http_code_msg(200, "check that subscribersadmin can assign other profile from correct profile_set", $res, $content_put);
         ($res,$content_get) = $test_machine->check_item_get($subscribers->[0]->{location});
         $content_get->{profile_id} //= '';
-        ok($content_get->{profile_id} eq $subscriberprofile_other->{content}->{id}, 
+        ok($content_get->{profile_id} eq $subscriberprofile_other->{content}->{id},
             "check that subscribersadmin can't apply other profileset profile_id. "
             .$subscriberprofile_other->{content}->{id}." => ".$content_get->{profile_id});
 
@@ -842,7 +842,7 @@ if($remote_config->{config}->{features}->{cloudpbx}){
         ($res,$content_patch) = $test_machine->request_patch(  [ { op => 'replace', path => '/display_name', value => 'patched_43350' } ], $subscribers->[0]->{location});
         $test_machine->http_code_msg(200, "check that subscribersadmin can manage available fields", $res, $content_patch);
         ($res,$content_get) = $test_machine->check_item_get($subscribers->[0]->{location});
-        ok($content_get->{display_name} eq 'patched_43350', 
+        ok($content_get->{display_name} eq 'patched_43350',
             "check that subscribersadmin can manage display_name");
 
         diag("#-------------------------- 5. ACCESS other's customer subscribers ----------");
@@ -1068,7 +1068,7 @@ sub create_subs_and_subadmin {
     my $pilot_l = $test_machine_l->get_item_hal('subscribers','/api/subscribers/?customer_id='.$fake_data_l_processed->{customer_id}.'&'.'is_pbx_pilot=1');
     if((exists $pilot_l->{total_count} && $pilot_l->{total_count}) || (exists $pilot_l->{content}->{total_count} && $pilot_l->{content}->{total_count} > 0)){
         #remove existing pilot aliases to don't intersect with them. On subscriber termination admin adopt numbers, see ticket#4967
-        my($res, $mod_pilot) = $test_machine_l->request_patch([ 
+        my($res, $mod_pilot) = $test_machine_l->request_patch([
                 { op => 'replace', path => '/alias_numbers', value => [] },
                 #to don't intersect with manual testing on the web
                 { op => 'replace', path => '/profile_set_id', value => $fake_data_l->get_id('subscriberprofilesets') },