postboost 1.8.0 → 1.14.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.
Files changed (288) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.yml +26 -0
  2. package/.github/ISSUE_TEMPLATE/config.yml +11 -0
  3. package/.github/ISSUE_TEMPLATE/feature_request.yml +14 -0
  4. package/.github/pull_request_template.md +6 -0
  5. package/CODE_OF_CONDUCT.md +7 -0
  6. package/CONTRIBUTING.md +31 -0
  7. package/README.md +46 -2
  8. package/SECURITY.md +9 -0
  9. package/api/aIApi.ts +460 -2
  10. package/api/accountGroupsApi.ts +501 -0
  11. package/api/accountsApi.ts +244 -2
  12. package/api/activityApi.ts +188 -0
  13. package/api/agentsApi.ts +918 -0
  14. package/api/analyticsApi.ts +551 -2
  15. package/api/apis.ts +19 -1
  16. package/api/competitorsApi.ts +412 -0
  17. package/api/hashtagGroupsApi.ts +501 -0
  18. package/api/inboxApi.ts +957 -0
  19. package/api/mediaApi.ts +97 -7
  20. package/api/mentionsApi.ts +5 -3
  21. package/api/postingScheduleApi.ts +497 -0
  22. package/api/postsApi.ts +1236 -99
  23. package/api/receiptsApi.ts +2 -2
  24. package/api/subscriptionsApi.ts +2 -2
  25. package/api/tagsApi.ts +5 -3
  26. package/api/templatesApi.ts +501 -0
  27. package/api/usersApi.ts +2 -2
  28. package/api/webhooksApi.ts +327 -0
  29. package/api/workspacesApi.ts +463 -2
  30. package/model/aICredits.ts +2 -2
  31. package/model/aIUsage.ts +39 -0
  32. package/model/aIUsageText.ts +52 -0
  33. package/model/account.ts +26 -4
  34. package/model/accountAnalytics.ts +2 -2
  35. package/model/accountAnalyticsInitialSync.ts +2 -2
  36. package/model/accountConnectionHealth.ts +124 -0
  37. package/model/accountErrorsInner.ts +50 -0
  38. package/model/accountErrorsInnerOneOf.ts +49 -0
  39. package/model/accountGroup.ts +49 -0
  40. package/model/accountGroupInput.ts +40 -0
  41. package/model/accountHealth.ts +90 -0
  42. package/model/accountHealthDailyCap.ts +43 -0
  43. package/model/accountSchedule.ts +2 -2
  44. package/model/addCompetitor202Response.ts +43 -0
  45. package/model/addCompetitor409Response.ts +37 -0
  46. package/model/addGenericSubscriptionRequest.ts +2 -2
  47. package/model/addPostToQueueRequest.ts +2 -2
  48. package/model/agentPageMeta.ts +49 -0
  49. package/model/agentProposal.ts +137 -0
  50. package/model/agentProposalDecision.ts +31 -0
  51. package/model/agentRun.ts +129 -0
  52. package/model/analyticsPeriod.ts +2 -2
  53. package/model/analyticsSummary.ts +2 -2
  54. package/model/analyticsSummaryData.ts +2 -2
  55. package/model/apiActivity.ts +94 -0
  56. package/model/apiActivityOutcome.ts +27 -0
  57. package/model/apiKey.ts +77 -0
  58. package/model/apiKeyAbility.ts +21 -0
  59. package/model/apiKeyInput.ts +56 -0
  60. package/model/approveAgentProposal200Response.ts +32 -0
  61. package/model/approveAgentProposal409Response.ts +38 -0
  62. package/model/approveInboxReplyDraft403Response.ts +43 -0
  63. package/model/approvePostRequest.ts +2 -2
  64. package/model/bestPostingTimes.ts +2 -2
  65. package/model/bestPostingTimesTimesInner.ts +2 -2
  66. package/model/blogToSocial200Response.ts +9 -2
  67. package/model/blogToSocial429Response.ts +2 -2
  68. package/model/blogToSocialCaption.ts +2 -2
  69. package/model/blogToSocialInput.ts +11 -2
  70. package/model/blogToSocialMedia.ts +2 -2
  71. package/model/blogToSocialResponse.ts +2 -2
  72. package/model/brandVoice.ts +136 -0
  73. package/model/brandVoiceInput.ts +142 -0
  74. package/model/brandVoiceMeta.ts +34 -0
  75. package/model/cancelSubscription422Response.ts +2 -2
  76. package/model/cancelSubscription422ResponseErrors.ts +2 -2
  77. package/model/cancelSubscriptionRequest.ts +2 -2
  78. package/model/changeSubscriptionPlanRequest.ts +2 -2
  79. package/model/channelAccount.ts +101 -0
  80. package/model/checkoutSubscription200Response.ts +2 -2
  81. package/model/checkoutSubscriptionRequest.ts +2 -2
  82. package/model/codedError.ts +46 -0
  83. package/model/competitor.ts +82 -0
  84. package/model/competitorDetail.ts +96 -0
  85. package/model/competitorInput.ts +43 -0
  86. package/model/competitorMedia.ts +61 -0
  87. package/model/competitorSnapshot.ts +43 -0
  88. package/model/completeChunkedUploadRequest.ts +2 -2
  89. package/model/connectChannelInput.ts +64 -0
  90. package/model/createAccountGroup201Response.ts +32 -0
  91. package/model/createAgent201Response.ts +32 -0
  92. package/model/createApiKey201Response.ts +32 -0
  93. package/model/createApiKey201ResponseData.ts +86 -0
  94. package/model/createHashtagGroup201Response.ts +32 -0
  95. package/model/createInboxReplyDraft201Response.ts +32 -0
  96. package/model/createMediaFolderRequest.ts +2 -2
  97. package/model/createMention201Response.ts +2 -2
  98. package/model/createRecyclingRule201Response.ts +32 -0
  99. package/model/createReportExport201Response.ts +32 -0
  100. package/model/createResellerClient201Response.ts +32 -0
  101. package/model/createRssFeed201Response.ts +32 -0
  102. package/model/createTemplate201Response.ts +32 -0
  103. package/model/createWebhookSubscription201Response.ts +32 -0
  104. package/model/createWebhookSubscription201ResponseData.ts +70 -0
  105. package/model/deleteAgent200Response.ts +31 -0
  106. package/model/deleteMediaBulkRequest.ts +2 -2
  107. package/model/deleteMediaBulkRequestItemsInner.ts +2 -2
  108. package/model/deleteMediaFolderRequest.ts +2 -2
  109. package/model/deleteMode.ts +2 -2
  110. package/model/deletePostRequest.ts +2 -2
  111. package/model/deletePostsBulkRequest.ts +2 -2
  112. package/model/deleteReceiptsBulkRequest.ts +2 -2
  113. package/model/deleteResult.ts +2 -2
  114. package/model/deleteUser400Response.ts +2 -2
  115. package/model/deleteUsersBulkRequest.ts +2 -2
  116. package/model/deleteWorkspacesBulkRequest.ts +2 -2
  117. package/model/getAccountHealth200Response.ts +32 -0
  118. package/model/getBrandVoice200Response.ts +32 -0
  119. package/model/getCompetitor200Response.ts +32 -0
  120. package/model/getInboxConversation200Response.ts +32 -0
  121. package/model/getPostingSchedule200Response.ts +32 -0
  122. package/model/getRemoteUploadStatus200Response.ts +2 -2
  123. package/model/getReportBranding200Response.ts +32 -0
  124. package/model/guardrailError.ts +82 -0
  125. package/model/hashtagGroup.ts +46 -0
  126. package/model/hashtagGroupInput.ts +37 -0
  127. package/model/imageAltText200Response.ts +2 -2
  128. package/model/imageAltTextInput.ts +2 -2
  129. package/model/imageAltTextResponse.ts +2 -2
  130. package/model/imageCreditBalance.ts +67 -0
  131. package/model/imageEditInput.ts +11 -2
  132. package/model/imageGenerate200Response.ts +9 -2
  133. package/model/imageGenerate429Response.ts +2 -2
  134. package/model/imageGenerateInput.ts +14 -2
  135. package/model/imageGenerationResponse.ts +2 -2
  136. package/model/imagePrompt200Response.ts +9 -2
  137. package/model/imagePrompt429Response.ts +2 -2
  138. package/model/imagePromptInput.ts +14 -2
  139. package/model/imagePromptResponse.ts +2 -2
  140. package/model/imageVariations200Response.ts +2 -2
  141. package/model/imageVariationsInput.ts +2 -2
  142. package/model/imageVariationsResponse.ts +2 -2
  143. package/model/inboxAuthor.ts +43 -0
  144. package/model/inboxConversation.ts +139 -0
  145. package/model/inboxConversationAccount.ts +49 -0
  146. package/model/inboxConversationUpdate.ts +43 -0
  147. package/model/inboxMessage.ts +95 -0
  148. package/model/inboxMessageAuthor.ts +43 -0
  149. package/model/inboxReplyDraft.ts +132 -0
  150. package/model/inboxReplyDraftApprove.ts +34 -0
  151. package/model/inboxReplyDraftEdit.ts +31 -0
  152. package/model/inboxReplyDraftInput.ts +43 -0
  153. package/model/initiateChunkedUpload201Response.ts +2 -2
  154. package/model/initiateChunkedUploadRequest.ts +2 -2
  155. package/model/initiateRemoteUpload201Response.ts +2 -2
  156. package/model/initiateRemoteUpload201ResponseOneOf.ts +2 -2
  157. package/model/initiateRemoteUploadRequest.ts +2 -2
  158. package/model/learnBrandVoiceInput.ts +61 -0
  159. package/model/learnBrandVoiceResponse.ts +39 -0
  160. package/model/learnBrandVoiceResponseMeta.ts +55 -0
  161. package/model/listAccountGroups200Response.ts +46 -0
  162. package/model/listAccounts200Response.ts +2 -2
  163. package/model/listAgentProposals200Response.ts +39 -0
  164. package/model/listAgentRuns200Response.ts +39 -0
  165. package/model/listAgents200Response.ts +32 -0
  166. package/model/listApiActivity200Response.ts +46 -0
  167. package/model/listApiKeys200Response.ts +32 -0
  168. package/model/listCompetitors200Response.ts +32 -0
  169. package/model/listHashtagGroups200Response.ts +46 -0
  170. package/model/listInboxConversations200Response.ts +46 -0
  171. package/model/listInboxReplyDrafts200Response.ts +46 -0
  172. package/model/listMedia200Response.ts +2 -2
  173. package/model/listMediaFolders200Response.ts +2 -2
  174. package/model/listMentions200Response.ts +2 -2
  175. package/model/listMyWorkspaces200Response.ts +2 -2
  176. package/model/listPosts200Response.ts +2 -2
  177. package/model/listReceipts200Response.ts +2 -2
  178. package/model/listRecyclingRules200Response.ts +32 -0
  179. package/model/listRecyclingRuns200Response.ts +32 -0
  180. package/model/listReportExports200Response.ts +32 -0
  181. package/model/listResellerClients200Response.ts +39 -0
  182. package/model/listRssFeeds200Response.ts +32 -0
  183. package/model/listTags200Response.ts +2 -2
  184. package/model/listTemplates200Response.ts +46 -0
  185. package/model/listUsers200Response.ts +2 -2
  186. package/model/listWebhookSubscriptions200Response.ts +32 -0
  187. package/model/listWorkspaces200Response.ts +2 -2
  188. package/model/media.ts +2 -2
  189. package/model/mediaBase64Input.ts +61 -0
  190. package/model/mediaFolder.ts +2 -2
  191. package/model/mediaFolderInput.ts +2 -2
  192. package/model/mediaFolderRef.ts +2 -2
  193. package/model/mention.ts +2 -2
  194. package/model/mentionIdentity.ts +2 -2
  195. package/model/mentionIdentityInput.ts +2 -2
  196. package/model/mentionInput.ts +2 -2
  197. package/model/messageOnly.ts +31 -0
  198. package/model/models.ts +475 -0
  199. package/model/paginationMeta.ts +2 -2
  200. package/model/paginationMetaLinks.ts +4 -4
  201. package/model/paginationMetaMeta.ts +4 -4
  202. package/model/pollRssFeed200Response.ts +50 -0
  203. package/model/post.ts +2 -2
  204. package/model/postAnalytics.ts +2 -2
  205. package/model/postContent.ts +6 -3
  206. package/model/postInput.ts +20 -2
  207. package/model/postOptionsInstagram.ts +59 -0
  208. package/model/postOptionsTikTok.ts +97 -0
  209. package/model/postOptionsYoutube.ts +62 -0
  210. package/model/postStatus.ts +2 -2
  211. package/model/postVersion.ts +7 -6
  212. package/model/postVersionOptions.ts +55 -0
  213. package/model/postingSchedule.ts +74 -0
  214. package/model/postingScheduleDay.ts +50 -0
  215. package/model/postingScheduleDayTimesInner.ts +34 -0
  216. package/model/postingScheduleInput.ts +53 -0
  217. package/model/postingTimeSlot.ts +2 -2
  218. package/model/postingTimes.ts +2 -2
  219. package/model/postingTimesBestInner.ts +2 -2
  220. package/model/postingTimesDayIntervalsInnerInner.ts +2 -2
  221. package/model/postingTimesDaysInner.ts +2 -2
  222. package/model/preflightResult.ts +69 -0
  223. package/model/publicWorkspace.ts +2 -2
  224. package/model/publicWorkspacePivot.ts +2 -2
  225. package/model/publishProgress.ts +2 -2
  226. package/model/queueSlots.ts +43 -0
  227. package/model/receipt.ts +2 -2
  228. package/model/receiptInput.ts +2 -2
  229. package/model/receiptUpdateInput.ts +2 -2
  230. package/model/recommendedPostingTimes.ts +61 -0
  231. package/model/reconnectLink.ts +46 -0
  232. package/model/recyclingRule.ts +117 -0
  233. package/model/recyclingRuleInput.ts +114 -0
  234. package/model/recyclingRuleSettings.ts +83 -0
  235. package/model/recyclingRuleUpdate.ts +71 -0
  236. package/model/recyclingRun.ts +71 -0
  237. package/model/removeGenericSubscription422Response.ts +2 -2
  238. package/model/removeUserFromWorkspaceRequest.ts +2 -2
  239. package/model/reportBranding.ts +61 -0
  240. package/model/reportBrandingInput.ts +55 -0
  241. package/model/reportExport.ts +121 -0
  242. package/model/reportExportInput.ts +91 -0
  243. package/model/repurposeContent200Response.ts +39 -0
  244. package/model/repurposeInput.ts +213 -0
  245. package/model/repurposeInputTheme.ts +46 -0
  246. package/model/repurposeResult.ts +89 -0
  247. package/model/repurposeResultMedia.ts +40 -0
  248. package/model/repurposeResultSource.ts +51 -0
  249. package/model/repurposeSlide.ts +43 -0
  250. package/model/resellerClient.ts +82 -0
  251. package/model/resellerClientInput.ts +31 -0
  252. package/model/resellerClientUsage.ts +43 -0
  253. package/model/retryPostAccountResult.ts +2 -2
  254. package/model/rssFeed.ts +100 -0
  255. package/model/rssFeedInput.ts +79 -0
  256. package/model/rssFeedUpdate.ts +73 -0
  257. package/model/runAgent202Response.ts +32 -0
  258. package/model/schedulePostRequest.ts +2 -2
  259. package/model/scheduleResult.ts +2 -2
  260. package/model/subscription.ts +2 -2
  261. package/model/subscriptionInput.ts +2 -2
  262. package/model/subscriptionStatus.ts +2 -2
  263. package/model/subscriptionUpdateInput.ts +2 -2
  264. package/model/tag.ts +2 -2
  265. package/model/tagInput.ts +2 -2
  266. package/model/template.ts +47 -0
  267. package/model/templateContentItem.ts +40 -0
  268. package/model/templateInput.ts +41 -0
  269. package/model/templateInputContentInner.ts +40 -0
  270. package/model/updateMediaRequest.ts +2 -2
  271. package/model/uploadChunk201Response.ts +2 -2
  272. package/model/user.ts +2 -2
  273. package/model/userInput.ts +2 -2
  274. package/model/userUpdateInput.ts +2 -2
  275. package/model/webhookEventName.ts +31 -0
  276. package/model/webhookEventPayload.ts +43 -0
  277. package/model/webhookSubscription.ts +61 -0
  278. package/model/webhookSubscriptionInput.ts +67 -0
  279. package/model/workspace.ts +2 -2
  280. package/model/workspaceAgent.ts +91 -0
  281. package/model/workspaceAgentInput.ts +67 -0
  282. package/model/workspaceAgentSettings.ts +70 -0
  283. package/model/workspaceAgentUpdate.ts +58 -0
  284. package/model/workspaceInput.ts +2 -2
  285. package/model/workspaceUserInput.ts +2 -2
  286. package/model/xUsage.ts +68 -0
  287. package/model/xUsageCounter.ts +40 -0
  288. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * PostBoost API
3
- * The PostBoost REST API lets you publish, schedule, and analyze social media posts across 12+ platforms from a single integration. No OAuth apps to maintain — PostBoost handles platform authorization for you. ## Base URL All workspace-scoped endpoints are prefixed with `/{workspaceUuid}`. Panel/admin endpoints are prefixed with `/panel`. ## Plan access Every workspace-scoped endpoint returns `403` when the workspace\'s plan does not include API access (capability `api`). ## Dates and times Post dates and times (`date`, `time`, `accounts_schedule`) are read in the request\'s `timezone` when one is given, otherwise in the workspace timezone. ## Authentication All requests require a Bearer token in the `Authorization` header. Generate tokens in your PostBoost dashboard under **Settings → Access Tokens**. ``` Authorization: Bearer YOUR_API_TOKEN ```
3
+ * The PostBoost REST API lets you publish, schedule, and analyze social media posts across 12+ platforms from a single integration. No OAuth apps to maintain — PostBoost handles platform authorization for you. ## Base URL All workspace-scoped endpoints are prefixed with `/{workspaceUuid}`. Panel/admin endpoints are prefixed with `/panel`. ## Plan access Every workspace-scoped endpoint returns `403` when the workspace\'s plan does not include API access (capability `api`). ## Dates and times Post dates and times (`date`, `time`, `accounts_schedule`) are read in the request\'s `timezone` when one is given, otherwise in the workspace timezone. ## Idempotent requests Send an `Idempotency-Key` header (any unique string, for example a UUID) with a `POST`. Repeating the request with the same key within 24 hours returns the stored response with `Idempotent-Replayed: true` and creates nothing new. Reusing a key with a different body returns `422`; a request still in progress with the same key returns `409`. `5xx` and `429` responses are not stored, so they can be retried with the same key. ## Guardrails for automated clients Create and update requests are checked before anything is written: a post whose content matches one created for the same account in the last 24 hours returns `409` (`code: duplicate_post`, override with `allow_duplicate: true`), scheduling past an account\'s daily cap returns `429` (`code: account_daily_cap_reached`), and scheduling to an account that must be reconnected returns `422` (`code: account_unauthorized` or `account_token_missing`). Use `POST /{workspaceUuid}/posts/validate` for a dry run and `GET /{workspaceUuid}/activity` to review what API clients did. ## Authentication All requests require a Bearer token in the `Authorization` header. Generate tokens in your PostBoost dashboard under **Settings → Access Tokens**. ``` Authorization: Bearer YOUR_API_TOKEN ```
4
4
  *
5
- * The version of the OpenAPI document: 1.8.0
5
+ * The version of the OpenAPI document: 1.14.0
6
6
  * Contact: hi@postboost.co
7
7
  *
8
8
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -16,13 +16,21 @@ import http from 'http';
16
16
 
17
17
  /* tslint:disable:no-unused-locals */
18
18
  import { AICredits } from '../model/aICredits';
19
+ import { ApiKeyInput } from '../model/apiKeyInput';
20
+ import { CodedError } from '../model/codedError';
21
+ import { CreateApiKey201Response } from '../model/createApiKey201Response';
22
+ import { CreateResellerClient201Response } from '../model/createResellerClient201Response';
19
23
  import { DeleteWorkspacesBulkRequest } from '../model/deleteWorkspacesBulkRequest';
24
+ import { ListApiKeys200Response } from '../model/listApiKeys200Response';
20
25
  import { ListMyWorkspaces200Response } from '../model/listMyWorkspaces200Response';
26
+ import { ListResellerClients200Response } from '../model/listResellerClients200Response';
21
27
  import { ListWorkspaces200Response } from '../model/listWorkspaces200Response';
22
28
  import { RemoveUserFromWorkspaceRequest } from '../model/removeUserFromWorkspaceRequest';
29
+ import { ResellerClientInput } from '../model/resellerClientInput';
23
30
  import { Workspace } from '../model/workspace';
24
31
  import { WorkspaceInput } from '../model/workspaceInput';
25
32
  import { WorkspaceUserInput } from '../model/workspaceUserInput';
33
+ import { XUsage } from '../model/xUsage';
26
34
 
27
35
  import { ObjectSerializer, Authentication, VoidAuth, Interceptor } from '../model/models';
28
36
  import { HttpBasicAuth, HttpBearerAuth, ApiKeyAuth, OAuth } from '../model/models';
@@ -178,6 +186,164 @@ export class WorkspacesApi {
178
186
  });
179
187
  });
180
188
  }
189
+ /**
190
+ * Creates a least-privilege API key for the calling user, bound to this workspace. Pick the abilities it gets and, optionally, the accounts it may act on. The plain key is in `data.token` of this response only; store it safely. | Ability | Allows | |---|---| | `read` | Every `GET`, plus the `posts/validate` dry run | | `write` | Creating and changing drafts, media, tags, mentions, the brand voice | | `publish` | Scheduling, queueing, publishing now, approving and retrying posts, and editing a post that is already scheduled | | `ai` | The `/ai/_*` endpoints, running agents and turning on agent AI review (they also need AI credits) | | `webhooks` | Webhook subscription endpoints | A scoped key is refused on other workspaces, on the admin panel, on API key management and on the app\'s built-in MCP endpoint (use `/mcp/postboost`). With `account_ids`, it may only name those accounts (in the URL, `accounts`, `account_ids` or post versions), cannot touch posts on other accounts, and `GET accounts` / `GET posts` only list matching items (pagination counts are computed before that filter). Workspace admins only, called with an unscoped key.
191
+ * @summary Create a scoped API key
192
+ * @param workspaceUuid UUID of the workspace.
193
+ * @param apiKeyInput
194
+ */
195
+ public async createApiKey (workspaceUuid: string, apiKeyInput: ApiKeyInput, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: CreateApiKey201Response; }> {
196
+ const localVarPath = this.basePath + '/{workspaceUuid}/api-keys'
197
+ .replace('{' + 'workspaceUuid' + '}', encodeURIComponent(String(workspaceUuid)));
198
+ let localVarQueryParameters: any = {};
199
+ let localVarHeaderParams: any = (<any>Object).assign({}, this._defaultHeaders);
200
+ const produces = ['application/json'];
201
+ // give precedence to 'application/json'
202
+ if (produces.indexOf('application/json') >= 0) {
203
+ localVarHeaderParams.Accept = 'application/json';
204
+ } else {
205
+ localVarHeaderParams.Accept = produces.join(',');
206
+ }
207
+ let localVarFormParams: any = {};
208
+
209
+ // verify required parameter 'workspaceUuid' is not null or undefined
210
+ if (workspaceUuid === null || workspaceUuid === undefined) {
211
+ throw new Error('Required parameter workspaceUuid was null or undefined when calling createApiKey.');
212
+ }
213
+
214
+ // verify required parameter 'apiKeyInput' is not null or undefined
215
+ if (apiKeyInput === null || apiKeyInput === undefined) {
216
+ throw new Error('Required parameter apiKeyInput was null or undefined when calling createApiKey.');
217
+ }
218
+
219
+ (<any>Object).assign(localVarHeaderParams, options.headers);
220
+
221
+ let localVarUseFormData = false;
222
+
223
+ let localVarRequestOptions: localVarRequest.Options = {
224
+ method: 'POST',
225
+ qs: localVarQueryParameters,
226
+ headers: localVarHeaderParams,
227
+ uri: localVarPath,
228
+ useQuerystring: this._useQuerystring,
229
+ json: true,
230
+ body: ObjectSerializer.serialize(apiKeyInput, "ApiKeyInput")
231
+ };
232
+
233
+ let authenticationPromise = Promise.resolve();
234
+ if (this.authentications.bearerAuth.accessToken) {
235
+ authenticationPromise = authenticationPromise.then(() => this.authentications.bearerAuth.applyToRequest(localVarRequestOptions));
236
+ }
237
+ authenticationPromise = authenticationPromise.then(() => this.authentications.default.applyToRequest(localVarRequestOptions));
238
+
239
+ let interceptorPromise = authenticationPromise;
240
+ for (const interceptor of this.interceptors) {
241
+ interceptorPromise = interceptorPromise.then(() => interceptor(localVarRequestOptions));
242
+ }
243
+
244
+ return interceptorPromise.then(() => {
245
+ if (Object.keys(localVarFormParams).length) {
246
+ if (localVarUseFormData) {
247
+ (<any>localVarRequestOptions).formData = localVarFormParams;
248
+ } else {
249
+ localVarRequestOptions.form = localVarFormParams;
250
+ }
251
+ }
252
+ return new Promise<{ response: http.IncomingMessage; body: CreateApiKey201Response; }>((resolve, reject) => {
253
+ localVarRequest(localVarRequestOptions, (error, response, body) => {
254
+ if (error) {
255
+ reject(error);
256
+ } else {
257
+ if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
258
+ body = ObjectSerializer.deserialize(body, "CreateApiKey201Response");
259
+ resolve({ response: response, body: body });
260
+ } else {
261
+ reject(new HttpError(response, body, response.statusCode));
262
+ }
263
+ }
264
+ });
265
+ });
266
+ });
267
+ }
268
+ /**
269
+ * Creates a client workspace on the Reseller client plan, with the caller as its owner and admin, and links it to this workspace. Fails with `422` and `code: client_limit_reached` once the plan\'s client limit is used (archived clients do not count). Archive clients on the Client workspaces page. Workspace admins with an unscoped key only.
270
+ * @summary Create a client workspace
271
+ * @param workspaceUuid UUID of the workspace.
272
+ * @param resellerClientInput
273
+ */
274
+ public async createResellerClient (workspaceUuid: string, resellerClientInput: ResellerClientInput, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: CreateResellerClient201Response; }> {
275
+ const localVarPath = this.basePath + '/{workspaceUuid}/clients'
276
+ .replace('{' + 'workspaceUuid' + '}', encodeURIComponent(String(workspaceUuid)));
277
+ let localVarQueryParameters: any = {};
278
+ let localVarHeaderParams: any = (<any>Object).assign({}, this._defaultHeaders);
279
+ const produces = ['application/json'];
280
+ // give precedence to 'application/json'
281
+ if (produces.indexOf('application/json') >= 0) {
282
+ localVarHeaderParams.Accept = 'application/json';
283
+ } else {
284
+ localVarHeaderParams.Accept = produces.join(',');
285
+ }
286
+ let localVarFormParams: any = {};
287
+
288
+ // verify required parameter 'workspaceUuid' is not null or undefined
289
+ if (workspaceUuid === null || workspaceUuid === undefined) {
290
+ throw new Error('Required parameter workspaceUuid was null or undefined when calling createResellerClient.');
291
+ }
292
+
293
+ // verify required parameter 'resellerClientInput' is not null or undefined
294
+ if (resellerClientInput === null || resellerClientInput === undefined) {
295
+ throw new Error('Required parameter resellerClientInput was null or undefined when calling createResellerClient.');
296
+ }
297
+
298
+ (<any>Object).assign(localVarHeaderParams, options.headers);
299
+
300
+ let localVarUseFormData = false;
301
+
302
+ let localVarRequestOptions: localVarRequest.Options = {
303
+ method: 'POST',
304
+ qs: localVarQueryParameters,
305
+ headers: localVarHeaderParams,
306
+ uri: localVarPath,
307
+ useQuerystring: this._useQuerystring,
308
+ json: true,
309
+ body: ObjectSerializer.serialize(resellerClientInput, "ResellerClientInput")
310
+ };
311
+
312
+ let authenticationPromise = Promise.resolve();
313
+ if (this.authentications.bearerAuth.accessToken) {
314
+ authenticationPromise = authenticationPromise.then(() => this.authentications.bearerAuth.applyToRequest(localVarRequestOptions));
315
+ }
316
+ authenticationPromise = authenticationPromise.then(() => this.authentications.default.applyToRequest(localVarRequestOptions));
317
+
318
+ let interceptorPromise = authenticationPromise;
319
+ for (const interceptor of this.interceptors) {
320
+ interceptorPromise = interceptorPromise.then(() => interceptor(localVarRequestOptions));
321
+ }
322
+
323
+ return interceptorPromise.then(() => {
324
+ if (Object.keys(localVarFormParams).length) {
325
+ if (localVarUseFormData) {
326
+ (<any>localVarRequestOptions).formData = localVarFormParams;
327
+ } else {
328
+ localVarRequestOptions.form = localVarFormParams;
329
+ }
330
+ }
331
+ return new Promise<{ response: http.IncomingMessage; body: CreateResellerClient201Response; }>((resolve, reject) => {
332
+ localVarRequest(localVarRequestOptions, (error, response, body) => {
333
+ if (error) {
334
+ reject(error);
335
+ } else {
336
+ if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
337
+ body = ObjectSerializer.deserialize(body, "CreateResellerClient201Response");
338
+ resolve({ response: response, body: body });
339
+ } else {
340
+ reject(new HttpError(response, body, response.statusCode));
341
+ }
342
+ }
343
+ });
344
+ });
345
+ });
346
+ }
181
347
  /**
182
348
  * Create a new workspace. Admin only.
183
349
  * @summary Create workspace
@@ -250,6 +416,85 @@ export class WorkspacesApi {
250
416
  });
251
417
  });
252
418
  }
419
+ /**
420
+ * Revokes a scoped key bound to this workspace. It stops working at once. Workspace admins only, called with an unscoped key.
421
+ * @summary Revoke a scoped API key
422
+ * @param workspaceUuid UUID of the workspace.
423
+ * @param apiKeyId The key\&#39;s &#x60;id&#x60; from &#x60;GET api-keys&#x60;.
424
+ */
425
+ public async deleteApiKey (workspaceUuid: string, apiKeyId: number, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: object; }> {
426
+ const localVarPath = this.basePath + '/{workspaceUuid}/api-keys/{apiKeyId}'
427
+ .replace('{' + 'workspaceUuid' + '}', encodeURIComponent(String(workspaceUuid)))
428
+ .replace('{' + 'apiKeyId' + '}', encodeURIComponent(String(apiKeyId)));
429
+ let localVarQueryParameters: any = {};
430
+ let localVarHeaderParams: any = (<any>Object).assign({}, this._defaultHeaders);
431
+ const produces = ['application/json'];
432
+ // give precedence to 'application/json'
433
+ if (produces.indexOf('application/json') >= 0) {
434
+ localVarHeaderParams.Accept = 'application/json';
435
+ } else {
436
+ localVarHeaderParams.Accept = produces.join(',');
437
+ }
438
+ let localVarFormParams: any = {};
439
+
440
+ // verify required parameter 'workspaceUuid' is not null or undefined
441
+ if (workspaceUuid === null || workspaceUuid === undefined) {
442
+ throw new Error('Required parameter workspaceUuid was null or undefined when calling deleteApiKey.');
443
+ }
444
+
445
+ // verify required parameter 'apiKeyId' is not null or undefined
446
+ if (apiKeyId === null || apiKeyId === undefined) {
447
+ throw new Error('Required parameter apiKeyId was null or undefined when calling deleteApiKey.');
448
+ }
449
+
450
+ (<any>Object).assign(localVarHeaderParams, options.headers);
451
+
452
+ let localVarUseFormData = false;
453
+
454
+ let localVarRequestOptions: localVarRequest.Options = {
455
+ method: 'DELETE',
456
+ qs: localVarQueryParameters,
457
+ headers: localVarHeaderParams,
458
+ uri: localVarPath,
459
+ useQuerystring: this._useQuerystring,
460
+ json: true,
461
+ };
462
+
463
+ let authenticationPromise = Promise.resolve();
464
+ if (this.authentications.bearerAuth.accessToken) {
465
+ authenticationPromise = authenticationPromise.then(() => this.authentications.bearerAuth.applyToRequest(localVarRequestOptions));
466
+ }
467
+ authenticationPromise = authenticationPromise.then(() => this.authentications.default.applyToRequest(localVarRequestOptions));
468
+
469
+ let interceptorPromise = authenticationPromise;
470
+ for (const interceptor of this.interceptors) {
471
+ interceptorPromise = interceptorPromise.then(() => interceptor(localVarRequestOptions));
472
+ }
473
+
474
+ return interceptorPromise.then(() => {
475
+ if (Object.keys(localVarFormParams).length) {
476
+ if (localVarUseFormData) {
477
+ (<any>localVarRequestOptions).formData = localVarFormParams;
478
+ } else {
479
+ localVarRequestOptions.form = localVarFormParams;
480
+ }
481
+ }
482
+ return new Promise<{ response: http.IncomingMessage; body: object; }>((resolve, reject) => {
483
+ localVarRequest(localVarRequestOptions, (error, response, body) => {
484
+ if (error) {
485
+ reject(error);
486
+ } else {
487
+ if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
488
+ body = ObjectSerializer.deserialize(body, "object");
489
+ resolve({ response: response, body: body });
490
+ } else {
491
+ reject(new HttpError(response, body, response.statusCode));
492
+ }
493
+ }
494
+ });
495
+ });
496
+ });
497
+ }
253
498
  /**
254
499
  * Permanently deletes a single workspace and all its associated data. Admin only.
255
500
  * @summary Delete workspace
@@ -538,6 +783,150 @@ export class WorkspacesApi {
538
783
  });
539
784
  });
540
785
  }
786
+ /**
787
+ * The workspace\'s X posts this calendar month (UTC) against its monthly X allowance. Every thread part is one X post; a part with a link also counts as a link post. When the allowance is used up, scheduling to X is refused (`429`, `code: x_monthly_cap_reached`) and X posts that come due fail with \"Monthly X allowance reached\". Other networks are not affected. See the X policy in the developer docs.
788
+ * @summary X (Twitter) usage
789
+ * @param workspaceUuid UUID of the workspace.
790
+ */
791
+ public async getXUsage (workspaceUuid: string, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: XUsage; }> {
792
+ const localVarPath = this.basePath + '/{workspaceUuid}/usage/x'
793
+ .replace('{' + 'workspaceUuid' + '}', encodeURIComponent(String(workspaceUuid)));
794
+ let localVarQueryParameters: any = {};
795
+ let localVarHeaderParams: any = (<any>Object).assign({}, this._defaultHeaders);
796
+ const produces = ['application/json'];
797
+ // give precedence to 'application/json'
798
+ if (produces.indexOf('application/json') >= 0) {
799
+ localVarHeaderParams.Accept = 'application/json';
800
+ } else {
801
+ localVarHeaderParams.Accept = produces.join(',');
802
+ }
803
+ let localVarFormParams: any = {};
804
+
805
+ // verify required parameter 'workspaceUuid' is not null or undefined
806
+ if (workspaceUuid === null || workspaceUuid === undefined) {
807
+ throw new Error('Required parameter workspaceUuid was null or undefined when calling getXUsage.');
808
+ }
809
+
810
+ (<any>Object).assign(localVarHeaderParams, options.headers);
811
+
812
+ let localVarUseFormData = false;
813
+
814
+ let localVarRequestOptions: localVarRequest.Options = {
815
+ method: 'GET',
816
+ qs: localVarQueryParameters,
817
+ headers: localVarHeaderParams,
818
+ uri: localVarPath,
819
+ useQuerystring: this._useQuerystring,
820
+ json: true,
821
+ };
822
+
823
+ let authenticationPromise = Promise.resolve();
824
+ if (this.authentications.bearerAuth.accessToken) {
825
+ authenticationPromise = authenticationPromise.then(() => this.authentications.bearerAuth.applyToRequest(localVarRequestOptions));
826
+ }
827
+ authenticationPromise = authenticationPromise.then(() => this.authentications.default.applyToRequest(localVarRequestOptions));
828
+
829
+ let interceptorPromise = authenticationPromise;
830
+ for (const interceptor of this.interceptors) {
831
+ interceptorPromise = interceptorPromise.then(() => interceptor(localVarRequestOptions));
832
+ }
833
+
834
+ return interceptorPromise.then(() => {
835
+ if (Object.keys(localVarFormParams).length) {
836
+ if (localVarUseFormData) {
837
+ (<any>localVarRequestOptions).formData = localVarFormParams;
838
+ } else {
839
+ localVarRequestOptions.form = localVarFormParams;
840
+ }
841
+ }
842
+ return new Promise<{ response: http.IncomingMessage; body: XUsage; }>((resolve, reject) => {
843
+ localVarRequest(localVarRequestOptions, (error, response, body) => {
844
+ if (error) {
845
+ reject(error);
846
+ } else {
847
+ if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
848
+ body = ObjectSerializer.deserialize(body, "XUsage");
849
+ resolve({ response: response, body: body });
850
+ } else {
851
+ reject(new HttpError(response, body, response.statusCode));
852
+ }
853
+ }
854
+ });
855
+ });
856
+ });
857
+ }
858
+ /**
859
+ * Scoped API keys bound to this workspace, newest first. The secret is never shown again after creation. Workspace admins only, called with an unscoped key (a scoped key gets `403` with `code: insufficient_scope`).
860
+ * @summary List scoped API keys
861
+ * @param workspaceUuid UUID of the workspace.
862
+ */
863
+ public async listApiKeys (workspaceUuid: string, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: ListApiKeys200Response; }> {
864
+ const localVarPath = this.basePath + '/{workspaceUuid}/api-keys'
865
+ .replace('{' + 'workspaceUuid' + '}', encodeURIComponent(String(workspaceUuid)));
866
+ let localVarQueryParameters: any = {};
867
+ let localVarHeaderParams: any = (<any>Object).assign({}, this._defaultHeaders);
868
+ const produces = ['application/json'];
869
+ // give precedence to 'application/json'
870
+ if (produces.indexOf('application/json') >= 0) {
871
+ localVarHeaderParams.Accept = 'application/json';
872
+ } else {
873
+ localVarHeaderParams.Accept = produces.join(',');
874
+ }
875
+ let localVarFormParams: any = {};
876
+
877
+ // verify required parameter 'workspaceUuid' is not null or undefined
878
+ if (workspaceUuid === null || workspaceUuid === undefined) {
879
+ throw new Error('Required parameter workspaceUuid was null or undefined when calling listApiKeys.');
880
+ }
881
+
882
+ (<any>Object).assign(localVarHeaderParams, options.headers);
883
+
884
+ let localVarUseFormData = false;
885
+
886
+ let localVarRequestOptions: localVarRequest.Options = {
887
+ method: 'GET',
888
+ qs: localVarQueryParameters,
889
+ headers: localVarHeaderParams,
890
+ uri: localVarPath,
891
+ useQuerystring: this._useQuerystring,
892
+ json: true,
893
+ };
894
+
895
+ let authenticationPromise = Promise.resolve();
896
+ if (this.authentications.bearerAuth.accessToken) {
897
+ authenticationPromise = authenticationPromise.then(() => this.authentications.bearerAuth.applyToRequest(localVarRequestOptions));
898
+ }
899
+ authenticationPromise = authenticationPromise.then(() => this.authentications.default.applyToRequest(localVarRequestOptions));
900
+
901
+ let interceptorPromise = authenticationPromise;
902
+ for (const interceptor of this.interceptors) {
903
+ interceptorPromise = interceptorPromise.then(() => interceptor(localVarRequestOptions));
904
+ }
905
+
906
+ return interceptorPromise.then(() => {
907
+ if (Object.keys(localVarFormParams).length) {
908
+ if (localVarUseFormData) {
909
+ (<any>localVarRequestOptions).formData = localVarFormParams;
910
+ } else {
911
+ localVarRequestOptions.form = localVarFormParams;
912
+ }
913
+ }
914
+ return new Promise<{ response: http.IncomingMessage; body: ListApiKeys200Response; }>((resolve, reject) => {
915
+ localVarRequest(localVarRequestOptions, (error, response, body) => {
916
+ if (error) {
917
+ reject(error);
918
+ } else {
919
+ if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
920
+ body = ObjectSerializer.deserialize(body, "ListApiKeys200Response");
921
+ resolve({ response: response, body: body });
922
+ } else {
923
+ reject(new HttpError(response, body, response.statusCode));
924
+ }
925
+ }
926
+ });
927
+ });
928
+ });
929
+ }
541
930
  /**
542
931
  * Returns the workspaces the authenticated user belongs to, most recently updated first, with the caller\'s role in each. Use a returned `uuid` as `workspaceUuid`.
543
932
  * @summary List my workspaces
@@ -603,6 +992,78 @@ export class WorkspacesApi {
603
992
  });
604
993
  });
605
994
  }
995
+ /**
996
+ * Client workspaces this workspace created on the Reseller plan, active first, then archived. `accounts_needing_reconnect` counts accounts whose connection must be renewed. `meta` gives the active clients and the plan\'s client limit. Workspace admins with an unscoped key only; other workspaces get `403` with `code: not_a_reseller`.
997
+ * @summary List client workspaces
998
+ * @param workspaceUuid UUID of the workspace.
999
+ */
1000
+ public async listResellerClients (workspaceUuid: string, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: ListResellerClients200Response; }> {
1001
+ const localVarPath = this.basePath + '/{workspaceUuid}/clients'
1002
+ .replace('{' + 'workspaceUuid' + '}', encodeURIComponent(String(workspaceUuid)));
1003
+ let localVarQueryParameters: any = {};
1004
+ let localVarHeaderParams: any = (<any>Object).assign({}, this._defaultHeaders);
1005
+ const produces = ['application/json'];
1006
+ // give precedence to 'application/json'
1007
+ if (produces.indexOf('application/json') >= 0) {
1008
+ localVarHeaderParams.Accept = 'application/json';
1009
+ } else {
1010
+ localVarHeaderParams.Accept = produces.join(',');
1011
+ }
1012
+ let localVarFormParams: any = {};
1013
+
1014
+ // verify required parameter 'workspaceUuid' is not null or undefined
1015
+ if (workspaceUuid === null || workspaceUuid === undefined) {
1016
+ throw new Error('Required parameter workspaceUuid was null or undefined when calling listResellerClients.');
1017
+ }
1018
+
1019
+ (<any>Object).assign(localVarHeaderParams, options.headers);
1020
+
1021
+ let localVarUseFormData = false;
1022
+
1023
+ let localVarRequestOptions: localVarRequest.Options = {
1024
+ method: 'GET',
1025
+ qs: localVarQueryParameters,
1026
+ headers: localVarHeaderParams,
1027
+ uri: localVarPath,
1028
+ useQuerystring: this._useQuerystring,
1029
+ json: true,
1030
+ };
1031
+
1032
+ let authenticationPromise = Promise.resolve();
1033
+ if (this.authentications.bearerAuth.accessToken) {
1034
+ authenticationPromise = authenticationPromise.then(() => this.authentications.bearerAuth.applyToRequest(localVarRequestOptions));
1035
+ }
1036
+ authenticationPromise = authenticationPromise.then(() => this.authentications.default.applyToRequest(localVarRequestOptions));
1037
+
1038
+ let interceptorPromise = authenticationPromise;
1039
+ for (const interceptor of this.interceptors) {
1040
+ interceptorPromise = interceptorPromise.then(() => interceptor(localVarRequestOptions));
1041
+ }
1042
+
1043
+ return interceptorPromise.then(() => {
1044
+ if (Object.keys(localVarFormParams).length) {
1045
+ if (localVarUseFormData) {
1046
+ (<any>localVarRequestOptions).formData = localVarFormParams;
1047
+ } else {
1048
+ localVarRequestOptions.form = localVarFormParams;
1049
+ }
1050
+ }
1051
+ return new Promise<{ response: http.IncomingMessage; body: ListResellerClients200Response; }>((resolve, reject) => {
1052
+ localVarRequest(localVarRequestOptions, (error, response, body) => {
1053
+ if (error) {
1054
+ reject(error);
1055
+ } else {
1056
+ if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
1057
+ body = ObjectSerializer.deserialize(body, "ListResellerClients200Response");
1058
+ resolve({ response: response, body: body });
1059
+ } else {
1060
+ reject(new HttpError(response, body, response.statusCode));
1061
+ }
1062
+ }
1063
+ });
1064
+ });
1065
+ });
1066
+ }
606
1067
  /**
607
1068
  * Returns a paginated list of all workspaces. Admin only.
608
1069
  * @summary List workspaces
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * PostBoost API
3
- * The PostBoost REST API lets you publish, schedule, and analyze social media posts across 12+ platforms from a single integration. No OAuth apps to maintain — PostBoost handles platform authorization for you. ## Base URL All workspace-scoped endpoints are prefixed with `/{workspaceUuid}`. Panel/admin endpoints are prefixed with `/panel`. ## Plan access Every workspace-scoped endpoint returns `403` when the workspace\'s plan does not include API access (capability `api`). ## Dates and times Post dates and times (`date`, `time`, `accounts_schedule`) are read in the request\'s `timezone` when one is given, otherwise in the workspace timezone. ## Authentication All requests require a Bearer token in the `Authorization` header. Generate tokens in your PostBoost dashboard under **Settings → Access Tokens**. ``` Authorization: Bearer YOUR_API_TOKEN ```
3
+ * The PostBoost REST API lets you publish, schedule, and analyze social media posts across 12+ platforms from a single integration. No OAuth apps to maintain — PostBoost handles platform authorization for you. ## Base URL All workspace-scoped endpoints are prefixed with `/{workspaceUuid}`. Panel/admin endpoints are prefixed with `/panel`. ## Plan access Every workspace-scoped endpoint returns `403` when the workspace\'s plan does not include API access (capability `api`). ## Dates and times Post dates and times (`date`, `time`, `accounts_schedule`) are read in the request\'s `timezone` when one is given, otherwise in the workspace timezone. ## Idempotent requests Send an `Idempotency-Key` header (any unique string, for example a UUID) with a `POST`. Repeating the request with the same key within 24 hours returns the stored response with `Idempotent-Replayed: true` and creates nothing new. Reusing a key with a different body returns `422`; a request still in progress with the same key returns `409`. `5xx` and `429` responses are not stored, so they can be retried with the same key. ## Guardrails for automated clients Create and update requests are checked before anything is written: a post whose content matches one created for the same account in the last 24 hours returns `409` (`code: duplicate_post`, override with `allow_duplicate: true`), scheduling past an account\'s daily cap returns `429` (`code: account_daily_cap_reached`), and scheduling to an account that must be reconnected returns `422` (`code: account_unauthorized` or `account_token_missing`). Use `POST /{workspaceUuid}/posts/validate` for a dry run and `GET /{workspaceUuid}/activity` to review what API clients did. ## Authentication All requests require a Bearer token in the `Authorization` header. Generate tokens in your PostBoost dashboard under **Settings → Access Tokens**. ``` Authorization: Bearer YOUR_API_TOKEN ```
4
4
  *
5
- * The version of the OpenAPI document: 1.8.0
5
+ * The version of the OpenAPI document: 1.14.0
6
6
  * Contact: hi@postboost.co
7
7
  *
8
8
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -0,0 +1,39 @@
1
+ /**
2
+ * PostBoost API
3
+ * The PostBoost REST API lets you publish, schedule, and analyze social media posts across 12+ platforms from a single integration. No OAuth apps to maintain — PostBoost handles platform authorization for you. ## Base URL All workspace-scoped endpoints are prefixed with `/{workspaceUuid}`. Panel/admin endpoints are prefixed with `/panel`. ## Plan access Every workspace-scoped endpoint returns `403` when the workspace\'s plan does not include API access (capability `api`). ## Dates and times Post dates and times (`date`, `time`, `accounts_schedule`) are read in the request\'s `timezone` when one is given, otherwise in the workspace timezone. ## Idempotent requests Send an `Idempotency-Key` header (any unique string, for example a UUID) with a `POST`. Repeating the request with the same key within 24 hours returns the stored response with `Idempotent-Replayed: true` and creates nothing new. Reusing a key with a different body returns `422`; a request still in progress with the same key returns `409`. `5xx` and `429` responses are not stored, so they can be retried with the same key. ## Guardrails for automated clients Create and update requests are checked before anything is written: a post whose content matches one created for the same account in the last 24 hours returns `409` (`code: duplicate_post`, override with `allow_duplicate: true`), scheduling past an account\'s daily cap returns `429` (`code: account_daily_cap_reached`), and scheduling to an account that must be reconnected returns `422` (`code: account_unauthorized` or `account_token_missing`). Use `POST /{workspaceUuid}/posts/validate` for a dry run and `GET /{workspaceUuid}/activity` to review what API clients did. ## Authentication All requests require a Bearer token in the `Authorization` header. Generate tokens in your PostBoost dashboard under **Settings → Access Tokens**. ``` Authorization: Bearer YOUR_API_TOKEN ```
4
+ *
5
+ * The version of the OpenAPI document: 1.14.0
6
+ * Contact: hi@postboost.co
7
+ *
8
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
9
+ * https://openapi-generator.tech
10
+ * Do not edit the class manually.
11
+ */
12
+
13
+ import { RequestFile } from './models';
14
+ import { AIUsageText } from './aIUsageText';
15
+ import { ImageCreditBalance } from './imageCreditBalance';
16
+
17
+ export class AIUsage {
18
+ 'text': AIUsageText;
19
+ 'image': ImageCreditBalance;
20
+
21
+ static discriminator: string | undefined = undefined;
22
+
23
+ static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [
24
+ {
25
+ "name": "text",
26
+ "baseName": "text",
27
+ "type": "AIUsageText"
28
+ },
29
+ {
30
+ "name": "image",
31
+ "baseName": "image",
32
+ "type": "ImageCreditBalance"
33
+ } ];
34
+
35
+ static getAttributeTypeMap() {
36
+ return AIUsage.attributeTypeMap;
37
+ }
38
+ }
39
+
@@ -0,0 +1,52 @@
1
+ /**
2
+ * PostBoost API
3
+ * The PostBoost REST API lets you publish, schedule, and analyze social media posts across 12+ platforms from a single integration. No OAuth apps to maintain — PostBoost handles platform authorization for you. ## Base URL All workspace-scoped endpoints are prefixed with `/{workspaceUuid}`. Panel/admin endpoints are prefixed with `/panel`. ## Plan access Every workspace-scoped endpoint returns `403` when the workspace\'s plan does not include API access (capability `api`). ## Dates and times Post dates and times (`date`, `time`, `accounts_schedule`) are read in the request\'s `timezone` when one is given, otherwise in the workspace timezone. ## Idempotent requests Send an `Idempotency-Key` header (any unique string, for example a UUID) with a `POST`. Repeating the request with the same key within 24 hours returns the stored response with `Idempotent-Replayed: true` and creates nothing new. Reusing a key with a different body returns `422`; a request still in progress with the same key returns `409`. `5xx` and `429` responses are not stored, so they can be retried with the same key. ## Guardrails for automated clients Create and update requests are checked before anything is written: a post whose content matches one created for the same account in the last 24 hours returns `409` (`code: duplicate_post`, override with `allow_duplicate: true`), scheduling past an account\'s daily cap returns `429` (`code: account_daily_cap_reached`), and scheduling to an account that must be reconnected returns `422` (`code: account_unauthorized` or `account_token_missing`). Use `POST /{workspaceUuid}/posts/validate` for a dry run and `GET /{workspaceUuid}/activity` to review what API clients did. ## Authentication All requests require a Bearer token in the `Authorization` header. Generate tokens in your PostBoost dashboard under **Settings → Access Tokens**. ``` Authorization: Bearer YOUR_API_TOKEN ```
4
+ *
5
+ * The version of the OpenAPI document: 1.14.0
6
+ * Contact: hi@postboost.co
7
+ *
8
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
9
+ * https://openapi-generator.tech
10
+ * Do not edit the class manually.
11
+ */
12
+
13
+ import { RequestFile } from './models';
14
+
15
+ export class AIUsageText {
16
+ /**
17
+ * `null` when the workspace has no text credit limit.
18
+ */
19
+ 'used': number | null;
20
+ 'limit': number | null;
21
+ 'remaining': number | null;
22
+ 'cycleStartedAt'?: Date | null;
23
+
24
+ static discriminator: string | undefined = undefined;
25
+
26
+ static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [
27
+ {
28
+ "name": "used",
29
+ "baseName": "used",
30
+ "type": "number"
31
+ },
32
+ {
33
+ "name": "limit",
34
+ "baseName": "limit",
35
+ "type": "number"
36
+ },
37
+ {
38
+ "name": "remaining",
39
+ "baseName": "remaining",
40
+ "type": "number"
41
+ },
42
+ {
43
+ "name": "cycleStartedAt",
44
+ "baseName": "cycle_started_at",
45
+ "type": "Date"
46
+ } ];
47
+
48
+ static getAttributeTypeMap() {
49
+ return AIUsageText.attributeTypeMap;
50
+ }
51
+ }
52
+