my $url = URI->new(URL_API . $uri); my $header = ['Content-Type' => 'application/json; charset=UTF-8']; if ($auth) { my $token_string = "Bearer " . $self->_access_token; push @$header, 'Authorization' => $token_string; } my $request = HTTP::Request->new( $type, $url, $header, JSON->new->allow_nonref->encode($api_params) ); my $response; for (1 .. API_TIMEOUT_RETRIES) { # If a timeout (ie. code 500) occurs, repeat the API call $response = $self->mech->request($request); if ($response->is_success) { my $response_data = _decode($response->decoded_content)->{response}; $self->_cache( endpoint => $endpoint_name, id => $id, data => $response_data ); return $response_data; } elsif ($response->code == 500) { next; } }