diff --git a/samples/compute/v2/servers/resume_server.php b/samples/compute/v2/servers/resume_server.php
new file mode 100644
index 00000000..e155f86a
--- /dev/null
+++ b/samples/compute/v2/servers/resume_server.php
@@ -0,0 +1,21 @@
+<?php
+
+require 'vendor/autoload.php';
+
+$openstack = new OpenStack\OpenStack([
+    'authUrl' => '{authUrl}',
+    'region'  => '{region}',
+    'user'    => [
+        'id'       => '{userId}',
+        'password' => '{password}'
+    ],
+    'scope'   => ['project' => ['id' => '{projectId}']]
+]);
+
+$compute = $openstack->computeV2(['region' => '{region}']);
+
+$server = $compute->getServer([
+    'id' => '{serverId}',
+]);
+
+$server->resume();
diff --git a/samples/compute/v2/servers/suspend_server.php b/samples/compute/v2/servers/suspend_server.php
new file mode 100644
index 00000000..42b80016
--- /dev/null
+++ b/samples/compute/v2/servers/suspend_server.php
@@ -0,0 +1,21 @@
+<?php
+
+require 'vendor/autoload.php';
+
+$openstack = new OpenStack\OpenStack([
+    'authUrl' => '{authUrl}',
+    'region'  => '{region}',
+    'user'    => [
+        'id'       => '{userId}',
+        'password' => '{password}'
+    ],
+    'scope'   => ['project' => ['id' => '{projectId}']]
+]);
+
+$compute = $openstack->computeV2(['region' => '{region}']);
+
+$server = $compute->getServer([
+    'id' => '{serverId}',
+]);
+
+$server->suspend();
diff --git a/src/Compute/v2/Api.php b/src/Compute/v2/Api.php
index 2a8dde1a..ee4adfa0 100644
--- a/src/Compute/v2/Api.php
+++ b/src/Compute/v2/Api.php
@@ -332,6 +332,30 @@ public function stopServer(): array
         ];
     }
 
+    public function resumeServer(): array
+    {
+        return [
+            'method' => 'POST',
+            'path'   => 'servers/{id}/action',
+            'params' => [
+                'id'     => $this->params->urlId('server'),
+                'resume' => $this->params->nullAction(),
+            ],
+        ];
+    }
+
+    public function suspendServer(): array
+    {
+        return [
+            'method' => 'POST',
+            'path'   => 'servers/{id}/action',
+            'params' => [
+                'id'      => $this->params->urlId('server'),
+                'suspend' => $this->params->nullAction(),
+            ],
+        ];
+    }
+
     public function rebuildServer(): array
     {
         return [
diff --git a/src/Compute/v2/Models/Server.php b/src/Compute/v2/Models/Server.php
index 96a88b12..f5f9ae65 100644
--- a/src/Compute/v2/Models/Server.php
+++ b/src/Compute/v2/Models/Server.php
@@ -217,6 +217,28 @@ public function stop()
         ]);
     }
 
+    /**
+     * Resumes server.
+     */
+    public function resume()
+    {
+        $this->execute($this->api->resumeServer(), [
+            'id'     => $this->id,
+            'resume' => null,
+        ]);
+    }
+
+    /**
+     * Suspends server.
+     */
+    public function suspend()
+    {
+        $this->execute($this->api->suspendServer(), [
+            'id'      => $this->id,
+            'suspend' => null,
+        ]);
+    }
+
     /**
      * Rebuilds the server.
      *
diff --git a/tests/integration/Compute/v2/CoreTest.php b/tests/integration/Compute/v2/CoreTest.php
index e67eb419..da06ed87 100644
--- a/tests/integration/Compute/v2/CoreTest.php
+++ b/tests/integration/Compute/v2/CoreTest.php
@@ -165,6 +165,8 @@ public function runTests()
             //$this->changeServerPassword();
             $this->stopServer();
             $this->startServer();
+            $this->suspendServer();
+            $this->resumeServer();
             $this->resizeServer();
             $this->confirmServerResize();
             $this->rebuildServer();
@@ -446,6 +448,30 @@ private function startServer()
         $this->logStep('Started server {serverId}', $replacements);
     }
 
+    private function suspendServer()
+    {
+        $replacements = ['{serverId}' => $this->serverId];
+
+        /** @var $server \OpenStack\Compute\v2\Models\Server */
+        require_once $this->sampleFile($replacements, 'servers/suspend_server.php');
+
+        $server->waitUntil('SUSPENDED', false);
+
+        $this->logStep('Suspended server {serverId}', $replacements);
+    }
+
+    private function resumeServer()
+    {
+        $replacements = ['{serverId}' => $this->serverId];
+
+        /** @var $server \OpenStack\Compute\v2\Models\Server */
+        require_once $this->sampleFile($replacements, 'servers/resume_server.php');
+
+        $server->waitUntilActive(false);
+
+        $this->logStep('Resumed server {serverId}', $replacements);
+    }
+
     private function createFlavor()
     {
         $replacements = [
diff --git a/tests/unit/Compute/v2/Models/ServerTest.php b/tests/unit/Compute/v2/Models/ServerTest.php
index 5b637e12..a5e48e3d 100644
--- a/tests/unit/Compute/v2/Models/ServerTest.php
+++ b/tests/unit/Compute/v2/Models/ServerTest.php
@@ -211,6 +211,24 @@ public function test_it_stops()
         self::assertNull($this->server->stop());
     }
 
+    public function test_it_resumes()
+    {
+        $expectedJson = ['resume' => null];
+
+        $this->setupMock('POST', 'servers/serverId/action', $expectedJson, [], new Response(202));
+
+        $this->assertNull($this->server->resume());
+    }
+
+    public function test_it_suspends()
+    {
+        $expectedJson = ['suspend' => null];
+
+        $this->setupMock('POST', 'servers/serverId/action', $expectedJson, [], new Response(202));
+
+        $this->assertNull($this->server->suspend());
+    }
+
     public function test_it_resizes()
     {
         $expectedJson = ['resize' => ['flavorRef' => 'flavorId']];