n8n-nodes-sendit 1.0.4 → 1.1.0

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.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # n8n-nodes-sendit
2
2
 
3
- This is an n8n community node for [SendIt](https://sendit.infiniteappsai.com) - a multi-platform social media publishing service.
3
+ This is an n8n community node for [SendIt](https://sendit.infiniteappsai.com), an AI-native multi-platform social publishing API.
4
4
 
5
5
  [n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/reference/license/) workflow automation platform.
6
6
 
@@ -12,62 +12,132 @@ Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes
12
12
  npm install n8n-nodes-sendit
13
13
  ```
14
14
 
15
- ## Operations
15
+ ## Node Coverage (v1.1.0)
16
16
 
17
- ### Triggers
17
+ ### Trigger
18
18
 
19
- - **On post published** - Triggers when a post is successfully published
20
- - **On post scheduled** - Triggers when a post is scheduled
21
- - **On post failed** - Triggers when a post fails to publish
22
- - **On post deleted** - Triggers when a scheduled post is cancelled
23
- - **On account connected** - Triggers when a social account is connected
24
- - **On account disconnected** - Triggers when a social account is disconnected
19
+ `SendIt Trigger` supports catalog events plus custom override:
20
+
21
+ - Post lifecycle: `post.published`, `post.scheduled`, `post.failed`, `post.deleted`, `post.dead_lettered`
22
+ - Account lifecycle: `account.connected`, `account.disconnected`, `account.token_expiring`, `account.token_refresh_failed`, `account.reconnect_required`, `account.refresh_recovered`, `account.auth_recovery_completed`
23
+ - Listening: `mention.detected`, `mention.negative_sentiment`
24
+ - Team: `team.member_joined`, `team.member_left`, `team.member_role_changed`, `team.invitation_sent`, `team.invitation_accepted`, `team.invitation_declined`
25
+ - Approvals: `approval.submitted`, `approval.step_approved`, `approval.request_changes`, `approval.rejected`
26
+ - Analytics/Security/Audit: `analytics.anomaly_detected`, `security.api_key_rotation_due`, `audit.critical`
27
+
28
+ `Custom Event` lets you subscribe to an event string not listed yet in the static dropdown.
25
29
 
26
30
  ### Actions
27
31
 
28
- - **Publish Post** - Publish content immediately to selected platforms
29
- - **Schedule Post** - Schedule content for future publishing
30
- - **List Scheduled Posts** - Get all scheduled posts
31
- - **Cancel Scheduled Post** - Cancel a scheduled post
32
- - **Trigger Scheduled Post** - Publish a scheduled post immediately
33
- - **List Accounts** - Get all connected social media accounts
34
- - **Validate Content** - Validate content before publishing
32
+ | Resource | Operation(s) |
33
+ |----------|---------------|
34
+ | `post` | `publish`, `publishAi` |
35
+ | `ai` | `generate` |
36
+ | `media` | `upload` |
37
+ | `scheduledPost` | `create`, `getAll`, `delete`, `trigger` |
38
+ | `account` | `getAll` |
39
+ | `validation` | `validate` |
40
+ | `analytics` | `getAnalytics` |
41
+ | `brandVoice` | `create`, `list` |
42
+ | `campaign` | `plan`, `list`, `schedule` |
43
+ | `inbox` | `list`, `reply`, `getThread`, `updateStatus` |
44
+ | `listening` | `refresh`, `listKeywords`, `createKeyword`, `getKeyword`, `updateKeyword`, `deleteKeyword`, `listMentions`, `getMention`, `markMentionsRead`, `archiveMentions`, `listAlerts`, `markAlertsRead`, `dismissAlerts`, `getSummary` |
45
+ | `aiMedia` | `create`, `getStatus` |
46
+ | `meta` | `getCapabilities`, `getRequirements`, `getPlatformSettingsSchema`, `getBestTimes`, `getWebhookEventsCatalog`, `getWebhookTriggers` |
47
+ | `contentScore` | `score` |
48
+ | `library` | `list`, `create`, `get`, `update`, `delete`, `listCategories`, `listTags` |
49
+ | `approvals` | `list`, `approve`, `reject` |
50
+ | `bulkSchedule` | `listImports`, `getImport`, `validateCsv`, `importCsv`, `downloadTemplate` |
51
+ | `connect` | `getConnectAction`, `connectToken`, `connectWebhook` |
52
+ | `webhooks` | `testWebhook` |
53
+ | `advanced` | `apiRequest` |
54
+
55
+ ### Global Optional Headers
56
+
57
+ The action node supports optional request-scoped headers:
58
+
59
+ - `teamId` -> sent as `X-Team-ID`
60
+ - `idempotencyKey` -> sent as `Idempotency-Key`
35
61
 
36
62
  ## Supported Platforms
37
63
 
38
- - LinkedIn
39
- - Instagram
40
- - Threads
41
- - TikTok
42
- - X (Twitter)
64
+ The node ships with the full SendIt platform catalog option list and should be treated as catalog-driven. Always use capabilities/meta operations (`meta.getCapabilities`) to verify current operator-side availability.
43
65
 
44
- ## Credentials
66
+ ## Examples
45
67
 
46
- To use this node, you need a SendIt API key:
68
+ ### Connect token credentials (`connect.connectToken`)
47
69
 
48
- ### Getting Your API Key
70
+ `Credentials JSON` example:
49
71
 
50
- 1. **Sign in** to [SendIt](https://sendit.infiniteappsai.com) using your email (magic link authentication)
51
- 2. Go to your [Dashboard](https://sendit.infiniteappsai.com/dashboard)
52
- 3. In the **API Keys** section, click **"Create New Key"**
53
- 4. Give it a name (e.g., "n8n Integration") and click Create
54
- 5. **Copy your API key immediately** - it's only shown once!
72
+ ```json
73
+ {"apiKey":"your-platform-key","apiSecret":"your-platform-secret"}
74
+ ```
55
75
 
56
- ### API Key Format
76
+ ### Create library item (`library.create`)
57
77
 
58
- ```
59
- sk_live_<32_character_string>
60
- ```
78
+ - `libraryTitle`: `Weekly Product Update`
79
+ - `libraryText`: `New launch highlights...`
80
+ - `libraryType`: `template`
81
+ - `libraryTargetPlatforms`: `linkedin`, `x`
82
+
83
+ ### Approve scheduled post (`approvals.approve`)
84
+
85
+ - `approvalPostId`: `sched_abc123`
86
+ - `approvalComment`: `Approved for publishing`
87
+
88
+ ### Advanced request (`advanced.apiRequest`)
89
+
90
+ - `method`: `GET`
91
+ - `path`: `/api/v2/capabilities`
92
+ - `queryJson`: `{"include_beta":"1"}`
93
+ - `responseMode`: `json`
94
+
95
+ Allowed path prefixes:
61
96
 
62
- Keys always start with `sk_live_` followed by 32 alphanumeric characters.
97
+ - `/api/v1/`
98
+ - `/api/v2/`
63
99
 
64
- ### Configuring in n8n
100
+ ## API Contract Notes
65
101
 
66
- 1. In n8n, go to **Credentials** **New Credential** → **SendIt API**
67
- 2. Paste your API key
68
- 3. Click **Save**
102
+ - Inbox replies use `text` in `POST /api/v1/inbox/:threadId/reply`.
103
+ - Campaign planning uses `brief` + `platforms` (optional `postCount`, `startDate`, `endDate`).
104
+ - AI media create uses `provider`, `prompt`, `media_type`, and `parameters`.
105
+ - Bulk CSV validation/import expect raw CSV string in `csvContent`.
69
106
 
70
- > **Note:** Your API key is only shown once when created. If you lose it, you'll need to create a new one from the dashboard.
107
+ ## Developer Note: 1.1.0 Endpoint Map Freeze
108
+
109
+ ### Typed coverage (locked)
110
+
111
+ - Meta: `/capabilities`, `/requirements`, `/platforms/schema`, `/best-times`, `/webhooks/events-catalog`, `/webhooks/triggers`
112
+ - Publishing/scheduling: `/publish`, `/publish-ai`, `/schedule`, `/scheduled`, `/scheduled/:id`, `/scheduled/:id/trigger`
113
+ - AI/media: `/ai/generate-content`, `/media/upload`, `/ai-media`, `/ai-media/:id`
114
+ - Quality/validation: `/validate`, `/content-score`, `/analytics`
115
+ - Collaboration: `/inbox`, `/inbox/:threadId`, `/inbox/:threadId/reply`, `/inbox/:threadId/status`
116
+ - Listening: `/listening/*` keyword/mention/alert/summary/refresh routes
117
+ - Library: `/library`, `/library/:id`, `/library/categories`, `/library/tags`
118
+ - Approvals: `/approvals`, `/approvals/:postId/approve`, `/approvals/:postId/reject`
119
+ - Bulk: `/bulk-schedule`, `/bulk-schedule/:id`, `/bulk-schedule/validate`, `/bulk-schedule/import`, `/bulk-schedule/template`
120
+ - Connect: `/connect/:platform`, `/connect/token`, `/connect/webhook`
121
+ - Webhook helper: `/webhooks/:id/test`
122
+
123
+ ### Advanced coverage (long-tail + v2)
124
+
125
+ Use `advanced.apiRequest` for operations outside typed coverage, including v2 dashboard-heavy surfaces.
126
+
127
+ ## Credentials
128
+
129
+ To use this node, you need a SendIt API key:
130
+
131
+ 1. Sign in to [SendIt](https://sendit.infiniteappsai.com)
132
+ 2. Open your [Dashboard](https://sendit.infiniteappsai.com/dashboard)
133
+ 3. Create an API key in **API Keys**
134
+ 4. Configure in n8n under **Credentials** -> **SendIt API**
135
+
136
+ API key format:
137
+
138
+ ```text
139
+ sk_live_<32_character_string>
140
+ ```
71
141
 
72
142
  ## Resources
73
143
 
@@ -17,7 +17,7 @@ class SendItApi {
17
17
  default: '',
18
18
  required: true,
19
19
  placeholder: 'sk_live_your_api_key_here',
20
- description: 'Your SendIt API key. Get it from Dashboard → API Keys → Create New Key. Format: sk_live_...',
20
+ description: 'Your SendIt API key. Get it from Dashboard → API Keys → Create New Key. Format: sk_live_... Restricted-scope keys are supported; operations requiring unavailable scopes will return API errors when executed.',
21
21
  },
22
22
  ];
23
23
  this.authenticate = {
@@ -31,7 +31,10 @@ class SendItApi {
31
31
  this.test = {
32
32
  request: {
33
33
  baseURL: 'https://sendit.infiniteappsai.com/api/v1',
34
- url: '/accounts',
34
+ url: '/inbox',
35
+ qs: {
36
+ limit: 1,
37
+ },
35
38
  },
36
39
  };
37
40
  }