diff --git a/.claude/settings.local.json b/.claude/settings.local.json
index d769b859..3335494d 100644
--- a/.claude/settings.local.json
+++ b/.claude/settings.local.json
@@ -22,9 +22,10 @@
"Bash(npm run:*)",
"Bash(git add:*)",
"Bash(git commit:*)",
- "Bash(git rm:*)"
+ "Bash(git rm:*)",
+ "Bash(npx docusaurus:*)"
],
"deny": [],
"ask": []
}
-}
\ No newline at end of file
+}
diff --git a/docs/api/configure-profile-service.api.mdx b/docs/api/configure-profile-service.api.mdx
new file mode 100644
index 00000000..7ee826d2
--- /dev/null
+++ b/docs/api/configure-profile-service.api.mdx
@@ -0,0 +1,94 @@
+---
+id: configure-profile-service
+title: "Configure Service Provider"
+description: "Configure external service providers for your profile. This allows you to set up integrations with third-party services for SMS and Email messaging."
+sidebar_label: "Configure Service Provider"
+hide_title: true
+hide_table_of_contents: true
+api: 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
+sidebar_class_name: "put api-method"
+info_path: docs/api/tagoio-api
+custom_edit_url: null
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+
+
+
+
+
+
+
+
+
+
+Configure external service providers for your profile. This allows you to set up integrations with third-party services for SMS and Email messaging.
+
+**Available service providers:**
+
+| Service Type | Provider | Description |
+|--------------|----------|-------------|
+| `sms` | Twilio | Send SMS messages via Twilio |
+| `sms` | SNS | Send SMS messages via Amazon SNS |
+| `email` | SendGrid | Send emails via SendGrid API |
+| `email` | SES | Send emails via Amazon SES |
+| `email` | SMTP | Send emails via custom SMTP server |
+
+**Important notes:**
+- Credentials are securely stored using [TagoIO Secrets](/docs/tagoio/getting-started/secrets). You must create the appropriate secrets before configuring a service provider.
+- Each service type can only have one active provider configuration at a time
+- Use the test endpoint to verify your configuration before using it in production
+
+**Required secrets by provider:**
+- **Twilio SMS**: Create two Text secrets containing your Twilio SID and Auth Token
+- **SNS SMS**: Create an AWS SQS Secret with your AWS credentials (region, access key, secret key)
+- **SendGrid Email**: Create a Text secret containing your SendGrid API Key
+- **SES Email**: Create an AWS SQS Secret with your AWS credentials (region, access key, secret key)
+- **SMTP Email**: Create an SMTP Secret with your server configuration
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/send-data-using-network.api.mdx b/docs/api/send-data-using-network.api.mdx
index 78442c5f..2d26f20a 100644
--- a/docs/api/send-data-using-network.api.mdx
+++ b/docs/api/send-data-using-network.api.mdx
@@ -5,7 +5,7 @@ description: "Send data to TagoIO using the Network instead."
sidebar_label: "Send Data using Network"
hide_title: true
hide_table_of_contents: true
-api: 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
+api: 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
sidebar_class_name: "post api-method"
info_path: docs/api/tagoio-api
custom_edit_url: null
diff --git a/docs/api/sidebar/api-sidebar.ts b/docs/api/sidebar/api-sidebar.ts
index fd3894f0..f2cc2199 100644
--- a/docs/api/sidebar/api-sidebar.ts
+++ b/docs/api/sidebar/api-sidebar.ts
@@ -652,6 +652,18 @@ const sidebar: SidebarsConfig = {
label: "List Used Tags",
className: "api-method get",
},
+ {
+ type: "doc",
+ id: "api/configure-profile-service",
+ label: "Configure Service Provider",
+ className: "api-method put",
+ },
+ {
+ type: "doc",
+ id: "api/test-profile-service",
+ label: "Test Service Provider",
+ className: "api-method post",
+ },
],
},
{
diff --git a/docs/api/test-profile-service.api.mdx b/docs/api/test-profile-service.api.mdx
new file mode 100644
index 00000000..111a00ae
--- /dev/null
+++ b/docs/api/test-profile-service.api.mdx
@@ -0,0 +1,81 @@
+---
+id: test-profile-service
+title: "Test Service Provider"
+description: "Test a configured service provider by sending a test message. This helps verify that your service provider configuration is working correctly before using it in production."
+sidebar_label: "Test Service Provider"
+hide_title: true
+hide_table_of_contents: true
+api: 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
+sidebar_class_name: "post api-method"
+info_path: docs/api/tagoio-api
+custom_edit_url: null
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+
+
+
+
+
+
+
+
+
+
+Test a configured service provider by sending a test message. This helps verify that your service provider configuration is working correctly before using it in production.
+
+**Supported service types:**
+- `sms` - Sends a test SMS message to the specified phone number
+- `email` - Sends a test email to the specified email address
+
+**Important notes:**
+- A service provider must be configured before testing
+- Test messages will consume your provider's quota/credits
+- For SMS, ensure the recipient number is in E.164 format (e.g., +15551234567)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/specs/tagoio-api.yaml b/specs/tagoio-api.yaml
index 91fd0a68..0cd99752 100644
--- a/specs/tagoio-api.yaml
+++ b/specs/tagoio-api.yaml
@@ -9103,6 +9103,334 @@ paths:
type: string
example: 678abc123def456789012345
description: The ID of the backup to delete
+ /profile/{id}/service:
+ put:
+ tags:
+ - Profile
+ summary: Configure Service Provider
+ description: |
+ Configure external service providers for your profile. This allows you to set up integrations with third-party services for SMS and Email messaging.
+
+ **Available service providers:**
+
+ | Service Type | Provider | Description |
+ |--------------|----------|-------------|
+ | `sms` | Twilio | Send SMS messages via Twilio |
+ | `sms` | SNS | Send SMS messages via Amazon SNS |
+ | `email` | SendGrid | Send emails via SendGrid API |
+ | `email` | SES | Send emails via Amazon SES |
+ | `email` | SMTP | Send emails via custom SMTP server |
+
+ **Important notes:**
+ - Credentials are securely stored using [TagoIO Secrets](/docs/tagoio/getting-started/secrets). You must create the appropriate secrets before configuring a service provider.
+ - Each service type can only have one active provider configuration at a time
+ - Use the test endpoint to verify your configuration before using it in production
+
+ **Required secrets by provider:**
+ - **Twilio SMS**: Create two Text secrets containing your Twilio SID and Auth Token
+ - **SNS SMS**: Create an AWS SQS Secret with your AWS credentials (region, access key, secret key)
+ - **SendGrid Email**: Create a Text secret containing your SendGrid API Key
+ - **SES Email**: Create an AWS SQS Secret with your AWS credentials (region, access key, secret key)
+ - **SMTP Email**: Create an SMTP Secret with your server configuration
+ operationId: configureProfileService
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ email:
+ type: object
+ description: Email service configuration
+ properties:
+ provider:
+ type: string
+ enum: [sendgrid, ses, smtp]
+ description: The email provider to use
+ example: smtp
+ from:
+ type: string
+ description: Sender email address
+ example: noreply@example.com
+ secrets:
+ type: object
+ description: Secret IDs for provider credentials
+ properties:
+ data:
+ type: string
+ description: Secret ID containing SMTP configuration (required for SMTP provider) or AWS SQS Secret (required for SES provider)
+ example: 68c9977a28079e0010aaf399
+ api_key:
+ type: string
+ description: Secret ID containing SendGrid API Key (required for SendGrid provider)
+ example: 68c9977a28079e0010aaf399
+ sms:
+ type: object
+ description: SMS service configuration
+ properties:
+ provider:
+ type: string
+ enum: [twilio, sns]
+ description: The SMS provider to use
+ example: twilio
+ from:
+ type: string
+ description: Sender phone number in E.164 format (required for Twilio, optional for SNS)
+ example: '+15551234567'
+ secrets:
+ type: object
+ description: Secret IDs for provider credentials
+ properties:
+ twilio_sid:
+ type: string
+ description: Secret ID containing Twilio Account SID (required for Twilio provider)
+ example: 674f1740f9ccd2000aaa4551
+ twilio_token:
+ type: string
+ description: Secret ID containing Twilio Auth Token (required for Twilio provider)
+ example: 674f1736f9ccd2000aaa4550
+ data:
+ type: string
+ description: Secret ID containing AWS SQS Secret (required for SNS provider)
+ example: 68c9977a28079e0010aaf399
+ examples:
+ Configure SMS and Email:
+ value:
+ email:
+ provider: smtp
+ from: noreply@example.com
+ secrets:
+ data: 68c9977a28079e0010aaf399
+ sms:
+ provider: twilio
+ from: '+15551234567'
+ secrets:
+ twilio_sid: 674f1740f9ccd2000aaa4551
+ twilio_token: 674f1736f9ccd2000aaa4550
+ Configure SMS only:
+ value:
+ sms:
+ provider: twilio
+ from: '+15551234567'
+ secrets:
+ twilio_sid: 674f1740f9ccd2000aaa4551
+ twilio_token: 674f1736f9ccd2000aaa4550
+ Configure Email with SendGrid:
+ value:
+ email:
+ provider: sendgrid
+ from: noreply@example.com
+ secrets:
+ api_key: 68c9977a28079e0010aaf399
+ Configure Email with SMTP:
+ value:
+ email:
+ provider: smtp
+ from: noreply@example.com
+ secrets:
+ data: 68c9977a28079e0010aaf399
+ Configure Email with SES:
+ value:
+ email:
+ provider: ses
+ from: noreply@example.com
+ secrets:
+ data: 68c9977a28079e0010aaf399
+ Configure SMS with SNS:
+ value:
+ sms:
+ provider: sns
+ secrets:
+ data: 68c9977a28079e0010aaf399
+ responses:
+ '200':
+ description: Service provider configured successfully
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ result:
+ type: string
+ example: Service provider configured successfully
+ status:
+ type: boolean
+ example: true
+ '400':
+ description: Bad request - Invalid configuration
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ status:
+ type: boolean
+ example: false
+ message:
+ type: string
+ example: Invalid credentials format for the selected provider
+ '401':
+ description: Unauthorized - Invalid or missing token
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ status:
+ type: boolean
+ example: false
+ message:
+ type: string
+ example: Unauthorized
+ '403':
+ description: Forbidden - Insufficient permissions
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ status:
+ type: boolean
+ example: false
+ message:
+ type: string
+ example: You do not have permission to configure services for this profile
+ parameters:
+ - name: id
+ in: path
+ required: true
+ schema:
+ type: string
+ example: 61fac4d9a5c9f40012a5ff92
+ description: The ID of the profile
+ /profile/{id}/service/test/{service_type}:
+ post:
+ tags:
+ - Profile
+ summary: Test Service Provider
+ description: |
+ Test a configured service provider by sending a test message. This helps verify that your service provider configuration is working correctly before using it in production.
+
+ **Supported service types:**
+ - `sms` - Sends a test SMS message to the specified phone number
+ - `email` - Sends a test email to the specified email address
+
+ **Important notes:**
+ - A service provider must be configured before testing
+ - Test messages will consume your provider's quota/credits
+ - For SMS, ensure the recipient number is in E.164 format (e.g., +15551234567)
+ operationId: testProfileService
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - to
+ properties:
+ to:
+ type: string
+ description: |
+ The recipient address for the test message.
+ - For SMS: Phone number in E.164 format (e.g., +15551234567)
+ - For Email: Email address (e.g., user@example.com)
+ example: '+15559876543'
+ message:
+ type: string
+ description: Custom test message content (optional). If not provided, a default test message will be sent.
+ example: This is a test message from TagoIO
+ subject:
+ type: string
+ description: Email subject line (only for email service type, optional)
+ example: Test Email from TagoIO
+ examples:
+ Test SMS:
+ value:
+ to: '+15559876543'
+ message: This is a test SMS from TagoIO
+ Test Email:
+ value:
+ to: user@example.com
+ subject: Test Email from TagoIO
+ message: This is a test email from TagoIO to verify your email service configuration.
+ responses:
+ '200':
+ description: Test message sent successfully
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ result:
+ type: object
+ properties:
+ message:
+ type: string
+ example: Test message sent successfully
+ message_id:
+ type: string
+ description: Provider's message ID for tracking (if available)
+ example: SM1234567890abcdef1234567890abcdef
+ status:
+ type: boolean
+ example: true
+ '400':
+ description: Bad request - Invalid recipient or message format
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ status:
+ type: boolean
+ example: false
+ message:
+ type: string
+ example: Invalid phone number format. Use E.164 format (e.g., +15551234567)
+ '404':
+ description: Service provider not configured
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ status:
+ type: boolean
+ example: false
+ message:
+ type: string
+ example: No service provider configured for the specified service type
+ '500':
+ description: Provider error - Failed to send test message
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ status:
+ type: boolean
+ example: false
+ message:
+ type: string
+ example: 'Failed to send test message: Invalid credentials'
+ parameters:
+ - name: id
+ in: path
+ required: true
+ schema:
+ type: string
+ example: 61fac4d9a5c9f40012a5ff92
+ description: The ID of the profile
+ - name: service_type
+ in: path
+ required: true
+ schema:
+ type: string
+ enum: [sms, email]
+ example: sms
+ description: The type of service to test (sms or email)
/dictionary:
get:
tags: