diff --git a/.gitignore b/.gitignore
index 1ccef05..ecfa0ca 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,4 @@
 /.idea
 *.swp
 *.swo
+.idea/
diff --git a/src/Actions/ManagesWorkflow.php b/src/Actions/ManagesWorkflow.php
new file mode 100644
index 0000000..bee95f6
--- /dev/null
+++ b/src/Actions/ManagesWorkflow.php
@@ -0,0 +1,87 @@
+<?php
+
+namespace Novu\SDK\Actions;
+
+use Novu\SDK\Resources\Workflow;
+
+trait ManagesWorkflow
+{
+    /**
+     * Get Workflows.
+     *
+     * @return \Novu\SDK\Resources\Workflow
+     */
+    public function getWorkflows(int $page = 1, int $limit = 10)
+    {
+        $response = $this->get('workflows?' . http_build_query(['page' => $page, 'limit' => $limit]))['data'];
+
+        return new Workflow($response, $this);
+    }
+
+    /**
+     * Create Workflow.
+     *
+     * @param array $data
+     * @return \Novu\SDK\Resources\Workflow
+     */
+    public function createWorkflow(array $data)
+    {
+        $response = $this->post('workflows', $data)['data'];
+
+        return new Workflow($response, $this);
+    }
+
+    /**
+     * Get Workflow.
+     *
+     * @param string $workflowId
+     * @return \Novu\SDK\Resources\Workflow
+     */
+    public function getWorkflow(string $workflowId)
+    {
+        $response = $this->get("workflows/{$workflowId}")['data'];
+
+        return new Workflow($response, $this);
+    }
+
+    /**
+     * Update Workflow.
+     *
+     * @param string $workflowId
+     * @param array $data
+     * @return \Novu\SDK\Resources\Workflow
+     */
+    public function updateWorkflow(string $workflowId, array $data)
+    {
+        $response = $this->put("workflows/{$workflowId}", $data)['data'];
+
+        return new Workflow($response, $this);
+    }
+
+    /**
+     * Delete Workflow.
+     *
+     * @param string $workflowId
+     * @return bool
+     */
+    public function deleteWorkflow(string $workflowId)
+    {
+        $response = $this->delete("workflows/{$workflowId}")['data'];
+
+        return $response;
+    }
+
+    /**
+     * Update Workflow Status.
+     *
+     * @param string $workflowId
+     * @param array $data
+     * @return \Novu\SDK\Resources\Workflow
+     */
+    public function updateWorkflowStatus(string $workflowId, array $data)
+    {
+        $response = $this->put("workflows/{$workflowId}/status", $data)['data'];
+
+        return new Workflow($response, $this);
+    }
+}
diff --git a/src/Novu.php b/src/Novu.php
index 3ced58e..10230bd 100644
--- a/src/Novu.php
+++ b/src/Novu.php
@@ -26,6 +26,7 @@ class Novu
         Actions\ManagesTriggers,
         Actions\ManagesNotificationGroups,
         Actions\ManagesNotificationTemplates,
+        Actions\ManagesWorkflow,
         Actions\ManagesBlueprints;
 
     /**
diff --git a/src/Resources/Workflow.php b/src/Resources/Workflow.php
new file mode 100644
index 0000000..082e246
--- /dev/null
+++ b/src/Resources/Workflow.php
@@ -0,0 +1,131 @@
+<?php
+
+namespace Novu\SDK\Resources;
+
+class Workflow extends Resource
+{
+    /**
+     * @var string
+     */
+    public $id;
+
+    /**
+     * @var string
+     */
+    public $name;
+
+    /**
+     * @var boolean
+     */
+    public $active;
+
+    /**
+     * @var boolean
+     */
+    public $draft;
+
+    /**
+     * @var boolean
+     */
+    public $critical;
+
+    /**
+     * @var boolean
+     */
+    public $isBlueprint;
+
+    /**
+     * @var string
+     */
+    public $notificationGroupId;
+
+    /**
+     * @var array
+     */
+    public $tags;
+
+
+    /**
+     * @var array
+     */
+    public $triggers;
+
+
+    /**
+     * @var array
+     */
+    public $steps;
+
+
+    /**
+     * @var object
+     */
+    public $preferenceSettings;
+
+
+    /**
+     * @var string
+     */
+    public $environmentId;
+
+
+    /**
+     * @var string
+     */
+    public $organizationId;
+
+
+    /**
+     * @var string
+     */
+    public $creatorId;
+
+
+    /**
+     * @var bool
+     */
+    public $deleted;
+
+
+    /**
+     * @var string
+     */
+    public $createdAt;
+
+
+    /**
+     * @var string
+     */
+    public $updatedAt;
+
+
+    /**
+     * @var string
+     */
+    public $v;
+
+
+    /**
+     * @var array
+     */
+    public $notificationGroup;
+
+
+    /**
+     * @var array
+     */
+    public $workflowIntegrationStatus;
+
+
+    public function toArray(): array
+    {
+        $publicProperties = get_object_vars($this);
+
+        unset($publicProperties['attributes']);
+        unset($publicProperties['novu']);
+
+        return array_filter($publicProperties, function ($value) {
+            return null !== $value;
+        });
+    }
+}
diff --git a/tests/Feature.php b/tests/Feature.php
deleted file mode 100644
index 4b4b807..0000000
--- a/tests/Feature.php
+++ /dev/null
@@ -1,9 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace Novu\Tests;
-
-test('example', function () {
-    expect(true)->toBeTrue();
-});
diff --git a/tests/WorkflowTests.php b/tests/WorkflowTests.php
new file mode 100644
index 0000000..0b71c3b
--- /dev/null
+++ b/tests/WorkflowTests.php
@@ -0,0 +1,152 @@
+<?php
+
+namespace Tests;
+
+use Novu\SDK\Novu;
+use Novu\SDK\Resources\Workflow;
+use PHPUnit\Framework\TestCase;
+
+class WorkflowTests extends Testcase
+{
+    /**
+     * @var \Novu\SDK\Novu
+     */
+    private $novu;
+
+    protected function setUp(): void
+    {
+        $this->novu = new Novu([getenv('NOVU_API_KEY')]);
+    }
+
+    public function testCreateWorkflow()
+    {
+        $workflow = $this->novu->createWorkflow(
+            [
+                'name'                => 'Onboarding Workflow',
+                'notificationGroupId' => '5f5f5f5f5f5f5f5f5f5f5f5f',
+                'steps'               => [
+                    [
+                        'active'           => true,
+                        'shouldStopOnFail' => false,
+                        'uuid'             => '78ab8c72-46de-49e4-8464-257085960f9e',
+                        'name'             => 'Chat',
+                        'filters'          => [
+                            [
+                                'value'    => 'AND',
+                                'children' => [
+                                    [
+                                        'field'    => '{{chatContent}}',
+                                        'value'    => 'flag',
+                                        'operator' => 'NOT_IN',
+                                        'on'       => 'PAYLOAD',
+                                    ],
+                                ],
+                            ],
+                        ],
+                        'template' => [
+                            'type'      => 'chat',
+                            'active'    => true,
+                            'subject'   => '',
+                            'variables' => [
+                                [
+                                    'name'     => 'chatContent',
+                                    'type'     => 'STRING',
+                                    'required' => true,
+                                ],
+                            ],
+                            'content'     => '{{chatContent}}',
+                            'contentType' => 'editor',
+                        ],
+                    ],
+                ],
+                'description' => 'Onboarding workflow to trigger after user sign up',
+//                'active'      => true,
+//                'draft'       => false,
+//                'critical'    => false,
+            ]
+        );
+        $this->assertNotNull($workflow->id);
+        $this->assertEquals('Onboarding Workflow', $workflow->name);
+        $this->assertEquals(false, $workflow->active);
+        $this->assertEquals(true, $workflow->draft);
+        $this->assertEquals(false, $workflow->critical);
+
+        return $workflow;
+    }
+
+    /**
+     * @depends testCreateWorkflow
+     */
+    public function testGetWorkflow(Workflow $workflow)
+    {
+        $workflow = $this->novu->getWorkflow($workflow->id);
+        $this->assertNotNull($workflow->id);
+        $this->assertEquals('Onboarding Workflow', $workflow->name);
+        $this->assertFalse($workflow->active);
+        $this->assertTrue($workflow->draft);
+        $this->assertFalse($workflow->critical);
+
+        return $workflow;
+    }
+
+    public function testGetWorkflows()
+    {
+        $workflows = $this->novu->getWorkflows();
+        $this->assertNotNull($workflows);
+    }
+
+    /**
+     * @depends testCreateWorkflow
+     */
+    public function testUpdateWorkflows(Workflow $workflow)
+    {
+        $workflow = $this->novu->updateWorkflow($workflow->id, [
+            'name'                => 'Test Workflow',
+            'active'              => true,
+            'draft'               => false,
+            'critical'            => false,
+            'isBlueprint'         => false,
+            'notificationGroupId' => '5f5f5f5f5f5f5f5f5f5f5f5f',
+            'tags'                => ['test', 'test2'],
+            'steps'               => [
+                [
+                    'type'      => 'email',
+                    'name'      => 'test',
+                    'email'     => 'test@test.com',
+                    'active'    => true,
+                ],
+            ],
+        ]);
+        $this->assertNotNull($workflow->id);
+        $this->assertEquals('Test Workflow', $workflow->name);
+        $this->assertEquals(true, $workflow->active);
+        $this->assertEquals(false, $workflow->draft);
+        $this->assertEquals(false, $workflow->critical);
+    }
+
+    /**
+     * @depends testCreateWorkflow
+     */
+    public function testUpdateWorkflowStatus(Workflow $workflow)
+    {
+        $workflow = $this->novu->updateWorkflowStatus($workflow->id, [
+            'active'              => true,
+            'draft'               => false,
+            'critical'            => false,
+        ]);
+        $this->assertNotNull($workflow->id);
+        $this->assertEquals('Test Workflow', $workflow->name);
+        $this->assertTrue($workflow->active);
+        $this->assertFalse($workflow->draft);
+        $this->assertFalse($workflow->critical);
+    }
+
+    /**
+     * @depends testCreateWorkflow
+     */
+    public function testDeleteWorkflow(Workflow $workflow)
+    {
+        $workflow = $this->novu->deleteWorkflow($workflow->id);
+       $this->assertTrue($workflow);
+    }
+}