hostinger-api-mcp 3.11.1 → 3.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -149,7 +149,7 @@ const tools: OpenApiTool[] = [
149
149
  "readOnlyHint": true,
150
150
  "destructiveHint": false
151
151
  },
152
- "description": "Get a single campaign with its sender, subject, template reference, targeting and delivery\nprogress.\n\nThis describes how the campaign was set up and how far it has got. For opens, clicks and\nunsubscribes use the campaign statistics endpoint.",
152
+ "description": "Get a single campaign with its sender, subject, template reference, targeting and delivery\nprogress.\n\nThis describes how the campaign was set up and how far it has got. For opens, clicks and\nunsubscribes use the campaign statistics endpoint. The email content is not included: pass\n`template_uuid` to the get email template endpoint to read its HTML.",
153
153
  "method": "GET",
154
154
  "path": "/api/reach/v1/profiles/{profileUuid}/campaigns/{campaignUuid}",
155
155
  "inputSchema": {
@@ -2917,6 +2917,72 @@ const tools: OpenApiTool[] = [
2917
2917
  ],
2918
2918
  "group": "reach"
2919
2919
  },
2920
+ {
2921
+ "name": "reach_integrations_disconnect-ecommerce-store",
2922
+ "title": "Disconnect Ecommerce store",
2923
+ "annotations": {
2924
+ "title": "Disconnect Ecommerce store",
2925
+ "readOnlyHint": false,
2926
+ "destructiveHint": true,
2927
+ "idempotentHint": true
2928
+ },
2929
+ "description": "Disconnect an eCommerce store from the profile.\n\nReach stops receiving the store's customers and orders, and its products and coupons are\nremoved from Reach; contacts and past orders stay. Take `store_id` from the list eCommerce\nstores endpoint; for a store that is `connected_to_other_profile`, call this with that\nprofile. Also succeeds when the store is not connected to this profile, so success is not\nproof that anything was disconnected. Confirm the store and the plan with the customer\nbefore calling.",
2930
+ "method": "DELETE",
2931
+ "path": "/api/reach/v1/profiles/{profileUuid}/ecommerce/stores/{storeId}",
2932
+ "inputSchema": {
2933
+ "type": "object",
2934
+ "properties": {
2935
+ "profileUuid": {
2936
+ "type": "string",
2937
+ "description": "Profile uuid parameter"
2938
+ },
2939
+ "storeId": {
2940
+ "type": "string",
2941
+ "description": "Hostinger eCommerce store ID, as returned by the eCommerce stores list"
2942
+ }
2943
+ },
2944
+ "required": [
2945
+ "profileUuid",
2946
+ "storeId"
2947
+ ]
2948
+ },
2949
+ "security": [
2950
+ {
2951
+ "apiToken": []
2952
+ }
2953
+ ],
2954
+ "group": "reach"
2955
+ },
2956
+ {
2957
+ "name": "reach_integrations_list-ecommerce-stores",
2958
+ "title": "List Ecommerce stores",
2959
+ "annotations": {
2960
+ "title": "List Ecommerce stores",
2961
+ "readOnlyHint": true,
2962
+ "destructiveHint": false
2963
+ },
2964
+ "description": "Get all of the customer's Hostinger eCommerce stores, each with its `store_id` and\n`connection_status` for the profile in the path.\n\nA store is connected to at most one profile. `connected_to_other_profile` does not name that\nprofile - call this for each profile to find it. The list is empty, not an error, when the\neCommerce service cannot be reached. Pass `store_id` to the disconnect eCommerce store\nendpoint. Connecting an AI Website Builder site connects the store selling on it.",
2965
+ "method": "GET",
2966
+ "path": "/api/reach/v1/profiles/{profileUuid}/ecommerce/stores",
2967
+ "inputSchema": {
2968
+ "type": "object",
2969
+ "properties": {
2970
+ "profileUuid": {
2971
+ "type": "string",
2972
+ "description": "Profile uuid parameter"
2973
+ }
2974
+ },
2975
+ "required": [
2976
+ "profileUuid"
2977
+ ]
2978
+ },
2979
+ "security": [
2980
+ {
2981
+ "apiToken": []
2982
+ }
2983
+ ],
2984
+ "group": "reach"
2985
+ },
2920
2986
  {
2921
2987
  "name": "reach_templates_list-email",
2922
2988
  "title": "List email templates",
@@ -2925,7 +2991,7 @@ const tools: OpenApiTool[] = [
2925
2991
  "readOnlyHint": true,
2926
2992
  "destructiveHint": false
2927
2993
  },
2928
- "description": "Get a list of the email templates in a profile, most recently updated first.\n\nTemplates are the reusable email bodies a campaign is built from. The list is not paginated\nand only the metadata is returned - the template content itself is not exposed. Use the\n`uuid` of a template as the `template_uuid` when creating a campaign.",
2994
+ "description": "Get a list of the email templates in a profile, most recently updated first.\n\nTemplates are the reusable email bodies a campaign is built from. The list is not paginated\nand only the metadata is returned, without the HTML content. Use the `uuid` of a template\nas the `template_uuid` when creating a campaign. To read one template's HTML use the get\nemail template endpoint, and only when the content itself is needed.",
2929
2995
  "method": "GET",
2930
2996
  "path": "/api/reach/v1/profiles/{profileUuid}/templates",
2931
2997
  "inputSchema": {
@@ -2985,6 +3051,168 @@ const tools: OpenApiTool[] = [
2985
3051
  }
2986
3052
  ],
2987
3053
  "group": "reach"
3054
+ },
3055
+ {
3056
+ "name": "reach_templates_email",
3057
+ "title": "Get email template",
3058
+ "annotations": {
3059
+ "title": "Get email template",
3060
+ "readOnlyHint": true,
3061
+ "destructiveHint": false
3062
+ },
3063
+ "description": "Get one email template of the profile with its full HTML in `template_content`.\n\nA campaign's email content is its template: to read what a campaign sends, get the campaign\nand pass its `template_uuid` here. The HTML can be large, so fetch it only when the content\nitself is needed, never to browse or pick templates - the list email templates endpoint does\nthat without content. Personalization tags such as `{{name}}` come back unrendered.",
3064
+ "method": "GET",
3065
+ "path": "/api/reach/v1/profiles/{profileUuid}/templates/{templateUuid}",
3066
+ "inputSchema": {
3067
+ "type": "object",
3068
+ "properties": {
3069
+ "profileUuid": {
3070
+ "type": "string",
3071
+ "description": "Profile uuid parameter"
3072
+ },
3073
+ "templateUuid": {
3074
+ "type": "string",
3075
+ "description": "Template uuid parameter"
3076
+ }
3077
+ },
3078
+ "required": [
3079
+ "profileUuid",
3080
+ "templateUuid"
3081
+ ]
3082
+ },
3083
+ "security": [
3084
+ {
3085
+ "apiToken": []
3086
+ }
3087
+ ],
3088
+ "group": "reach"
3089
+ },
3090
+ {
3091
+ "name": "reach_integrations_list-connected-websites",
3092
+ "title": "List connected websites",
3093
+ "annotations": {
3094
+ "title": "List connected websites",
3095
+ "readOnlyHint": true,
3096
+ "destructiveHint": false
3097
+ },
3098
+ "description": "Get the websites connected to the profile, each with its `domain` and `platform_type`.\n\nA domain is connected to at most one profile, so to find which plan a site is on, call this\nfor each profile. Only connected sites are listed, not every website the customer owns, and\neCommerce stores are not included - use the list eCommerce stores endpoint for those. Pass\n`domain` to the disconnect WordPress site or disconnect AI Website Builder site endpoint.",
3099
+ "method": "GET",
3100
+ "path": "/api/reach/v1/profiles/{profileUuid}/websites",
3101
+ "inputSchema": {
3102
+ "type": "object",
3103
+ "properties": {
3104
+ "profileUuid": {
3105
+ "type": "string",
3106
+ "description": "Profile uuid parameter"
3107
+ }
3108
+ },
3109
+ "required": [
3110
+ "profileUuid"
3111
+ ]
3112
+ },
3113
+ "security": [
3114
+ {
3115
+ "apiToken": []
3116
+ }
3117
+ ],
3118
+ "group": "reach"
3119
+ },
3120
+ {
3121
+ "name": "reach_integrations_connect-ai-website-builder-site",
3122
+ "title": "Connect AI Website Builder site",
3123
+ "annotations": {
3124
+ "title": "Connect AI Website Builder site",
3125
+ "readOnlyHint": false,
3126
+ "destructiveHint": false
3127
+ },
3128
+ "description": "Connect an AI Website Builder site the customer built manually to the profile, so its\nsubscribers flow into Reach.\n\nFails with not found when the customer owns no AI Website Builder site with that domain.\nFails with `DOMAIN_ALREADY_EXISTS` when the domain is connected to any profile - to move a\nsite to another plan, disconnect it from the old profile first - and with\n`WEBSITE_CONNECTION_ALREADY_EXISTS` when this profile already has an AI Website Builder site.\nThe eCommerce store selling on the site, if it is not connected anywhere, is connected too.\nWordPress sites and sites made with the agentic AI Website Builder cannot be connected here.",
3129
+ "method": "POST",
3130
+ "path": "/api/reach/v1/profiles/{profileUuid}/websites/website-builder",
3131
+ "inputSchema": {
3132
+ "type": "object",
3133
+ "properties": {
3134
+ "profileUuid": {
3135
+ "type": "string",
3136
+ "description": "Profile uuid parameter"
3137
+ },
3138
+ "domain": {
3139
+ "type": "string",
3140
+ "description": "domain parameter"
3141
+ }
3142
+ },
3143
+ "required": [
3144
+ "profileUuid",
3145
+ "domain"
3146
+ ]
3147
+ },
3148
+ "security": [
3149
+ {
3150
+ "apiToken": []
3151
+ }
3152
+ ],
3153
+ "group": "reach"
3154
+ },
3155
+ {
3156
+ "name": "reach_integrations_disconnect-ai-website-builder-site",
3157
+ "title": "Disconnect AI Website Builder site",
3158
+ "annotations": {
3159
+ "title": "Disconnect AI Website Builder site",
3160
+ "readOnlyHint": false,
3161
+ "destructiveHint": true,
3162
+ "idempotentHint": true
3163
+ },
3164
+ "description": "Disconnect an AI Website Builder site from the profile; the site stops sending subscribers\nto Reach.\n\nTake `domain` from the list connected websites endpoint. Works for a site that was already\ndeleted in the builder. Fails with not found when the domain is not connected to this\nprofile. Contacts and any connected eCommerce store stay. The site stays disconnected until\nit is connected again, so confirm the site and the plan with the customer before calling.",
3165
+ "method": "DELETE",
3166
+ "path": "/api/reach/v1/profiles/{profileUuid}/websites/website-builder",
3167
+ "inputSchema": {
3168
+ "type": "object",
3169
+ "properties": {
3170
+ "profileUuid": {
3171
+ "type": "string",
3172
+ "description": "Profile uuid parameter"
3173
+ }
3174
+ },
3175
+ "required": [
3176
+ "profileUuid"
3177
+ ]
3178
+ },
3179
+ "security": [
3180
+ {
3181
+ "apiToken": []
3182
+ }
3183
+ ],
3184
+ "group": "reach"
3185
+ },
3186
+ {
3187
+ "name": "reach_integrations_disconnect-wordpress-site",
3188
+ "title": "Disconnect WordPress site",
3189
+ "annotations": {
3190
+ "title": "Disconnect WordPress site",
3191
+ "readOnlyHint": false,
3192
+ "destructiveHint": true,
3193
+ "idempotentHint": true
3194
+ },
3195
+ "description": "Disconnect a WordPress site from the profile.\n\nThe Reach plugin on the site stops sending subscribers and store data, and the site's\nproducts and coupons are removed from Reach; contacts and past orders stay. Take `domain`\nfrom the list connected websites endpoint. Fails with not found when the domain is not\nconnected to this profile. This cannot be undone through the API - the customer reconnects\nfrom the WordPress plugin - so confirm the site and the plan with the customer before calling.",
3196
+ "method": "DELETE",
3197
+ "path": "/api/reach/v1/profiles/{profileUuid}/websites/wordpress",
3198
+ "inputSchema": {
3199
+ "type": "object",
3200
+ "properties": {
3201
+ "profileUuid": {
3202
+ "type": "string",
3203
+ "description": "Profile uuid parameter"
3204
+ }
3205
+ },
3206
+ "required": [
3207
+ "profileUuid"
3208
+ ]
3209
+ },
3210
+ "security": [
3211
+ {
3212
+ "apiToken": []
3213
+ }
3214
+ ],
3215
+ "group": "reach"
2988
3216
  }
2989
3217
  ];
2990
3218
  export default tools;
@@ -4,4 +4,4 @@ import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/agency-hosting.js';
5
5
  import instructions from '../core/instructions.agency-hosting.js';
6
6
 
7
- startServer({ name: 'hostinger-agency-hosting-mcp', version: '3.11.1', tools, instructions });
7
+ startServer({ name: 'hostinger-agency-hosting-mcp', version: '3.12.1', tools, instructions });
@@ -4,4 +4,4 @@ import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/agency-hosting.js';
5
5
  import instructions from '../core/instructions.agency-hosting.js';
6
6
 
7
- startServer({ name: 'hostinger-agency-hosting-mcp', version: '3.11.1', tools, instructions });
7
+ startServer({ name: 'hostinger-agency-hosting-mcp', version: '3.12.1', tools, instructions });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/agent-readiness.js';
5
5
 
6
- startServer({ name: 'hostinger-agent-readiness-mcp', version: '3.11.1', tools });
6
+ startServer({ name: 'hostinger-agent-readiness-mcp', version: '3.12.1', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/agent-readiness.js';
5
5
 
6
- startServer({ name: 'hostinger-agent-readiness-mcp', version: '3.11.1', tools });
6
+ startServer({ name: 'hostinger-agent-readiness-mcp', version: '3.12.1', tools });
@@ -5,4 +5,4 @@ import tools from '../core/tools/all.js';
5
5
  import instructions from '../core/instructions.js';
6
6
  import skills from '../core/skills.js';
7
7
 
8
- startServer({ name: 'hostinger-api-mcp', version: '3.11.1', tools, instructions, skills });
8
+ startServer({ name: 'hostinger-api-mcp', version: '3.12.1', tools, instructions, skills });
@@ -5,4 +5,4 @@ import tools from '../core/tools/all.js';
5
5
  import instructions from '../core/instructions.js';
6
6
  import skills from '../core/skills.js';
7
7
 
8
- startServer({ name: 'hostinger-api-mcp', version: '3.11.1', tools, instructions, skills });
8
+ startServer({ name: 'hostinger-api-mcp', version: '3.12.1', tools, instructions, skills });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/billing.js';
5
5
 
6
- startServer({ name: 'hostinger-billing-mcp', version: '3.11.1', tools });
6
+ startServer({ name: 'hostinger-billing-mcp', version: '3.12.1', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/billing.js';
5
5
 
6
- startServer({ name: 'hostinger-billing-mcp', version: '3.11.1', tools });
6
+ startServer({ name: 'hostinger-billing-mcp', version: '3.12.1', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/dns.js';
5
5
 
6
- startServer({ name: 'hostinger-dns-mcp', version: '3.11.1', tools });
6
+ startServer({ name: 'hostinger-dns-mcp', version: '3.12.1', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/dns.js';
5
5
 
6
- startServer({ name: 'hostinger-dns-mcp', version: '3.11.1', tools });
6
+ startServer({ name: 'hostinger-dns-mcp', version: '3.12.1', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/domains.js';
5
5
 
6
- startServer({ name: 'hostinger-domains-mcp', version: '3.11.1', tools });
6
+ startServer({ name: 'hostinger-domains-mcp', version: '3.12.1', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/domains.js';
5
5
 
6
- startServer({ name: 'hostinger-domains-mcp', version: '3.11.1', tools });
6
+ startServer({ name: 'hostinger-domains-mcp', version: '3.12.1', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/ecommerce.js';
5
5
 
6
- startServer({ name: 'hostinger-ecommerce-mcp', version: '3.11.1', tools });
6
+ startServer({ name: 'hostinger-ecommerce-mcp', version: '3.12.1', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/ecommerce.js';
5
5
 
6
- startServer({ name: 'hostinger-ecommerce-mcp', version: '3.11.1', tools });
6
+ startServer({ name: 'hostinger-ecommerce-mcp', version: '3.12.1', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/horizons.js';
5
5
 
6
- startServer({ name: 'hostinger-horizons-mcp', version: '3.11.1', tools });
6
+ startServer({ name: 'hostinger-horizons-mcp', version: '3.12.1', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/horizons.js';
5
5
 
6
- startServer({ name: 'hostinger-horizons-mcp', version: '3.11.1', tools });
6
+ startServer({ name: 'hostinger-horizons-mcp', version: '3.12.1', tools });
@@ -4,4 +4,4 @@ import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/hosting.js';
5
5
  import instructions from '../core/instructions.js';
6
6
 
7
- startServer({ name: 'hostinger-hosting-mcp', version: '3.11.1', tools, instructions });
7
+ startServer({ name: 'hostinger-hosting-mcp', version: '3.12.1', tools, instructions });
@@ -4,4 +4,4 @@ import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/hosting.js';
5
5
  import instructions from '../core/instructions.js';
6
6
 
7
- startServer({ name: 'hostinger-hosting-mcp', version: '3.11.1', tools, instructions });
7
+ startServer({ name: 'hostinger-hosting-mcp', version: '3.12.1', tools, instructions });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/mail.js';
5
5
 
6
- startServer({ name: 'hostinger-mail-mcp', version: '3.11.1', tools });
6
+ startServer({ name: 'hostinger-mail-mcp', version: '3.12.1', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/mail.js';
5
5
 
6
- startServer({ name: 'hostinger-mail-mcp', version: '3.11.1', tools });
6
+ startServer({ name: 'hostinger-mail-mcp', version: '3.12.1', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/reach.js';
5
5
 
6
- startServer({ name: 'hostinger-reach-mcp', version: '3.11.1', tools });
6
+ startServer({ name: 'hostinger-reach-mcp', version: '3.12.1', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/reach.js';
5
5
 
6
- startServer({ name: 'hostinger-reach-mcp', version: '3.11.1', tools });
6
+ startServer({ name: 'hostinger-reach-mcp', version: '3.12.1', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/vps.js';
5
5
 
6
- startServer({ name: 'hostinger-vps-mcp', version: '3.11.1', tools });
6
+ startServer({ name: 'hostinger-vps-mcp', version: '3.12.1', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/vps.js';
5
5
 
6
- startServer({ name: 'hostinger-vps-mcp', version: '3.11.1', tools });
6
+ startServer({ name: 'hostinger-vps-mcp', version: '3.12.1', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/wordpress.js';
5
5
 
6
- startServer({ name: 'hostinger-wordpress-mcp', version: '3.11.1', tools });
6
+ startServer({ name: 'hostinger-wordpress-mcp', version: '3.12.1', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/wordpress.js';
5
5
 
6
- startServer({ name: 'hostinger-wordpress-mcp', version: '3.11.1', tools });
6
+ startServer({ name: 'hostinger-wordpress-mcp', version: '3.12.1', tools });
package/types.d.ts CHANGED
@@ -2144,8 +2144,8 @@ common reason a domain is left awaiting setup. Create one with `Create WHOIS pro
2144
2144
  Some TLDs require `additional_details`. These are validated before setup, so a missing or
2145
2145
  invalid value is rejected without any registration being attempted.
2146
2146
 
2147
- The domain is set up with the default nameservers and without privacy protection. Use
2148
- `Update domain nameservers` and `Enable privacy protection` afterwards to change either.
2147
+ The domain is set up with the default nameservers and with privacy protection. Use
2148
+ `Update domain nameservers` and `Disable privacy protection` afterwards to change either.
2149
2149
 
2150
2150
  A successful response means the setup request was accepted, not that the domain is already
2151
2151
  registered. Poll `Get domain list` for the outcome, the domain appears in `Get domain details`
@@ -6707,7 +6707,8 @@ steps yet returns an empty list.
6707
6707
  progress.
6708
6708
 
6709
6709
  This describes how the campaign was set up and how far it has got. For opens, clicks and
6710
- unsubscribes use the campaign statistics endpoint.
6710
+ unsubscribes use the campaign statistics endpoint. The email content is not included: pass
6711
+ `template_uuid` to the get email template endpoint to read its HTML.
6711
6712
  */
6712
6713
  "reach_campaigns_get": {
6713
6714
  params: {
@@ -8231,12 +8232,56 @@ full address: Reach adds the profile's connected sending domain itself.
8231
8232
  response: any; // Response structure will depend on the API
8232
8233
  };
8233
8234
 
8235
+ /**
8236
+ * Disconnect an eCommerce store from the profile.
8237
+
8238
+ Reach stops receiving the store's customers and orders, and its products and coupons are
8239
+ removed from Reach; contacts and past orders stay. Take `store_id` from the list eCommerce
8240
+ stores endpoint; for a store that is `connected_to_other_profile`, call this with that
8241
+ profile. Also succeeds when the store is not connected to this profile, so success is not
8242
+ proof that anything was disconnected. Confirm the store and the plan with the customer
8243
+ before calling.
8244
+ */
8245
+ "reach_integrations_disconnect-ecommerce-store": {
8246
+ params: {
8247
+ /**
8248
+ * Profile uuid parameter
8249
+ */
8250
+ profileUuid: string;
8251
+ /**
8252
+ * Hostinger eCommerce store ID, as returned by the eCommerce stores list
8253
+ */
8254
+ storeId: string;
8255
+ };
8256
+ response: any; // Response structure will depend on the API
8257
+ };
8258
+
8259
+ /**
8260
+ * Get all of the customer's Hostinger eCommerce stores, each with its `store_id` and
8261
+ `connection_status` for the profile in the path.
8262
+
8263
+ A store is connected to at most one profile. `connected_to_other_profile` does not name that
8264
+ profile - call this for each profile to find it. The list is empty, not an error, when the
8265
+ eCommerce service cannot be reached. Pass `store_id` to the disconnect eCommerce store
8266
+ endpoint. Connecting an AI Website Builder site connects the store selling on it.
8267
+ */
8268
+ "reach_integrations_list-ecommerce-stores": {
8269
+ params: {
8270
+ /**
8271
+ * Profile uuid parameter
8272
+ */
8273
+ profileUuid: string;
8274
+ };
8275
+ response: any; // Response structure will depend on the API
8276
+ };
8277
+
8234
8278
  /**
8235
8279
  * Get a list of the email templates in a profile, most recently updated first.
8236
8280
 
8237
8281
  Templates are the reusable email bodies a campaign is built from. The list is not paginated
8238
- and only the metadata is returned - the template content itself is not exposed. Use the
8239
- `uuid` of a template as the `template_uuid` when creating a campaign.
8282
+ and only the metadata is returned, without the HTML content. Use the `uuid` of a template
8283
+ as the `template_uuid` when creating a campaign. To read one template's HTML use the get
8284
+ email template endpoint, and only when the content itself is needed.
8240
8285
  */
8241
8286
  "reach_templates_list-email": {
8242
8287
  params: {
@@ -8275,6 +8320,109 @@ the markup self-contained.
8275
8320
  response: any; // Response structure will depend on the API
8276
8321
  };
8277
8322
 
8323
+ /**
8324
+ * Get one email template of the profile with its full HTML in `template_content`.
8325
+
8326
+ A campaign's email content is its template: to read what a campaign sends, get the campaign
8327
+ and pass its `template_uuid` here. The HTML can be large, so fetch it only when the content
8328
+ itself is needed, never to browse or pick templates - the list email templates endpoint does
8329
+ that without content. Personalization tags such as `{{name}}` come back unrendered.
8330
+ */
8331
+ "reach_templates_email": {
8332
+ params: {
8333
+ /**
8334
+ * Profile uuid parameter
8335
+ */
8336
+ profileUuid: string;
8337
+ /**
8338
+ * Template uuid parameter
8339
+ */
8340
+ templateUuid: string;
8341
+ };
8342
+ response: any; // Response structure will depend on the API
8343
+ };
8344
+
8345
+ /**
8346
+ * Get the websites connected to the profile, each with its `domain` and `platform_type`.
8347
+
8348
+ A domain is connected to at most one profile, so to find which plan a site is on, call this
8349
+ for each profile. Only connected sites are listed, not every website the customer owns, and
8350
+ eCommerce stores are not included - use the list eCommerce stores endpoint for those. Pass
8351
+ `domain` to the disconnect WordPress site or disconnect AI Website Builder site endpoint.
8352
+ */
8353
+ "reach_integrations_list-connected-websites": {
8354
+ params: {
8355
+ /**
8356
+ * Profile uuid parameter
8357
+ */
8358
+ profileUuid: string;
8359
+ };
8360
+ response: any; // Response structure will depend on the API
8361
+ };
8362
+
8363
+ /**
8364
+ * Connect an AI Website Builder site the customer built manually to the profile, so its
8365
+ subscribers flow into Reach.
8366
+
8367
+ Fails with not found when the customer owns no AI Website Builder site with that domain.
8368
+ Fails with `DOMAIN_ALREADY_EXISTS` when the domain is connected to any profile - to move a
8369
+ site to another plan, disconnect it from the old profile first - and with
8370
+ `WEBSITE_CONNECTION_ALREADY_EXISTS` when this profile already has an AI Website Builder site.
8371
+ The eCommerce store selling on the site, if it is not connected anywhere, is connected too.
8372
+ WordPress sites and sites made with the agentic AI Website Builder cannot be connected here.
8373
+ */
8374
+ "reach_integrations_connect-ai-website-builder-site": {
8375
+ params: {
8376
+ /**
8377
+ * Profile uuid parameter
8378
+ */
8379
+ profileUuid: string;
8380
+ /**
8381
+ * domain parameter
8382
+ */
8383
+ domain: string;
8384
+ };
8385
+ response: any; // Response structure will depend on the API
8386
+ };
8387
+
8388
+ /**
8389
+ * Disconnect an AI Website Builder site from the profile; the site stops sending subscribers
8390
+ to Reach.
8391
+
8392
+ Take `domain` from the list connected websites endpoint. Works for a site that was already
8393
+ deleted in the builder. Fails with not found when the domain is not connected to this
8394
+ profile. Contacts and any connected eCommerce store stay. The site stays disconnected until
8395
+ it is connected again, so confirm the site and the plan with the customer before calling.
8396
+ */
8397
+ "reach_integrations_disconnect-ai-website-builder-site": {
8398
+ params: {
8399
+ /**
8400
+ * Profile uuid parameter
8401
+ */
8402
+ profileUuid: string;
8403
+ };
8404
+ response: any; // Response structure will depend on the API
8405
+ };
8406
+
8407
+ /**
8408
+ * Disconnect a WordPress site from the profile.
8409
+
8410
+ The Reach plugin on the site stops sending subscribers and store data, and the site's
8411
+ products and coupons are removed from Reach; contacts and past orders stay. Take `domain`
8412
+ from the list connected websites endpoint. Fails with not found when the domain is not
8413
+ connected to this profile. This cannot be undone through the API - the customer reconnects
8414
+ from the WordPress plugin - so confirm the site and the plan with the customer before calling.
8415
+ */
8416
+ "reach_integrations_disconnect-wordpress-site": {
8417
+ params: {
8418
+ /**
8419
+ * Profile uuid parameter
8420
+ */
8421
+ profileUuid: string;
8422
+ };
8423
+ response: any; // Response structure will depend on the API
8424
+ };
8425
+
8278
8426
  /**
8279
8427
  * Retrieve all available data centers.
8280
8428