public function callStripeApi(string $endpoint, string $action, array $arguments)
    {
        try {
            switch (count($arguments)) {
                // Method with 1 argument only accept "options"
                case 1:
                    // If the value is an empty array, then set it as null
                    $options = empty($arguments['options']) ? null : $arguments['options'];
                    $return  = $endpoint::$action($options);
                    break;
                case 2:
                    // If the ID exists, we have to call for sure a method that in the signature has the ID and the options
                    if (isset($arguments['id'])) {
                        // If the value is an empty array, then set it as null
                        $options = empty($arguments['options']) ? null : $arguments['options'];
                        $return  = $endpoint::$action($arguments['id'], $options);
                    }
                    // Else the method has params and options
                    else {
                        // If the value is an empty array, then set it as null
                        $params  = empty($arguments['params']) ? null : $arguments['params'];
                        $options = empty($arguments['options']) ? null : $arguments['options'];
                        $return  = $endpoint::$action($params, $options);
                    }
                    break;
                // Method with 3 arguments accept id, params and options
                case 3:
                    // If the value is an empty array, then set it as null
                    $params  = empty($arguments['params']) ? null : $arguments['params'];
                    $options = empty($arguments['options']) ? null : $arguments['options'];
                    $return  = $endpoint::$action($arguments['id'], $params, $options);
                    break;
                default:
                    throw new \RuntimeException('The arguments passed don\'t correspond to the allowed number. Please, review them.');
            }
        } catch (Base $e) {
            $return = $this->handleException($e);

            if ('retry' === $return) {
                $return = $this->callStripeApi($endpoint, $action, $arguments);
            }
        }

        // Reset the number of retries
        $this->retries = 0;

        return $return;
    }