# Identities Source: https://docs.kurrier.io/docs/api-access/api-routes/identities Manage email identities in Kurrier Identities represent **email addresses or domains** that you have connected to Kurrier. Each identity can optionally belong to a provider (SES, SMTP, Mailgun, etc.) and is used when sending or receiving email. These endpoints let you **list identities** from your backend using your Kurrier API key. All routes below are relative to: ```text theme={null} https://www.kurrier.io/api/kurrier ``` *** ## What is an Identity? An identity is either: * an **email identity** (`email@example.com`) * a **domain identity** (`example.com`) Identities also store DNS verification records, provider configuration, status, and metadata. *** ## List identities ### `GET /identities` Returns all identities owned by the authenticated user. *** ## Get a single identity ### `GET /identities/{id}` Fetch an identity by its ID. *** ## Identity object format Example response object: ```json theme={null} { "id":"1a9b317a-8a84-493a-b9f8-83a3800861e2", "owner_id":"be7a7201-76db-4b73-a5e0-ad6a1b93cf1f", "kind":"email", "public_id":"9ANdDSgvj5", "value":"me@myapp.com", "incoming_domain":false, "domain_identity_id":"b4950019-500a-44a6-9b24-08b2517f1b3d", "dns_records":"null", "meta":"{}", "provider_id":"c4248dd5-46f2-48f5-9d5b-91b7e7d67c74", "smtp_account_id":null, "status":"unverified", "created_at":"2025-11-15 10:47:23.60418+00", "updated_at":"2025-11-15 10:47:23.60418+00" } ``` # Me Source: https://docs.kurrier.io/docs/api-access/api-routes/me Retrieve information about the authenticated API user # GET /me The `/me` endpoint allows you to validate your API key and retrieve basic information about the authenticated user (the owner of the API key). This is useful for testing API key validity and discovering the `ownerId` tied to the key. For more details on authentication, see the [authentication guide](/api-access/authentication). *** ## Endpoint ``` GET /me ``` ## Headers | Header | Description | Example | | ------------------------------ | ------------------------------------ | ------------------------------------- | | **Authorization** *(required)* | Bearer token containing your API key | `Authorization: Bearer kur_123456...` | *** ## Response On success, Kurrier returns the authenticated user's basic identity: ```json theme={null} { "userId": "8f7c0e1e-d334-4f63-9df8-bb45d0cf94a3" } ``` ### Fields | Field | Description | | ---------- | ----------------------------------------------------------------- | | **userId** | The UUID of the authenticated Kurrier user (owner of the API key) | *** Use this endpoint when you want to verify API connectivity or check which user a key belongs to before calling other Kurrier API routes. # Messages Source: https://docs.kurrier.io/docs/api-access/api-routes/messages Retrieve email messages from Kurrier Kurrier allows you to **retrieve individual email messages by ID** using the HTTP API. For privacy, security, and scale reasons, **Kurrier does not support listing messages**. Messages can only be accessed if you already know their ID. All routes below are relative to: ```text theme={null} https://www.kurrier.io/api/kurrier ``` *** ## Overview Messages represent **emails sent or received through Kurrier**. Each message is immutable and includes: * headers * body (HTML and/or text) * delivery metadata * provider and identity references Messages are typically retrieved when: * processing webhooks * building an inbox or activity view * fetching delivery details * debugging delivery issues *** ## Get a message by ID ### `GET /messages/{id}` Fetch a single message using its **message ID**. > 🔒 This is the **only supported read operation** for messages. ### Path parameters | Name | Type | Description | | ---- | ------ | -------------- | | `id` | string | The message ID | *** ### Example request ```bash theme={null} curl https://www.kurrier.io/api/kurrier/messages/msg_9ANdDSgvj5 \ -H "Authorization: Bearer YOUR_API_KEY" ``` *** ## Important limitations * ❌ No message listing * ❌ No search or filtering * ❌ No bulk retrieval These restrictions are intentional for now and help ensure: * predictable performance * strong tenant isolation * simpler compliance and auditing Messages are expected to be accessed via: * webhooks * stored message IDs * external indexing on your side *** ## Error responses | Status | Meaning | | ------ | --------------------------------------- | | `401` | Invalid or missing API key | | `403` | Message does not belong to your account | | `404` | Message not found | *** ## Summary * Messages are **read-only** * Access is **by ID only** * No listing or querying * Designed for webhook-driven workflows and audit access # Webhooks Source: https://docs.kurrier.io/docs/api-access/api-routes/webhooks Receive incoming webhooks through Kurrier's unified API Kurrier lets you **register outbound webhooks** so your app can react to events like messages being received. You can create the webhooks on your dashboard. *** ## Event types Right now Kurrier plans supports the following event names (this list may grow over time): * `message.received` *** ## Webhook delivery format Webhook POST request example: ```json theme={null} { "event": "message.received", "data": { "message": {...}, "rawEmail": ... } } ``` # Authentication Source: https://docs.kurrier.io/docs/api-access/authentication How to authenticate with the Kurrier API ## Overview Kurrier exposes a **simple, unified authentication model** for its HTTP API. All API endpoints are authenticated using **API keys** and are available under the Kurrier namespace: ```text theme={null} https://www.kurrier.io/api/kurrier ``` *** ## API Keys API keys are managed from the **Kurrier dashboard**. ### Creating an API key 1. Go to **API Keys** in the dashboard 2. Click **Add API Key** 3. Give it a name (for example: `prod-app`, `newsletter`, `staging`) 4. Save the key securely — it is shown only once > API keys are account-wide. Fine‑grained scopes will be added later; for now, keys have full access. *** ## HTTP API Authentication All HTTP requests must include your API key using a Bearer token. ### Header format ```http theme={null} Authorization: Bearer YOUR_API_KEY ``` ### Example request ```bash theme={null} curl https://www.kurrier.io/api/kurrier/me -H "Authorization: Bearer YOUR_API_KEY" ``` If the API key is missing, invalid, or revoked, the API will respond with: ```text theme={null} 401 Unauthorized ``` *** ## Identity-aware Requests Kurrier supports multiple **sending identities** (email addresses). When sending email or performing identity-specific actions, the request body or URL will reference an **Identity ID**. Authentication itself is always performed using the API key. This allows: * One API key to manage multiple identities * Clear audit trails * Provider‑agnostic delivery (SES, SendGrid, etc.) Identity IDs can be found in the **Identities** section of the dashboard. *** ## Security Best Practices * Treat API keys like passwords * Never commit them to source control * Use separate keys for staging and production * Rotate keys immediately if exposed *** ## Summary * Kurrier uses **API key–based authentication** * All requests authenticate via the `Authorization: Bearer` header * API keys are managed in the dashboard * Identity context is handled at the request level * SMTP support will be added in a future release # Send Email Source: https://docs.kurrier.io/docs/api-access/send Send email through Kurrier's unified API Kurrier exposes a single, focused endpoint for sending email. For more information on how to authenticate with the Kurrier API, see the [authentication guide](/api-access/authentication). ### POST /email/send | Field | Description | Example | | ----------------------------------------------- | ------------------------------------ | -------------------------------------------------------------------------------------------------- | | **identityId** *(required)* | The Kurrier Identity to send using | `"id_12345"` | | **to** *(required)* | One recipient email addresses | `"ada@example.com"` | | **subject** *(required)* | Subject line of the email | `"Welcome to Kurrier!"` | | **html** *(required unless `text` is provided)* | HTML version of the email body | `"
Hello!
"` | | **text** *(required unless `html` is provided)* | Plain-text version of the email body | `"Hello!"` | | **cc** | CC recipients | `"manager@your.co,ops@your.co"` | | **bcc** | BCC recipients | `"audit@your.co,gm@your.co"` | | **attachments** | Attachments | `[{ "filename": "photo.jpg", "contentType": "image/jpeg", "content": "BASE64_STRING_HERE" }, ...]` | Send an email using one of your configured Identities (which in turn map to a provider account such as SES, SMTP, Mailgun, Postmark, SendGrid, etc.). ### Response On success, Kurrier returns a JSON payload with a unique message id: ``` { "messageId": "3c152a84-6559-4094-a1da-3f1a3209866d" } ``` # What are Identities? Source: https://docs.kurrier.io/docs/concepts/identities Domains and email addresses you send and receive mail from using Kurrier ## What are identities? An **identity** represents **who your emails are sent from**. In Kurrier, identities can be: * **Domains** (e.g. `kurrier.io`) * **Email addresses** (e.g. `support@kurrier.io`) Every identity is linked to a **provider** such as Amazon SES, SendGrid, Mailgun, Postmark, or a custom SMTP server. *** ## How identities work in Kurrier Kurrier abstracts away provider-specific setup. The flow is simple: 1. Add a provider 2. Add an identity (domain or email) 3. Update DNS records provided by Kurrier 4. Verify 5. Start sending or receiving mail Kurrier automatically configures the provider (SES, SendGrid, etc.) on your behalf. You only need to publish the DNS records. *** ## Domain identities (recommended) Domain identities are the recommended setup for production use. ### Why use a domain identity? * Send from **unlimited addresses** * Better deliverability * One-time DNS setup * Works across providers ### Example ```text theme={null} Domain: kurrier.io Valid senders: support@kurrier.io billing@kurrier.io notifications@kurrier.io ``` When you add a domain identity, Kurrier generates: * DKIM records * SPF records * Provider verification records Add these to your DNS, click **Verify**, and you’re done. *** ## Email address identities Email identities are useful when: * You only need a single sender * The provider does not support domain-level verification * You want a quick test setup Example: ```text theme={null} debug@kurrier.io ``` Verification may happen via: * DNS (if domain is already verified) * Email confirmation (provider-dependent) *** ## Incoming vs outgoing mail Each identity supports: * **Outgoing mail** (sending) * **Incoming mail** (receiving / syncing) Kurrier shows verification status for both directions so you always know what’s active. *** ## Using identities Once verified, identities can be used immediately via: * **Kurrier API** * **SMTP credentials** No additional configuration is required. *** ## Best practices * Use **domain identities** for production * Verify DNS once and reuse across providers * Separate transactional and marketing domains * Keep test identities separate from production # What are Providers? Source: https://docs.kurrier.io/docs/concepts/providers Connect and manage email providers in Kurrier Providers are the backbone of email delivery in Kurrier. A **provider** represents the service that actually sends and receives email on your behalf — such as Amazon SES, SendGrid, Mailgun, Postmark, or a generic SMTP server. Kurrier handles provider configuration securely and centrally, so you never need to expose credentials in your application code. *** ## How providers work in Kurrier At a high level: 1. You add a provider (SES, SendGrid, Mailgun, Postmark, or SMTP) 2. Kurrier provisions and configures the provider 3. Kurrier generates the required DNS records 4. You add those DNS records to your domain 5. The provider is verified and ready for use by identities Providers are **shared resources** — multiple identities (domains or email addresses) can use the same provider. *** ## Supported providers Kurrier currently supports: * **Amazon SES** * **SendGrid** * **Mailgun** * **Postmark** * **Generic SMTP** (cPanel, Gmail, Office365, custom servers) Each provider type has slightly different requirements, but the workflow inside Kurrier is consistent. *** ## Adding a provider To add a provider: 1. Go to **Dashboard → Providers** 2. Click **Add Provider** 3. Select the provider type 4. Enter the required credentials 5. Save the provider Credentials are encrypted and stored in Kurrier’s secure vault. *** ## Provider verification After adding a provider, Kurrier will guide you through verification. ### What verification means Verification ensures: * Kurrier can authenticate with the provider * The provider is authorized to send email for your domains * DNS records are correctly configured Kurrier generates **exact DNS records** required by the provider. You only need to copy them into your DNS manager. ### Verification status A provider can be: * **Unverified** – DNS records not added or incomplete * **Verified** – Ready to send and receive email You can retry verification at any time after updating DNS. *** ## Generic SMTP providers For SMTP providers, Kurrier supports: * TLS (465) * STARTTLS (587) * Custom ports * Optional IMAP settings (for inbox sync) You can configure: * Host * Port * Username * Password * Encryption mode SMTP providers can be used for both outgoing and incoming email, depending on configuration. *** ## Provider usage Once verified, providers can be used by: * **Domains** (example.com) * **Email addresses** ([user@example.com](mailto:user@example.com)) * **API-based sending** * **SMTP relay through Kurrier** Providers themselves do not send email directly — they are activated through **identities**. *** ## Best practices * Use **Amazon SES** or **Postmark** for high-volume transactional email * Use **SendGrid or Mailgun** for mixed transactional + marketing use * Keep providers verified before adding identities * Use separate providers for different environments if needed *** ## Next steps After adding a provider: * Add and verify **Identities** * Generate **API Keys** * Start sending email via API or SMTP 👉 Continue to **Identities** to connect domains and email addresses. # Workspaces & Sharing Source: https://docs.kurrier.io/docs/concepts/workspaces How workspaces, access, and sharing work in Kurrier ## Overview Kurrier is **workspace-first**. Everything you do in Kurrier — providers, identities, mailboxes, API keys — lives inside a **workspace**. This makes it easy to collaborate with teammates while keeping ownership, security, and billing clear. If you understand workspaces, the rest of Kurrier will feel intuitive. *** ## What is a Workspace? A workspace is a **shared environment** for a team or project. A workspace owns: * Email providers (SES, SendGrid, SMTP, etc.) * Identities (domains and email addresses) * Mailboxes and received messages * API keys * Billing and usage Most users only need **one workspace**, but you can create multiple if needed (for example: prod vs staging). *** ## Users vs Workspaces Kurrier separates **users** from **resources**. * A **user** is an individual account (you) * A **workspace** is where shared resources live You can belong to multiple workspaces, and each workspace can have multiple users. *** ## Ownership vs Sharing Every resource in Kurrier has an **owner**, but some resources can be **shared** with the workspace. This distinction is important. ### Ownership * The owner created the resource * The owner can edit or delete it * Ownership never changes automatically ### Sharing * A shared resource can be used by other workspace members * Sharing does **not** transfer ownership * The owner can revoke sharing at any time ### Example Alice adds a domain identity `example.com`. She owns the identity, but shares it with the workspace. Bob can now send emails from `example.com` using the API — but Alice still controls verification and deletion. *** ## Roles and Access Workspaces support basic roles: * **Owner** — Full control, including billing and access * **Admin** — Manage providers, identities, and configuration * **Member** — Use shared resources (send email, access APIs) Fine‑grained permissions and custom roles will be added later. *** ## Why This Model Exists This design allows Kurrier to provide: * Safe multi-domain and multi-provider setups * Clear audit trails for sending and receiving email * No sharing of raw provider credentials * One API key that works across shared identities * Clean separation between people and infrastructure *** ## Summary * Everything lives inside a **workspace** * Workspaces own providers, identities, and API keys * Resources have **owners**, but can be **shared** * Sharing enables collaboration without losing control Once you understand workspaces, you’re ready to set up providers and identities. # Mailgun Source: https://docs.kurrier.io/docs/providers/mailgun Setting up Mailgun Mailgun is a reliable email delivery service used for transactional and marketing emails. Kurrier can connect directly to your Mailgun account via its **API key** for sending and receiving emails. *** ## 1. Overview When you integrate Mailgun with Kurrier, the app uses Mailgun’s REST API for sending emails and optional inbound routing. Setup takes just one step — adding your Mailgun API key. *** ## 2. Adding Mailgun in Kurrier In Kurrier, go to: > **Dashboard → Providers → Add Provider → Mailgun** You’ll see a single required field: | Field | Description | Example | | --------------------- | ----------------------------------------------- | ---------------------------------------------- | | **MAILGUN\_API\_KEY** | Your private API key from the Mailgun dashboard | `key-9f6a41e71113d30cadeb28c-1ae02a08-07217cd` | Click **Submit** to save your configuration. Once saved, Kurrier will automatically verify the key and display a ✅ **Verified** status if successful. *** ## 3. Where to Find Your API Key 1. Log in to your [Mailgun Dashboard](https://app.mailgun.com/). 2. Navigate to **Settings → API Keys**. 3. Copy your **Private API key** (not the Public one). 4. Paste it into Kurrier’s field and click **Submit**. > 💡 You may use either the **EU** or **US** region keys — Kurrier will detect the correct endpoint automatically. *** ## 4. Verifying the Connection After submitting your API key, click **Verify Connection** in the Mailgun card. Kurrier will attempt to authenticate with the Mailgun API and confirm connectivity. If the test succeeds, the card will display: # Postmark Source: https://docs.kurrier.io/docs/providers/postmark Setting up Postmark Postmark is a reliable transactional email service focused on fast delivery and excellent deliverability. Kurrier connects directly to Postmark via its **Server Token** and **Account Token** for sending and managing outbound emails. *** ## 1. Overview When you link Postmark to Kurrier, the app sends mail using Postmark’s REST API — no SMTP needed. You just need two keys from your Postmark dashboard: * **Server Token** — used to send emails from a specific Postmark Server * **Account Token** — used for administrative operations *** ## 2. Adding Postmark in Kurrier In Kurrier, go to: > **Dashboard → Providers → Add Provider → Postmark** Enter the following fields: | Field | Description | Example | | ---------------------------- | --------------------------------- | -------------------------------------- | | **POSTMARK\_SERVER\_TOKEN** | Your Postmark server API token | `74ef518e-2dfa-451d-b9cf-2843608f789a` | | **POSTMARK\_ACCOUNT\_TOKEN** | Your Postmark account-level token | `0762807c-08e9-4ac3-a872-25e635766g61` | Click **Submit** to save your configuration. Kurrier will automatically validate the credentials and show **✅ Verified** when successful. *** ## 3. Where to Find Your Tokens 1. Log in to your [Postmark Dashboard](https://account.postmarkapp.com/). 2. Navigate to **Servers → (Choose your Server)**. 3. Under **API Tokens**, copy the **Server API Token** — this identifies that specific sending server. 4. For the **Account Token**, go to **Account → API Tokens** and copy your account-level token (used for broader account access). *** ## 4. Verify the Connection After saving, click **Verify Connection** in the Postmark card. Kurrier will test connectivity by making a simple authentication request to the Postmark API. * ✅ **Success:** You’ll see a verified badge next to your Postmark provider. * ⚠️ **Failure:** Check that both tokens are valid and belong to the same Postmark account. *** ## 5. Troubleshooting | Error | Meaning | Fix | | -------------------------- | -------------------------------------------------- | --------------------------------------------- | | `401 Unauthorized` | Invalid or expired API token | Re-copy your tokens and re-save | | `422 Unprocessable Entity` | Domain or sender not verified | Verify your domain or sender in Postmark | | `403 Forbidden` | Using account token where server token is required | Ensure the **Server Token** is set correctly | | `Timeout` | Network/firewall issue | Allow outbound HTTPS to `api.postmarkapp.com` | *** **Tip:** Kurrier integrates Postmark natively via the official API — no SMTP setup required. # SendGrid Source: https://docs.kurrier.io/docs/providers/sendgrid Setting up SendGrid SendGrid is a popular transactional and marketing email platform by Twilio. Kurrier integrates directly with SendGrid’s REST API to handle sending and tracking emails using a single API key. *** ## 1. Overview Connecting SendGrid to Kurrier allows you to send emails through your SendGrid account without configuring SMTP. You only need your **SendGrid API Key** — Kurrier will handle everything else via the SendGrid API. *** ## 2. Adding SendGrid in Kurrier In Kurrier, go to: > **Dashboard → Providers → Add Provider → SendGrid** You’ll see the following field: | Field | Description | Example | | ---------------------- | ----------------------------------------- | --------------------------------------------------------- | | **SENDGRID\_API\_KEY** | Your SendGrid API key (starts with `SG.`) | `SG.4aA4DyiCTValYwQQ.aC0RQSHrzdNeHFVMfIrgwn2RM3iVjkzIBNl` | Click **Submit** to save. Kurrier will automatically validate the key and show **✅ Verified** on success. *** ## 3. Where to Find Your API Key 1. Log in to your [SendGrid Dashboard](https://app.sendgrid.com/). 2. Go to **Settings → API Keys**. 3. Click **Create API Key**. 4. Name your key (e.g., `Kurrier Integration`). 5. Under **API Key Permissions**, choose **Full Access** or **Restricted Access** (see below). 6. Copy the generated key and paste it into Kurrier’s form. > ⚠️ You won’t be able to view this key again after closing the dialog, so store it securely. *** ## 4. Recommended Permissions For Kurrier to send emails and verify the connection properly, your key must have at least the following permissions: | Permission | Access Level | Description | | -------------- | ------------ | ----------------------------------------------- | | `Mail Send` | Full Access | Required for sending outbound emails | | `User Account` | Read Access | Used to validate the key and fetch account info | | `Stats` | Read Access | Optional, for analytics or usage data | > You can choose **Full Access** if you’re unsure — it will work without issues, but restricted keys are safer for production. *** ## 5. Verify the Connection After saving your key, click **Verify Connection**. Kurrier will attempt an authentication check with SendGrid’s API endpoint (`https://api.sendgrid.com/v3/user/account`). ### ✅ Success You’ll see **Verified** next to your SendGrid provider. ### ⚠️ Failure Check that: * The API key is active and copied correctly. * It has at least `Mail Send` permissions. * Outbound HTTPS connections to `api.sendgrid.com` are allowed from your server. *** ## 6. Troubleshooting | Error | Meaning | Fix | | ----------------------- | -------------------------------------- | ------------------------------------------ | | `401 Unauthorized` | Invalid API key or missing permissions | Recheck your key or create a new one | | `403 Forbidden` | Domain or sender not verified | Verify your domain in SendGrid | | `429 Too Many Requests` | Rate limit exceeded | Slow down sending or request higher limits | | `500 Server Error` | Temporary SendGrid issue | Retry after a few seconds | *** **Tip:** SendGrid keys always start with `SG.` — if yours doesn’t, double-check that you copied the correct key from the dashboard. # AWS SES Source: https://docs.kurrier.io/docs/providers/ses Setting up AWS Kurrier supports **Amazon Simple Email Service (SES)** for both sending and receiving emails. Kurrier does all the heavy lifting of configuring SES, S3, and SNS to work together for inbound email processing. All you need to do is create an IAM user with the right permissions and provide Kurrier with the credentials. This guide walks you through creating IAM credentials, setting permissions, and choosing the right AWS region. *** ## 1. Overview Kurrier uses the following AWS services for SES-based delivery: * **SES (Simple Email Service)** — to send and receive emails * **S3 (Simple Storage Service)** — to store inbound messages and attachments * **SNS (Simple Notification Service)** — to notify Kurrier when new inbound mail arrives You’ll need to create **IAM credentials** with access to these services and configure the region where your SES account operates. *** ## 2. Prerequisites * An active AWS account * SES account **out of sandbox** (for production use) * Access to create or manage IAM users and policies * A verified email domain or address in SES *** ## 3. Choosing Your Region Not all AWS regions support inbound email via SES. ### ⚠️ Regions supporting inbound email: * `us-east-1` (N. Virginia) * `us-west-2` (Oregon) * `eu-west-1` (Ireland) * `ap-south-1` (Mumbai) If your selected region does **not** support inbound email, you can still send emails through SES, but incoming mail routing will not be available. When connecting your provider in Kurrier, make sure to select one of these supported regions if you want **full send + receive** capabilities. *** ## 4. Creating an IAM User 1. Go to **IAM → Users → Add User** 2. Choose a descriptive username (e.g. `kurrier-mail`) 3. Under **Access Type**, select: * ✅ Programmatic access (for API access) 4. Click **Next: Permissions** ### Option A: Attach a pre-built policy Attach the following managed AWS policies: * `AmazonSESFullAccess` * `AmazonSNSFullAccess` * `AmazonS3FullAccess` ### Option B: Use a least-privilege custom policy (recommended) Here’s an example JSON policy that grants the minimum required access: ```json theme={null} { "Version": "2012-10-17", "Statement": [ /* ---------- SES (classic) – receipt rule sets & quotas ---------- */ { "Sid": "SESClassicRulesAndQuota", "Effect": "Allow", "Action": [ "ses:GetSendQuota", "ses:DescribeActiveReceiptRuleSet", "ses:ListReceiptRuleSets", "ses:CreateReceiptRuleSet", "ses:SetActiveReceiptRuleSet", "ses:DescribeReceiptRuleSet", "ses:CreateReceiptRule", "ses:UpdateReceiptRule", "ses:SetReceiptRulePosition", "ses:DeleteReceiptRule" ], "Resource": "*" }, /* ---------- SESv2 – identities & sending ---------- */ { "Sid": "SESv2IdentitiesAndSend", "Effect": "Allow", "Action": [ "ses:SendEmail", // SESv2 send "ses:CreateEmailIdentity", "ses:GetEmailIdentity", "ses:DeleteEmailIdentity", "ses:PutEmailIdentityMailFromAttributes" ], "Resource": "*" }, /* ---------- S3 – create bucket, lock it down, configure notifications ---------- */ { "Sid": "S3BucketMgmtForInbound", "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:HeadBucket", "s3:PutBucketPolicy", "s3:PutPublicAccessBlock", "s3:PutBucketNotificationConfiguration", "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::kurrier-*-ses-inbound", "arn:aws:s3:::kurrier-*-ses-inbound/*" ] }, /* ---------- SNS – create topic, set policy, subscribe Kurrier webhook ---------- */ { "Sid": "SNSMgmtForInbound", "Effect": "Allow", "Action": [ "sns:CreateTopic", "sns:GetTopicAttributes", "sns:SetTopicAttributes", "sns:ListSubscriptionsByTopic", "sns:Subscribe" ], "Resource": "*" }, /* ---------- STS – used to build bucket/topic policies with your account id ---------- */ { "Sid": "STSCallerIdentity", "Effect": "Allow", "Action": ["sts:GetCallerIdentity"], "Resource": "*" } ] } ``` # SMTP/IMAP Source: https://docs.kurrier.io/docs/providers/smtp Setting up SMTP/IMAP Kurrier supports connecting to any standard **SMTP** and **IMAP** server — letting you send and receive emails through your own mail host. This option is perfect if you already have an email account with a provider such as Gmail (App Password), Outlook, Zoho, Proton, or a custom domain managed through cPanel or another hosting provider. *** ## 1. Overview When you add an SMTP/IMAP account in Kurrier, two connections are created: * **SMTP (Simple Mail Transfer Protocol)** — used to **send** emails * **IMAP (Internet Message Access Protocol)** — used to **receive** and sync incoming emails You can configure only SMTP (for outbound mail) or both SMTP + IMAP (for full two-way sync). *** ## 2. Adding Your Account In Kurrier, go to: > **Dashboard → Providers → Add Provider → SMTP/IMAP** You’ll see the following fields: | Field | Description | Example | | ----------------- | -------------------------------------------------------------------- | -------------------- | | **Account Label** | A friendly name for this connection | `Work Email` | | **SMTP Host** | Outgoing mail server hostname | `smtp.gmail.com` | | **SMTP Port** | Usually `465` for SSL or `587` for STARTTLS | `587` | | **SMTP Username** | Your full email address or username | `you@yourdomain.com` | | **SMTP Password** | App password or login password | `********` | | **SMTP Secure** | Choose `TRUE` for SSL/TLS | `TRUE` | | **SMTP Pool** | Optional — leave `FALSE` unless you know you need pooled connections | `FALSE` | | **IMAP Host** | Incoming mail server (optional) | `imap.gmail.com` | | **IMAP Port** | Usually `993` for SSL | `993` | | **IMAP Username** | Your full email address or username | `you@yourdomain.com` | | **IMAP Password** | Password or app password | `********` | | **IMAP Secure** | Choose `TRUE` for SSL/TLS | `TRUE` | *** ## 3. Example Configurations ### Gmail (App Password) > ⚠️ Requires [2-Step Verification](https://myaccount.google.com/security) and an [App Password](https://myaccount.google.com/apppasswords) | Setting | Value | | ----------- | ---------------- | | SMTP Host | `smtp.gmail.com` | | SMTP Port | `465` (SSL) | | SMTP Secure | `TRUE` | | IMAP Host | `imap.gmail.com` | | IMAP Port | `993` (SSL) | | IMAP Secure | `TRUE` | Use your Gmail address for both username fields and the 16-character app password for both passwords. *** ### Outlook / Office 365 | Setting | Value | | ----------- | ----------------------- | | SMTP Host | `smtp.office365.com` | | SMTP Port | `587` (STARTTLS) | | SMTP Secure | `TRUE` | | IMAP Host | `outlook.office365.com` | | IMAP Port | `993` | | IMAP Secure | `TRUE` | Username is usually your full email address. *** ### cPanel / Custom Domain | Setting | Value | | --------- | -------------------------- | | SMTP Host | `mail.yourdomain.com` | | SMTP Port | `465` (SSL) or `587` (TLS) | | IMAP Host | `mail.yourdomain.com` | | IMAP Port | `993` | | Secure | `TRUE` for both | Contact your web host if you’re unsure of these values. *** ## 4. Security Options | Field | Description | | --------------- | ------------------------------------------------------------------------------------------------------------- | | **SMTP Secure** | Enables SSL/TLS encryption for outgoing mail. Set to `TRUE` unless your server requires plain STARTTLS. | | **SMTP Pool** | Allows reusing SMTP connections for faster bulk sending. Leave `FALSE` unless you’re running large workloads. | | **IMAP Secure** | Enables SSL/TLS encryption for incoming mail. Always set to `TRUE` unless debugging local servers. | *** ## 5. Verification & Troubleshooting Once you click **Save**, Kurrier will test your connection automatically. ### ✅ Success You’ll see a **Verified** badge next to your new provider. ### ⚠️ Common Errors | Error | Meaning | Fix | | --------------------------- | --------------------------------- | --------------------------------------------------------- | | `Invalid login or password` | Wrong credentials or app password | Double-check username/password | | `Connection refused` | Wrong port or SSL setting | Try switching `SMTP Secure` or check your host’s SSL port | | `IMAP timeout` | IMAP disabled on the account | Enable IMAP (e.g. in Gmail settings) | | `Hostname mismatch` | Wrong IMAP/SMTP hostname | Use provider’s documented host name | *** ## 6. Best Practices * Use **App Passwords** when available — never your real login password. * Always use **secure ports** (`465`/`993`) with SSL. * Avoid shared or root email credentials. * For hosted domains, create dedicated mailbox users for Kurrier. *** **Tip:** You can create multiple SMTP/IMAP accounts in Kurrier — one for each mailbox or domain you manage. # Introduction Source: https://docs.kurrier.io/index Send your first email with Kurrier in minutes Kurrier lets you send and receive email by cleanly separating **providers** from **identities**. You connect a provider once, then attach as many domains or email addresses as you want. ## The Kurrier flow 1. **Add a provider** (SES, SendGrid, Mailgun, Postmark, or SMTP) 2. **Kurrier prepares everything** on the provider side and generates the required **DNS records** 3. **You update DNS** in your domain host 4. **Verify the provider** (Kurrier confirms DNS is live and the provider is ready) 5. **Add identities** (domains and email addresses) connected to that provider 6. **Send/receive using the identity** via API or SMTP That’s it. *** ## Step 1: Create an account Sign up at [kurrier.io](https://www.kurrier.io). Once logged in, you’ll land on the **Platform Dashboard**. No local setup required. *** ## Step 2: Add an email provider Go to **Platform → Providers**. Choose one of: * Amazon SES * SendGrid * Mailgun * Postmark * Generic SMTP Enter your provider credentials. Kurrier stores them **encrypted in the Vault** — never in plaintext or code. Click **Verify Connection** to confirm outbound (and optionally inbound) access.