diff --git a/packages/backend/src/apps/http-request/actions/custom-request/index.ts b/packages/backend/src/apps/http-request/actions/custom-request/index.ts
new file mode 100644
index 00000000..a7a88d76
--- /dev/null
+++ b/packages/backend/src/apps/http-request/actions/custom-request/index.ts
@@ -0,0 +1,62 @@
+import defineAction from '../../../../helpers/define-action';
+
+type TMethod = 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE';
+
+export default defineAction({
+ name: 'Custom Request',
+ key: 'customRequest',
+ description: 'Makes a custom HTTP request by providing raw details.',
+ arguments: [
+ {
+ label: 'Method',
+ key: 'method',
+ type: 'dropdown' as const,
+ required: true,
+ description:
+ `The HTTP method we'll use to perform the request.`,
+ value: 'GET',
+ options: [
+ { label: 'DELETE', value: 'DELETE' },
+ { label: 'GET', value: 'GET' },
+ { label: 'PATCH', value: 'PATCH' },
+ { label: 'POST', value: 'POST' },
+ { label: 'PUT', value: 'PUT' },
+ ]
+ },
+ {
+ label: 'URL',
+ key: 'url',
+ type: 'string' as const,
+ required: true,
+ description: 'Any URL with a querystring will be re-encoded properly.',
+ variables: true,
+ },
+ {
+ label: 'Data',
+ key: 'data',
+ type: 'string' as const,
+ required: true,
+ description: 'Place raw JSON data here.',
+ variables: true,
+ },
+ ],
+
+ async run($) {
+ const method = $.step.parameters.method as TMethod;
+ const data = $.step.parameters.data as string;
+ const url = $.step.parameters.url as string;
+
+ const response = await $.http.request(
+ {
+ url,
+ method,
+ data,
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }
+ );
+
+ $.setActionItem({ raw: response.data });
+ },
+});
diff --git a/packages/backend/src/apps/http-request/actions/index.ts b/packages/backend/src/apps/http-request/actions/index.ts
new file mode 100644
index 00000000..2bfac8fc
--- /dev/null
+++ b/packages/backend/src/apps/http-request/actions/index.ts
@@ -0,0 +1,3 @@
+import customRequest from './custom-request';
+
+export default [customRequest];
diff --git a/packages/backend/src/apps/http-request/assets/favicon.svg b/packages/backend/src/apps/http-request/assets/favicon.svg
new file mode 100644
index 00000000..87c7dae5
--- /dev/null
+++ b/packages/backend/src/apps/http-request/assets/favicon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/backend/src/apps/http-request/index.d.ts b/packages/backend/src/apps/http-request/index.d.ts
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/backend/src/apps/http-request/index.ts b/packages/backend/src/apps/http-request/index.ts
new file mode 100644
index 00000000..9b6cc169
--- /dev/null
+++ b/packages/backend/src/apps/http-request/index.ts
@@ -0,0 +1,14 @@
+import defineApp from '../../helpers/define-app';
+import actions from './actions';
+
+export default defineApp({
+ name: 'HTTP Request',
+ key: 'http-request',
+ iconUrl: '{BASE_URL}/apps/http-request/assets/favicon.svg',
+ authDocUrl: 'https://automatisch.io/docs/apps/http-request/connection',
+ supportsConnections: false,
+ baseUrl: '',
+ apiBaseUrl: '',
+ primaryColor: '000000',
+ actions,
+});
diff --git a/packages/docs/pages/.vitepress/config.js b/packages/docs/pages/.vitepress/config.js
index 94b9d11f..3a16f115 100644
--- a/packages/docs/pages/.vitepress/config.js
+++ b/packages/docs/pages/.vitepress/config.js
@@ -78,6 +78,15 @@ export default defineConfig({
{ text: 'Connection', link: '/apps/github/connection' },
],
},
+ {
+ text: 'HTTP Request',
+ collapsible: true,
+ collapsed: true,
+ items: [
+ { text: 'Actions', link: '/apps/http-request/actions' },
+ { text: 'Connection', link: '/apps/http-request/connection' },
+ ],
+ },
{
text: 'Ntfy',
collapsible: true,
diff --git a/packages/docs/pages/apps/http-request/actions.md b/packages/docs/pages/apps/http-request/actions.md
new file mode 100644
index 00000000..4ecd45aa
--- /dev/null
+++ b/packages/docs/pages/apps/http-request/actions.md
@@ -0,0 +1,12 @@
+---
+favicon: /favicons/http-request.svg
+items:
+ - name: Custom Request
+ desc: Makes a custom HTTP request by providing raw details.
+---
+
+
+
+
diff --git a/packages/docs/pages/apps/http-request/connection.md b/packages/docs/pages/apps/http-request/connection.md
new file mode 100644
index 00000000..53c9974a
--- /dev/null
+++ b/packages/docs/pages/apps/http-request/connection.md
@@ -0,0 +1,3 @@
+# HTTP Request
+
+HTTP Request is a built-in app shipped with Automatisch, and it doesn't need to talk with any other external service to run. So there are no additional steps to use the HTTP Request app.
diff --git a/packages/docs/pages/guide/available-apps.md b/packages/docs/pages/guide/available-apps.md
index 5c96ad79..5874ca0c 100644
--- a/packages/docs/pages/guide/available-apps.md
+++ b/packages/docs/pages/guide/available-apps.md
@@ -11,9 +11,10 @@ Following integrations are currently supported by Automatisch.
- [Discord](/apps/discord/actions)
- [Flickr](/apps/flickr/triggers)
- [Github](/apps/github/triggers)
-- [RSS](/apps/rss/triggers)
+- [HTTP Request](/apps/http-request/actions)
- [Ntfy](/apps/ntfy/actions)
- [OpenAI](/apps/openai/actions)
+- [RSS](/apps/rss/triggers)
- [Salesforce](/apps/salesforce/triggers)
- [Scheduler](/apps/scheduler/triggers)
- [Slack](/apps/slack/actions)
diff --git a/packages/docs/pages/public/favicons/http-request.svg b/packages/docs/pages/public/favicons/http-request.svg
new file mode 100644
index 00000000..87c7dae5
--- /dev/null
+++ b/packages/docs/pages/public/favicons/http-request.svg
@@ -0,0 +1 @@
+
\ No newline at end of file