insforge 1.2.10 → 1.3.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 (335) hide show
  1. package/.claude-plugin/marketplace.json +20 -20
  2. package/.dockerignore +60 -60
  3. package/.env.example +83 -77
  4. package/.github/ISSUE_TEMPLATE/bug_report.yml +36 -36
  5. package/.github/ISSUE_TEMPLATE/config.yml +11 -11
  6. package/.github/ISSUE_TEMPLATE/feature_request.yml +26 -26
  7. package/.github/PULL_REQUEST_TEMPLATE.md +7 -7
  8. package/.github/copilot-instructions.md +146 -146
  9. package/.github/workflows/build-image.yml +65 -65
  10. package/.github/workflows/ci-premerge-check.yml +23 -23
  11. package/.github/workflows/e2e.yml +63 -63
  12. package/.github/workflows/lint-and-format.yml +32 -32
  13. package/.prettierignore +64 -64
  14. package/CHANGELOG.md +44 -44
  15. package/CLAUDE_PLUGIN.md +104 -104
  16. package/CODE_OF_CONDUCT.md +128 -128
  17. package/CONTRIBUTING.md +125 -125
  18. package/Dockerfile +30 -30
  19. package/GITHUB_OAUTH_SETUP.md +49 -49
  20. package/GOOGLE_OAUTH_SETUP.md +148 -148
  21. package/LICENSE +201 -201
  22. package/README.md +182 -182
  23. package/assets/Dark.svg +23 -23
  24. package/auth/package.json +28 -28
  25. package/auth/src/lib/broadcastService.ts +117 -115
  26. package/auth/src/pages/SignInPage.tsx +60 -57
  27. package/auth/src/pages/SignUpPage.tsx +60 -57
  28. package/auth/tsconfig.json +32 -32
  29. package/auth/tsconfig.node.json +11 -11
  30. package/backend/package.json +78 -75
  31. package/backend/src/api/routes/ai/index.routes.ts +3 -3
  32. package/backend/src/api/routes/auth/index.routes.ts +667 -570
  33. package/backend/src/api/routes/auth/oauth.routes.ts +473 -448
  34. package/backend/src/api/routes/database/advance.routes.ts +37 -16
  35. package/backend/src/api/routes/database/index.routes.ts +78 -1
  36. package/backend/src/api/routes/database/records.routes.ts +10 -10
  37. package/backend/src/api/routes/database/tables.routes.ts +0 -14
  38. package/backend/src/api/routes/docs/index.routes.ts +75 -76
  39. package/backend/src/api/routes/email/index.routes.ts +35 -0
  40. package/backend/src/api/routes/functions/index.routes.ts +18 -12
  41. package/backend/src/api/routes/metadata/index.routes.ts +12 -0
  42. package/backend/src/api/routes/realtime/channels.routes.ts +81 -0
  43. package/backend/src/api/routes/realtime/index.routes.ts +12 -0
  44. package/backend/src/api/routes/realtime/messages.routes.ts +48 -0
  45. package/backend/src/api/routes/realtime/permissions.routes.ts +19 -0
  46. package/backend/src/api/routes/storage/index.routes.ts +18 -12
  47. package/backend/src/api/routes/usage/index.routes.ts +6 -4
  48. package/backend/src/infra/database/database.manager.ts +14 -1
  49. package/backend/src/infra/database/migrations/000_create-base-tables.sql +141 -141
  50. package/backend/src/infra/database/migrations/001_create-helper-functions.sql +40 -40
  51. package/backend/src/infra/database/migrations/002_rename-auth-tables.sql +29 -29
  52. package/backend/src/infra/database/migrations/003_create-users-table.sql +55 -55
  53. package/backend/src/infra/database/migrations/004_add-reload-postgrest-func.sql +23 -23
  54. package/backend/src/infra/database/migrations/005_enable-project-admin-modify-users.sql +29 -29
  55. package/backend/src/infra/database/migrations/006_modify-ai-usage-table.sql +24 -24
  56. package/backend/src/infra/database/migrations/007_drop-metadata-table.sql +1 -1
  57. package/backend/src/infra/database/migrations/008_add-system-tables.sql +76 -76
  58. package/backend/src/infra/database/migrations/009_add-function-secrets.sql +23 -23
  59. package/backend/src/infra/database/migrations/010_modify-ai-config-modalities.sql +93 -93
  60. package/backend/src/infra/database/migrations/011_refactor-secrets-table.sql +15 -15
  61. package/backend/src/infra/database/migrations/012_add-storage-uploaded-by.sql +7 -7
  62. package/backend/src/infra/database/migrations/013_create-auth-schema-functions.sql +44 -44
  63. package/backend/src/infra/database/migrations/014_add-updated-at-trigger-user-table.sql +7 -7
  64. package/backend/src/infra/database/migrations/015_create-auth-config-and-email-otp-tables.sql +59 -59
  65. package/backend/src/infra/database/migrations/016_update-auth-config-and-email-otp.sql +24 -24
  66. package/backend/src/infra/database/migrations/017_create-realtime-schema.sql +233 -0
  67. package/backend/src/infra/realtime/realtime.manager.ts +246 -0
  68. package/backend/src/infra/realtime/webhook-sender.ts +82 -0
  69. package/backend/src/infra/security/token.manager.ts +219 -125
  70. package/backend/src/infra/socket/socket.manager.ts +198 -64
  71. package/backend/src/providers/ai/openrouter.provider.ts +12 -9
  72. package/backend/src/providers/email/base.provider.ts +4 -7
  73. package/backend/src/providers/email/cloud.provider.ts +84 -0
  74. package/backend/src/providers/oauth/apple.provider.ts +266 -0
  75. package/backend/src/providers/oauth/index.ts +1 -0
  76. package/backend/src/server.ts +317 -284
  77. package/backend/src/services/ai/ai-model.service.ts +5 -5
  78. package/backend/src/services/ai/chat-completion.service.ts +4 -4
  79. package/backend/src/services/ai/image-generation.service.ts +3 -3
  80. package/backend/src/services/auth/auth.service.ts +14 -0
  81. package/backend/src/services/database/database-table.service.ts +0 -9
  82. package/backend/src/services/database/database.service.ts +127 -0
  83. package/backend/src/services/email/email.service.ts +5 -7
  84. package/backend/src/services/realtime/index.ts +3 -0
  85. package/backend/src/services/realtime/realtime-auth.service.ts +104 -0
  86. package/backend/src/services/realtime/realtime-channel.service.ts +237 -0
  87. package/backend/src/services/realtime/realtime-message.service.ts +260 -0
  88. package/backend/src/types/auth.ts +11 -0
  89. package/backend/src/types/realtime.ts +18 -0
  90. package/backend/src/types/socket.ts +7 -31
  91. package/backend/src/utils/cookies.ts +35 -0
  92. package/backend/src/utils/s3-config-loader.ts +64 -0
  93. package/backend/src/utils/seed.ts +301 -298
  94. package/backend/src/utils/sql-parser.ts +90 -0
  95. package/backend/tests/README.md +133 -133
  96. package/backend/tests/cleanup-all-test-data.sh +230 -230
  97. package/backend/tests/cloud/test-s3-multitenant.sh +131 -131
  98. package/backend/tests/local/comprehensive-curl-tests.sh +155 -155
  99. package/backend/tests/local/test-ai-config.sh +129 -129
  100. package/backend/tests/local/test-ai-usage.sh +80 -80
  101. package/backend/tests/local/test-auth-router.sh +143 -143
  102. package/backend/tests/local/test-database-router.sh +222 -222
  103. package/backend/tests/local/test-e2e.sh +240 -240
  104. package/backend/tests/local/test-fk-errors.sh +96 -96
  105. package/backend/tests/local/test-functions.sh +123 -123
  106. package/backend/tests/local/test-id-field.sh +200 -200
  107. package/backend/tests/local/test-logs.sh +132 -132
  108. package/backend/tests/local/test-public-bucket.sh +264 -264
  109. package/backend/tests/local/test-secrets.sh +249 -249
  110. package/backend/tests/local/test-serverless-functions.sh.disabled +325 -325
  111. package/backend/tests/local/test-traditional-rest.sh +208 -208
  112. package/backend/tests/manual/README.md +50 -50
  113. package/backend/tests/manual/create-large-table-simple.sql +10 -10
  114. package/backend/tests/manual/seed-large-table.sql +100 -100
  115. package/backend/tests/manual/setup-large-table-extras.sql +33 -33
  116. package/backend/tests/manual/test-bulk-upsert.sh +409 -409
  117. package/backend/tests/manual/test-database-advance.sh +296 -296
  118. package/backend/tests/manual/test-postgrest-stability.sh +191 -191
  119. package/backend/tests/manual/test-rawsql-export-import.sh +411 -411
  120. package/backend/tests/manual/test-rawsql-modes.sh +244 -244
  121. package/backend/tests/manual/test-universal-storage.sh +263 -263
  122. package/backend/tests/manual/test-users.sql +17 -17
  123. package/backend/tests/run-all-tests.sh +139 -139
  124. package/backend/tests/setup.ts +0 -0
  125. package/backend/tests/test-config.sh +338 -338
  126. package/backend/tests/unit/analyze-query.test.ts +697 -0
  127. package/backend/tsconfig.json +22 -22
  128. package/claude-plugin/.claude-plugin/plugin.json +24 -24
  129. package/claude-plugin/README.md +133 -133
  130. package/claude-plugin/skills/insforge-schema-patterns/SKILL.md +270 -270
  131. package/docker-compose.prod.yml +204 -200
  132. package/docker-compose.yml +232 -228
  133. package/docker-init/db/db-init.sql +97 -97
  134. package/docker-init/db/jwt.sql +5 -5
  135. package/docker-init/db/postgresql.conf +16 -16
  136. package/docker-init/logs/vector.yml +236 -236
  137. package/docs/README.md +44 -44
  138. package/docs/agent-docs/real-time.md +269 -0
  139. package/docs/changelog.mdx +119 -67
  140. package/docs/core-concepts/ai/architecture.mdx +372 -372
  141. package/docs/core-concepts/ai/sdk.mdx +213 -213
  142. package/docs/core-concepts/authentication/architecture.mdx +278 -278
  143. package/docs/core-concepts/authentication/sdk.mdx +414 -414
  144. package/docs/core-concepts/authentication/ui-components/customization.mdx +529 -529
  145. package/docs/core-concepts/authentication/ui-components/nextjs.mdx +221 -221
  146. package/docs/core-concepts/authentication/ui-components/react-router.mdx +184 -184
  147. package/docs/core-concepts/authentication/ui-components/react.mdx +129 -129
  148. package/docs/core-concepts/database/architecture.mdx +255 -255
  149. package/docs/core-concepts/database/sdk.mdx +382 -382
  150. package/docs/core-concepts/email/architecture.mdx +101 -0
  151. package/docs/core-concepts/email/sdk.mdx +53 -0
  152. package/docs/core-concepts/functions/architecture.mdx +105 -105
  153. package/docs/core-concepts/functions/sdk.mdx +184 -184
  154. package/docs/core-concepts/realtime/architecture.mdx +446 -0
  155. package/docs/core-concepts/realtime/sdk.mdx +409 -0
  156. package/docs/core-concepts/storage/architecture.mdx +243 -243
  157. package/docs/core-concepts/storage/sdk.mdx +253 -253
  158. package/docs/deployment/README.md +94 -94
  159. package/docs/deployment/deploy-to-aws-ec2.md +564 -564
  160. package/docs/deployment/deploy-to-azure-virtual-machines.md +312 -312
  161. package/docs/deployment/deploy-to-google-cloud-compute-engine.md +613 -613
  162. package/docs/deployment/deploy-to-render.md +441 -441
  163. package/docs/deprecated/insforge-auth-api.md +214 -214
  164. package/docs/deprecated/insforge-auth-sdk.md +99 -99
  165. package/docs/deprecated/insforge-db-api.md +358 -358
  166. package/docs/deprecated/insforge-db-sdk.md +139 -139
  167. package/docs/deprecated/insforge-debug-sdk.md +156 -156
  168. package/docs/deprecated/insforge-debug.md +64 -64
  169. package/docs/deprecated/insforge-instructions.md +123 -123
  170. package/docs/deprecated/insforge-project.md +117 -117
  171. package/docs/deprecated/insforge-storage-api.md +278 -278
  172. package/docs/deprecated/insforge-storage-sdk.md +158 -158
  173. package/docs/docs.json +232 -210
  174. package/docs/examples/framework-guides/nextjs.mdx +131 -131
  175. package/docs/examples/framework-guides/nuxt.mdx +165 -165
  176. package/docs/examples/framework-guides/react.mdx +165 -165
  177. package/docs/examples/framework-guides/svelte.mdx +153 -153
  178. package/docs/examples/framework-guides/vue.mdx +159 -159
  179. package/docs/examples/overview.mdx +67 -67
  180. package/docs/favicon.svg +19 -19
  181. package/docs/images/changelog/dec-2025/ai-integration.png +0 -0
  182. package/docs/images/changelog/dec-2025/ai-models.webp +0 -0
  183. package/docs/images/changelog/dec-2025/alipay-payment.webp +0 -0
  184. package/docs/images/changelog/dec-2025/apple-login.jpg +0 -0
  185. package/docs/images/changelog/dec-2025/mcp-installer.png +0 -0
  186. package/docs/images/changelog/dec-2025/realtime-module.jpg +0 -0
  187. package/docs/images/icons/ai.svg +4 -4
  188. package/docs/images/logos/nextjs.svg +4 -4
  189. package/docs/images/logos/nuxt.svg +4 -4
  190. package/docs/images/logos/react.svg +5 -5
  191. package/docs/images/logos/svelte.svg +4 -4
  192. package/docs/images/logos/vue.svg +5 -5
  193. package/docs/insforge-instructions-sdk.md +89 -88
  194. package/docs/introduction.mdx +45 -45
  195. package/docs/logo/dark.svg +22 -22
  196. package/docs/logo/light.svg +20 -20
  197. package/docs/partnership.mdx +651 -646
  198. package/docs/quickstart.mdx +82 -82
  199. package/docs/showcase.mdx +52 -52
  200. package/docs/snippets/sdk-installation.mdx +21 -21
  201. package/docs/snippets/service-icons.mdx +27 -27
  202. package/examples/oauth/frontend-oauth-example.html +250 -250
  203. package/examples/response-examples.md +443 -443
  204. package/frontend/components.json +17 -17
  205. package/frontend/package.json +69 -69
  206. package/frontend/src/assets/icons/checkbox_checked.svg +6 -6
  207. package/frontend/src/assets/icons/checkbox_undetermined.svg +6 -6
  208. package/frontend/src/assets/icons/checked.svg +3 -3
  209. package/frontend/src/assets/icons/connected.svg +3 -3
  210. package/frontend/src/assets/icons/error.svg +3 -3
  211. package/frontend/src/assets/icons/loader.svg +9 -9
  212. package/frontend/src/assets/icons/pencil.svg +4 -4
  213. package/frontend/src/assets/icons/refresh.svg +4 -4
  214. package/frontend/src/assets/icons/step_active.svg +3 -3
  215. package/frontend/src/assets/icons/step_inactive.svg +11 -11
  216. package/frontend/src/assets/icons/warning.svg +3 -3
  217. package/frontend/src/assets/logos/apple.svg +3 -3
  218. package/frontend/src/assets/logos/claude_code.svg +3 -3
  219. package/frontend/src/assets/logos/cline.svg +6 -6
  220. package/frontend/src/assets/logos/cursor.svg +20 -20
  221. package/frontend/src/assets/logos/discord.svg +8 -8
  222. package/frontend/src/assets/logos/facebook.svg +3 -3
  223. package/frontend/src/assets/logos/gemini.svg +19 -19
  224. package/frontend/src/assets/logos/github.svg +5 -5
  225. package/frontend/src/assets/logos/google.svg +13 -13
  226. package/frontend/src/assets/logos/grok.svg +10 -10
  227. package/frontend/src/assets/logos/insforge_dark.svg +15 -15
  228. package/frontend/src/assets/logos/insforge_light.svg +15 -15
  229. package/frontend/src/assets/logos/instagram.svg +1 -1
  230. package/frontend/src/assets/logos/linkedin.svg +3 -3
  231. package/frontend/src/assets/logos/openai.svg +10 -10
  232. package/frontend/src/assets/logos/roo_code.svg +9 -9
  233. package/frontend/src/assets/logos/spotify.svg +16 -16
  234. package/frontend/src/assets/logos/tiktok.svg +5 -5
  235. package/frontend/src/assets/logos/trae.svg +3 -3
  236. package/frontend/src/assets/logos/windsurf.svg +10 -10
  237. package/frontend/src/assets/logos/x.svg +3 -3
  238. package/frontend/src/components/layout/AppHeader.tsx +9 -10
  239. package/frontend/src/features/auth/components/OAuthConfigDialog.tsx +1 -0
  240. package/frontend/src/features/auth/components/UsersDataGrid.tsx +6 -0
  241. package/frontend/src/features/auth/helpers.tsx +8 -0
  242. package/frontend/src/features/auth/{page → pages}/UsersPage.tsx +0 -28
  243. package/frontend/src/features/database/components/SQLModal.tsx +75 -0
  244. package/frontend/src/features/database/components/TableForm.tsx +0 -4
  245. package/frontend/src/features/database/hooks/useDatabase.ts +66 -0
  246. package/frontend/src/features/database/hooks/useTables.ts +32 -28
  247. package/frontend/src/features/database/index.ts +1 -0
  248. package/frontend/src/features/database/{page → pages}/FunctionsPage.tsx +29 -37
  249. package/frontend/src/features/database/{page → pages}/IndexesPage.tsx +35 -47
  250. package/frontend/src/features/database/{page → pages}/PoliciesPage.tsx +43 -54
  251. package/frontend/src/features/database/{page → pages}/TablesPage.tsx +0 -42
  252. package/frontend/src/features/database/{page → pages}/TriggersPage.tsx +35 -47
  253. package/frontend/src/features/database/services/advance.service.ts +0 -26
  254. package/frontend/src/features/database/services/database.service.ts +55 -0
  255. package/frontend/src/features/database/services/table.service.ts +0 -6
  256. package/frontend/src/features/functions/{page → pages}/FunctionsPage.tsx +21 -44
  257. package/frontend/src/features/functions/{page → pages}/SecretsPage.tsx +11 -9
  258. package/frontend/src/features/logs/hooks/useMcpUsage.ts +13 -66
  259. package/frontend/src/features/realtime/components/ChannelRow.tsx +83 -0
  260. package/frontend/src/features/realtime/components/EditChannelModal.tsx +246 -0
  261. package/frontend/src/features/realtime/components/MessageRow.tsx +85 -0
  262. package/frontend/src/features/realtime/components/RealtimeEmptyState.tsx +30 -0
  263. package/frontend/src/features/realtime/hooks/useRealtime.ts +218 -0
  264. package/frontend/src/features/realtime/index.ts +11 -0
  265. package/frontend/src/features/realtime/pages/RealtimeChannelsPage.tsx +172 -0
  266. package/frontend/src/features/realtime/pages/RealtimeMessagesPage.tsx +211 -0
  267. package/frontend/src/features/realtime/pages/RealtimePermissionsPage.tsx +191 -0
  268. package/frontend/src/features/realtime/services/realtime.service.ts +107 -0
  269. package/frontend/src/features/storage/{page → pages}/StoragePage.tsx +1 -29
  270. package/frontend/src/features/visualizer/components/SchemaVisualizer.tsx +3 -3
  271. package/frontend/src/features/visualizer/{page → pages}/VisualizerPage.tsx +1 -35
  272. package/frontend/src/lib/contexts/SocketContext.tsx +119 -75
  273. package/frontend/src/lib/routing/AppRoutes.tsx +35 -20
  274. package/frontend/src/lib/utils/cloudMessaging.ts +1 -1
  275. package/frontend/src/lib/utils/menuItems.ts +24 -0
  276. package/frontend/src/lib/utils/utils.ts +14 -1
  277. package/frontend/tsconfig.json +25 -25
  278. package/frontend/tsconfig.node.json +9 -9
  279. package/functions/deno.json +24 -24
  280. package/functions/server.ts +315 -315
  281. package/i18n/README.ar.md +130 -130
  282. package/i18n/README.de.md +130 -130
  283. package/i18n/README.es.md +154 -154
  284. package/i18n/README.fr.md +134 -134
  285. package/i18n/README.hi.md +129 -129
  286. package/i18n/README.ja.md +174 -174
  287. package/i18n/README.ko.md +136 -136
  288. package/i18n/README.pt-BR.md +131 -131
  289. package/i18n/README.ru.md +129 -129
  290. package/i18n/README.zh-CN.md +133 -133
  291. package/openapi/ai.yaml +715 -715
  292. package/openapi/auth.yaml +1244 -1244
  293. package/openapi/email.yaml +158 -0
  294. package/openapi/functions.yaml +475 -475
  295. package/openapi/health.yaml +29 -29
  296. package/openapi/logs.yaml +223 -223
  297. package/openapi/metadata.yaml +177 -177
  298. package/openapi/realtime.yaml +699 -0
  299. package/openapi/records.yaml +381 -381
  300. package/openapi/secrets.yaml +370 -370
  301. package/openapi/storage.yaml +875 -875
  302. package/openapi/tables.yaml +463 -463
  303. package/package.json +97 -97
  304. package/shared-schemas/package.json +31 -31
  305. package/shared-schemas/src/ai.schema.ts +63 -59
  306. package/shared-schemas/src/auth-api.schema.ts +352 -339
  307. package/shared-schemas/src/auth.schema.ts +1 -1
  308. package/shared-schemas/src/database-api.schema.ts +32 -1
  309. package/shared-schemas/src/database.schema.ts +39 -0
  310. package/shared-schemas/src/docs.schema.ts +26 -0
  311. package/shared-schemas/src/email-api.schema.ts +30 -0
  312. package/shared-schemas/src/index.ts +4 -0
  313. package/shared-schemas/src/metadata.schema.ts +9 -0
  314. package/shared-schemas/src/realtime-api.schema.ts +111 -0
  315. package/shared-schemas/src/realtime.schema.ts +143 -0
  316. package/shared-schemas/tsconfig.json +21 -21
  317. package/tsconfig.json +7 -7
  318. package/zeabur/README.md +13 -13
  319. package/zeabur/template.yml +1032 -1032
  320. package/.cursor/rules/cursor-rules.mdc +0 -94
  321. package/frontend/src/features/database/hooks/useFullMetadata.ts +0 -18
  322. package/test-gemini.sh +0 -35
  323. package/test-usage-admin.sh +0 -57
  324. package/test-usage.sh +0 -50
  325. /package/frontend/src/features/ai/{page → pages}/AIPage.tsx +0 -0
  326. /package/frontend/src/features/auth/{page → pages}/AuthMethodsPage.tsx +0 -0
  327. /package/frontend/src/features/auth/{page → pages}/ConfigurationPage.tsx +0 -0
  328. /package/frontend/src/features/dashboard/{page → pages}/DashboardPage.tsx +0 -0
  329. /package/frontend/src/features/database/{page → pages}/SQLEditorPage.tsx +0 -0
  330. /package/frontend/src/features/database/{page → pages}/TemplatesPage.tsx +0 -0
  331. /package/frontend/src/features/login/{page → pages}/CloudLoginPage.tsx +0 -0
  332. /package/frontend/src/features/login/{page → pages}/LoginPage.tsx +0 -0
  333. /package/frontend/src/features/logs/{page → pages}/AuditsPage.tsx +0 -0
  334. /package/frontend/src/features/logs/{page → pages}/LogsPage.tsx +0 -0
  335. /package/frontend/src/features/logs/{page → pages}/MCPLogsPage.tsx +0 -0
@@ -1,647 +1,652 @@
1
- ---
2
- title: Partner Integration
3
- description: Learn how to integrate InsForge as a partner platform through co-branded or white-label partnerships
4
- ---
5
-
6
- ## Overview
7
-
8
- InsForge provides two partnership models that enable seamless integration of our Backend-as-a-Service platform into your applications. Whether you're looking for a co-branded solution or a fully white-labeled experience, we have the right partnership model for you.
9
-
10
- ## Partnership Models
11
-
12
- <CardGroup cols={2}>
13
- <Card title="Co-Branded Partnership" icon="handshake">
14
- Perfect for platforms that want to offer InsForge alongside their services.
15
- The integration process is remarkably simple - developers can connect to the InsForge platform with just one click, without complicated OAuth flows.
16
- </Card>
17
- <Card title="White-Label Partnership" icon="tag">
18
- Ideal for platforms seeking complete control over the user experience.
19
- Offers full project lifecycle management, including project dashboard integration. Developers can complete all operations without ever leaving your partner platform.
20
- </Card>
21
- </CardGroup>
22
-
23
- ## Partnership Benefits
24
-
25
- <CardGroup cols={2}>
26
- <Card title="Scalable Infrastructure" icon="server">
27
- Leverage our robust backend infrastructure without the overhead of maintenance and scaling
28
- </Card>
29
- <Card title="Flexible Integration" icon="plug">
30
- Choose from multiple integration options that best suit your application needs
31
- </Card>
32
- <Card title="Revenue Sharing" icon="handshake">
33
- Benefit from our competitive revenue sharing model for partner applications
34
- </Card>
35
- <Card title="Technical Support" icon="headset">
36
- Get dedicated technical support and resources to ensure smooth integration
37
- </Card>
38
- </CardGroup>
39
-
40
- ## Getting Started
41
-
42
- <Steps>
43
- <Step title="Apply for Partnership">
44
- Submit your partnership application through our [partner email](mailto:partnerships@insforge.dev).
45
- Specify whether you're interested in co-branded or white-label partnership.
46
- </Step>
47
-
48
- <Step title="Receive Partner Credentials">
49
- Once approved, you'll receive:
50
- - **Partner ID**: Your unique partner identifier
51
- - **Secret Key**: Your authentication key for API access
52
- - Integration documentation and support
53
- </Step>
54
-
55
- <Step title="Configure Authentication">
56
- All API requests must include your secret key for authentication:
57
-
58
- ```bash
59
- curl -X POST https://api.insforge.dev/partnership/v1/YOUR_PARTNER_ID/endpoint \
60
- -H "Content-Type: application/json" \
61
- -H "X-Partnership-Secret: YOUR_SECRET_KEY"
62
- ```
63
- </Step>
64
-
65
- <Step title="Start Integration">
66
- Begin integrating based on your partnership model using our API endpoints.
67
- </Step>
68
- </Steps>
69
-
70
- ## Features by Partnership Type
71
-
72
- ### Co-Branded Features
73
- In co-branded mode, developers explicitly know they are InsForge platform users (linked through the same email address). After logging into the InsForge platform, developers have full management rights for projects created through partners and need to pay according to InsForge's billing plans.
74
-
75
- Partner platforms can:
76
- - ✅ Sync user accounts (name, email) with InsForge
77
- - ✅ Sync projects to InsForge
78
- - ✅ Query project connection information to leverage the completed backend capabilities.
79
-
80
- ### White-Label Features
81
- In white-label mode, developers are not aware of InsForge's existence and cannot see partner-created projects on the InsForge platform.
82
-
83
- Partner platforms can:
84
- - ✅ Create embedded projects
85
- - ✅ Query project metadata to leverage the completed backend capabilities.
86
- - ✅ Pause projects
87
- - ✅ Restore projects
88
- - ✅ Delete projects
89
- - ✅ Get project's authorization token for access
90
- - ✅ Get project's usage
91
-
92
- ## API Reference
93
-
94
- <Tabs>
95
- <Tab title="Co-Branded APIs">
96
-
97
- ### Connect User Account
98
- Synchronize user account information with InsForge.
99
-
100
- ```bash
101
- POST /partnership/v1/:partnerId/connect-user
102
- ```
103
-
104
- **Request Body:**
105
- ```json
106
- {
107
- "name": "John Doe", // required
108
- "email": "john@example.com" // required
109
- }
110
- ```
111
-
112
- **Response:**
113
- ```json
114
- {
115
- "account": {
116
- "id": "uuid-string"
117
- }
118
- }
119
- ```
120
-
121
- ### Sync Project
122
- Create or synchronize a project for a specific user.
123
-
124
- ```bash
125
- POST /partnership/v1/:partnerId/:userId/sync-project
126
- ```
127
-
128
- **Request Body:**
129
- ```json
130
- {
131
- "project_name": "my-project", // required
132
- "region": "us-east", // optional
133
- "instance_type": "nano" // optional
134
- }
135
- ```
136
-
137
- **Response:**
138
- ```json
139
- {
140
- "success": true,
141
- "project": {
142
- "id": "uuid-string",
143
- "access_host": "https://project.us-east.insforge.app",
144
- "api_key": "project-api-key",
145
- "status": "active"
146
- }
147
- }
148
- ```
149
-
150
- #### Handling Project Limits
151
- Note: Due to project limits on the InsForge free plan, project synchronization from partner platforms may fail. In such cases, the response will be:
152
-
153
- ```json
154
- {
155
- "success": false,
156
- "message": "Free plan allows up to 2 active projects. Please upgrade your plan to create more projects.",
157
- "candidate_projects": [
158
- {
159
- "id": "uuid-string",
160
- "access_host": "https://project2.us-east.insforge.app",
161
- "api_key": "project-api-key",
162
- "status": "active"
163
- }
164
- ]
165
- }
166
- ```
167
-
168
- Partners can guide users to select existing projects for connection rather than always creating new ones.
169
-
170
- ### Get Project Metadata
171
- Retrieve connection information for a specific project.
172
-
173
- ```bash
174
- GET /partnership/v1/:partnerId/:userId/:projectId/metadata
175
- ```
176
-
177
- **Response:**
178
- ```json
179
- {
180
- "project": {
181
- "id": "uuid-string",
182
- "access_host": "https://project.us-east.insforge.app",
183
- "api_key": "project-api-key",
184
- "status": "active"
185
- }
186
- }
187
- ```
188
-
189
- </Tab>
190
- <Tab title="White-Label APIs">
191
-
192
- ### Sync Embedded Project
193
- Create an embedded project for white-label partners.
194
-
195
- ```bash
196
- POST /partnership/v1/:partnerId/sync-embedded-project
197
- ```
198
-
199
- **Request Body:**
200
- ```json
201
- {
202
- "project_name": "embedded-project", // required
203
- "region": "us-east", // optional
204
- "instance_type": "nano" // optional
205
- }
206
- ```
207
-
208
- **Response:**
209
- ```json
210
- {
211
- "success": true,
212
- "project": {
213
- "id": "uuid-string",
214
- "access_host": "https://project.us-east.insforge.app",
215
- "api_key": "project-api-key",
216
- "status": "active"
217
- }
218
- }
219
- ```
220
-
221
- ### Get Project Metadata
222
- Retrieve metadata for a specific project.
223
-
224
- ```bash
225
- GET /partnership/v1/:partnerId/:projectId/metadata
226
- ```
227
-
228
- **Response:**
229
- ```json
230
- {
231
- "project": {
232
- "id": "uuid-string",
233
- "access_host": "https://project.us-east.insforge.app",
234
- "api_key": "project-api-key",
235
- "status": "active"
236
- }
237
- }
238
- ```
239
-
240
- ### Pause Project
241
- Pause an active project to save resources.
242
-
243
- ```bash
244
- POST /partnership/v1/:partnerId/:projectId/pause
245
- ```
246
-
247
- **Request Body:**
248
- ```json
249
- {
250
- "wait_for_completion": true // optional
251
- }
252
- ```
253
-
254
- **Response:**
255
- ```json
256
- {
257
- "project": {
258
- "id": "uuid-string",
259
- "status": "paused"
260
- }
261
- }
262
- ```
263
-
264
- ### Restore Project
265
- Restore a paused project back to active state.
266
-
267
- ```bash
268
- POST /partnership/v1/:partnerId/:projectId/restore
269
- ```
270
-
271
- **Request Body:**
272
- ```json
273
- {
274
- "wait_for_completion": true // optional
275
- }
276
- ```
277
-
278
- **Response:**
279
- ```json
280
- {
281
- "project": {
282
- "id": "uuid-string",
283
- "status": "active"
284
- }
285
- }
286
- ```
287
-
288
- ### Delete Project
289
- Permanently delete a project. This operation cannot be undone.
290
-
291
- ```bash
292
- DELETE /partnership/v1/:partnerId/:projectId
293
- ```
294
-
295
- **Response (200 OK):**
296
- ```json
297
- {
298
- "message": "Project deleted successfully",
299
- "requestId": "xhiahif-fehfe-feae"
300
- }
301
- ```
302
-
303
- ### Generate Project Authorization
304
- Generate a short-lived asymmetric JWT token for project access. The token is signed with RSA private key and can be verified using the public JWKS endpoint. Token expires in 10 minutes.
305
-
306
- ```bash
307
- POST /partnership/v1/:partnerId/:projectId/authorization
308
- ```
309
-
310
- **Response:**
311
- ```json
312
- {
313
- "code": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Imluc2ZvcmdlLWtleS0yMDI1LTA4LTEzIn0...",
314
- "expires_in": 600,
315
- "type": "Bearer"
316
- }
317
- ```
318
-
319
- ### Get Project Usage
320
- Retrieve usage metrics for a specific project over a date range. Returns both summary statistics and daily breakdown of usage metrics. If dates are not specified, returns data for the last 7 days.
321
-
322
- ```bash
323
- GET /partnership/v1/:partnerId/:projectId/usage?start_date=2025-11-10&end_date=2025-11-18
324
- ```
325
-
326
- **Query Parameters:**
327
- - `start_date` (optional): Start date in YYYY-MM-DD format (defaults to 7 days ago)
328
- - `end_date` (optional): End date in YYYY-MM-DD format (defaults to today)
329
-
330
- **Response:**
331
- ```json
332
- {
333
- "project": {
334
- "id": "uuid-string",
335
- "name": "project-name",
336
- "status": "active"
337
- },
338
- "period": {
339
- "start": "2025-11-10T00:00:00Z",
340
- "end": "2025-11-18T23:59:59Z"
341
- },
342
- "summary": {
343
- "max_database_size_bytes": 1048576,
344
- "max_file_storage_bytes": 5242880,
345
- "total_ai_tokens": 15000,
346
- "total_mcp_calls": 120,
347
- "total_egress_bytes": 2097152,
348
- "total_ai_credits": 1.5,
349
- "total_email_requests": 50,
350
- "total_function_calls": 300,
351
- "total_ec2_compute": 3600
352
- },
353
- "daily_usage": [
354
- {
355
- "usage_date": "2025-11-10",
356
- "database_size_bytes": 1048576,
357
- "file_storage_bytes": 5242880,
358
- "ai_tokens": 1500,
359
- "mcp_calls": 12,
360
- "egress_bytes": 204800,
361
- "ai_credits": 0.15,
362
- "email_requests": 5,
363
- "function_calls": 30,
364
- "ec2_compute": 3600
365
- }
366
- ]
367
- }
368
- ```
369
-
370
- </Tab>
371
- </Tabs>
372
-
373
- ## Integration Examples
374
-
375
- ### Co-Branded Integration Flow
376
-
377
- The following sequence diagram illustrates the integration flow for co-branded partnerships:
378
-
379
- ```mermaid
380
- sequenceDiagram
381
- participant User as End User
382
- participant Partner as Partner Platform
383
- participant InsForge as InsForge API
384
- participant Dashboard as InsForge Dashboard
385
-
386
- User->>Partner: Sign up/Login
387
- Partner->>InsForge: POST /connect-user<br/>(name, email)
388
- InsForge-->>Partner: Return user account ID
389
-
390
- User->>Partner: Create new project
391
- Partner->>InsForge: POST /sync-project<br/>(userId, project_name)
392
-
393
- alt Success
394
- InsForge-->>Partner: Return project details<br/>(id, access_host, api_key)
395
- Partner->>Partner: Store project credentials
396
- Partner->>User: Show project ready
397
- else Project Limit Reached
398
- InsForge-->>Partner: Return error + candidate projects
399
- Partner->>User: Show existing projects to choose
400
- User->>Partner: Select existing project
401
- Partner->>InsForge: GET /metadata<br/>(projectId)
402
- InsForge-->>Partner: Return project details
403
- end
404
-
405
- User->>Partner: Use application features
406
- Partner->>InsForge: API calls using project credentials
407
- InsForge-->>Partner: Return data
408
- Partner-->>User: Display results
409
-
410
- Note over User,Dashboard: User can also access InsForge Dashboard directly
411
- User->>Dashboard: Login with same email
412
- Dashboard->>User: Full project management access
413
- ```
414
-
415
- ```typescript
416
- // 1. Connect user account
417
- const connectUser = async (name: string, email: string) => {
418
- const response = await fetch(
419
- `https://api.insforge.dev/partnership/v1/${PARTNER_ID}/connect-user`,
420
- {
421
- method: 'POST',
422
- headers: {
423
- 'X-Partnership-Secret': `${SECRET_KEY}`,
424
- 'Content-Type': 'application/json'
425
- },
426
- body: JSON.stringify({ name, email })
427
- }
428
- );
429
-
430
- const { account } = await response.json();
431
- return account.id;
432
- };
433
-
434
- // 2. Create project for user
435
- const createProject = async (userId: string, projectName: string) => {
436
- const response = await fetch(
437
- `https://api.insforge.dev/partnership/v1/${PARTNER_ID}/${userId}/sync-project`,
438
- {
439
- method: 'POST',
440
- headers: {
441
- 'X-Partnership-Secret': `${SECRET_KEY}`,
442
- 'Content-Type': 'application/json'
443
- },
444
- body: JSON.stringify({
445
- project_name: projectName,
446
- region: 'us-east',
447
- instance_type: 'nano'
448
- })
449
- }
450
- );
451
-
452
- const data = await response.json();
453
- if (data.success) {
454
- return data.project;
455
- }
456
- throw new Error(data.message);
457
- };
458
-
459
- // 3. Use project credentials
460
- const useProject = async (project: any) => {
461
- // Connect to InsForge project using returned credentials
462
- const insForgeClient = new InsForgeClient({
463
- baseUrl: project.access_host,
464
- apiKey: project.api_key
465
- });
466
-
467
- // Now you can use all InsForge features
468
- await insForgeClient.database.query('SELECT * FROM users');
469
- };
470
- ```
471
-
472
- ### White-Label Integration Flow
473
-
474
- The following sequence diagram illustrates the integration flow for white-label partnerships:
475
-
476
- ```mermaid
477
- sequenceDiagram
478
- participant User as End User
479
- participant Partner as Partner Platform
480
- participant InsForge as InsForge API
481
-
482
- Note over User,InsForge: User never interacts with InsForge directly
483
-
484
- User->>Partner: Sign up/Login to partner platform
485
-
486
- User->>Partner: Create new project
487
- Partner->>InsForge: POST /sync-embedded-project<br/>(project_name, region, instance_type)
488
- InsForge-->>Partner: Return project details<br/>(id, access_host, api_key, status)
489
- Partner->>Partner: Store project credentials
490
- Partner->>User: Show project ready
491
-
492
- User->>Partner: Use application features
493
- Partner->>InsForge: API calls using project credentials
494
- InsForge-->>Partner: Return data
495
- Partner-->>User: Display results
496
-
497
- User->>Partner: Request to pause project
498
- Partner->>InsForge: POST /pause<br/>(projectId)
499
- InsForge-->>Partner: Return status: paused
500
- Partner->>User: Confirm project paused
501
-
502
- User->>Partner: Request to restore project
503
- Partner->>InsForge: POST /restore<br/>(projectId)
504
- InsForge-->>Partner: Return status: active
505
- Partner->>User: Confirm project active
506
-
507
- Partner->>InsForge: GET /metadata<br/>(projectId)
508
- InsForge-->>Partner: Return current project status
509
- ```
510
-
511
- ```typescript
512
- // 1. Create embedded project
513
- const createEmbeddedProject = async (projectName: string) => {
514
- const response = await fetch(
515
- `https://api.insforge.dev/partnership/v1/${PARTNER_ID}/sync-embedded-project`,
516
- {
517
- method: 'POST',
518
- headers: {
519
- 'X-Partnership-Secret': `${SECRET_KEY}`,
520
- 'Content-Type': 'application/json'
521
- },
522
- body: JSON.stringify({
523
- project_name: projectName,
524
- region: 'eu-west',
525
- instance_type: 'small'
526
- })
527
- }
528
- );
529
-
530
- const data = await response.json();
531
- if (data.success) {
532
- return data.project;
533
- }
534
- throw new Error(data.message);
535
- };
536
-
537
- // 2. Manage project lifecycle
538
- const pauseProject = async (projectId: string) => {
539
- const response = await fetch(
540
- `https://api.insforge.dev/partnership/v1/${PARTNER_ID}/${projectId}/pause`,
541
- {
542
- method: 'POST',
543
- headers: {
544
- 'X-Partnership-Secret': `${SECRET_KEY}`,
545
- 'Content-Type': 'application/json'
546
- },
547
- body: JSON.stringify({
548
- wait_for_completion: true
549
- })
550
- }
551
- );
552
-
553
- const { project } = await response.json();
554
- console.log(`Project ${project.id} status: ${project.status}`);
555
- };
556
-
557
- const restoreProject = async (projectId: string) => {
558
- const response = await fetch(
559
- `https://api.insforge.dev/partnership/v1/${PARTNER_ID}/${projectId}/restore`,
560
- {
561
- method: 'POST',
562
- headers: {
563
- 'X-Partnership-Secret': `${SECRET_KEY}`,
564
- 'Content-Type': 'application/json'
565
- },
566
- body: JSON.stringify({
567
- wait_for_completion: true
568
- })
569
- }
570
- );
571
-
572
- const { project } = await response.json();
573
- console.log(`Project ${project.id} status: ${project.status}`);
574
- };
575
-
576
- // 3. Delete project
577
- const deleteProject = async (projectId: string) => {
578
- const response = await fetch(
579
- `https://api.insforge.dev/partnership/v1/${PARTNER_ID}/${projectId}`,
580
- {
581
- method: 'DELETE',
582
- headers: {
583
- 'X-Partnership-Secret': `${SECRET_KEY}`
584
- }
585
- }
586
- );
587
-
588
- if (response.ok) {
589
- const data = await response.json();
590
- console.log(data.message); // "Project deleted successfully"
591
- console.log(`Request ID: ${data.requestId}`);
592
- } else {
593
- throw new Error(`Failed to delete project: ${response.status}`);
594
- }
595
- };
596
- ```
597
-
598
- ## Parameter and Response Reference
599
-
600
- ### Project Region Values
601
- InsForge provides global deployment capabilities. Each project can be deployed to different regions:
602
- - `us-east` - United States East Coast
603
- - `us-west` - United States West Coast
604
- - `ca-central` - Canada Central
605
- - `eu-central` - Europe Central
606
-
607
- Additional regions will be added based on demand.
608
-
609
- ### Project Instance Type Values
610
- Based on your project's business requirements, InsForge offers the following resource types:
611
- - `nano` - Minimal resources for development
612
- - `small` - Light workloads
613
- - `medium` - Standard applications
614
- - `large` - Production workloads
615
- - `xl` - High-performance applications
616
- - `2xl` - Enterprise applications
617
- - `4xl` - Large-scale operations
618
- - `8xl` - Mission-critical systems
619
- - `16xl` - Maximum performance
620
-
621
- ### Project Status Values
622
-
623
- Projects can have the following status values:
624
-
625
- - **active**: Project is running and accessible
626
- - **paused**: Project is paused (white-label only)
627
-
628
- ## Error Handling
629
-
630
- All API endpoints return consistent error responses:
631
-
632
- ```json
633
- {
634
- "success": false,
635
- "message": "Detailed error message describing what went wrong"
636
- }
637
- ```
638
-
639
- Common error scenarios:
640
- - Invalid authentication credentials
641
- - Project not found
642
- - Insufficient permissions for requested operation
643
- - Invalid request parameters
644
-
645
- ## Next Steps
646
-
1
+ ---
2
+ title: Partner Integration
3
+ description: Learn how to integrate InsForge as a partner platform through co-branded or white-label partnerships
4
+ ---
5
+
6
+ ## Overview
7
+
8
+ InsForge provides two partnership models that enable seamless integration of our Backend-as-a-Service platform into your applications. Whether you're looking for a co-branded solution or a fully white-labeled experience, we have the right partnership model for you.
9
+
10
+ ## Partnership Models
11
+
12
+ <CardGroup cols={2}>
13
+ <Card title="Co-Branded Partnership" icon="handshake">
14
+ Perfect for platforms that want to offer InsForge alongside their services.
15
+ The integration process is remarkably simple - developers can connect to the InsForge platform with just one click, without complicated OAuth flows.
16
+ </Card>
17
+ <Card title="White-Label Partnership" icon="tag">
18
+ Ideal for platforms seeking complete control over the user experience.
19
+ Offers full project lifecycle management, including project dashboard integration. Developers can complete all operations without ever leaving your partner platform.
20
+ </Card>
21
+ </CardGroup>
22
+
23
+ ## Partnership Benefits
24
+
25
+ <CardGroup cols={2}>
26
+ <Card title="Scalable Infrastructure" icon="server">
27
+ Leverage our robust backend infrastructure without the overhead of maintenance and scaling
28
+ </Card>
29
+ <Card title="Flexible Integration" icon="plug">
30
+ Choose from multiple integration options that best suit your application needs
31
+ </Card>
32
+ <Card title="Revenue Sharing" icon="handshake">
33
+ Benefit from our competitive revenue sharing model for partner applications
34
+ </Card>
35
+ <Card title="Technical Support" icon="headset">
36
+ Get dedicated technical support and resources to ensure smooth integration
37
+ </Card>
38
+ </CardGroup>
39
+
40
+ ## Getting Started
41
+
42
+ <Steps>
43
+ <Step title="Apply for Partnership">
44
+ Submit your partnership application through our [partner email](mailto:partnerships@insforge.dev).
45
+ Specify whether you're interested in co-branded or white-label partnership.
46
+ </Step>
47
+
48
+ <Step title="Receive Partner Credentials">
49
+ Once approved, you'll receive:
50
+ - **Partner ID**: Your unique partner identifier
51
+ - **Secret Key**: Your authentication key for API access
52
+ - Integration documentation and support
53
+ </Step>
54
+
55
+ <Step title="Configure Authentication">
56
+ All API requests must include your secret key for authentication:
57
+
58
+ ```bash
59
+ curl -X POST https://api.insforge.dev/partnership/v1/YOUR_PARTNER_ID/endpoint \
60
+ -H "Content-Type: application/json" \
61
+ -H "X-Partnership-Secret: YOUR_SECRET_KEY"
62
+ ```
63
+ </Step>
64
+
65
+ <Step title="Start Integration">
66
+ Begin integrating based on your partnership model using our API endpoints.
67
+ </Step>
68
+ </Steps>
69
+
70
+ ## Features by Partnership Type
71
+
72
+ ### Co-Branded Features
73
+ In co-branded mode, developers explicitly know they are InsForge platform users (linked through the same email address). After logging into the InsForge platform, developers have full management rights for projects created through partners and need to pay according to InsForge's billing plans.
74
+
75
+ Partner platforms can:
76
+ - ✅ Sync user accounts (name, email) with InsForge
77
+ - ✅ Sync projects to InsForge
78
+ - ✅ Query project connection information to leverage the completed backend capabilities.
79
+
80
+ ### White-Label Features
81
+ In white-label mode, developers are not aware of InsForge's existence and cannot see partner-created projects on the InsForge platform.
82
+
83
+ Partner platforms can:
84
+ - ✅ Create embedded projects
85
+ - ✅ Query project metadata to leverage the completed backend capabilities.
86
+ - ✅ Pause projects
87
+ - ✅ Restore projects
88
+ - ✅ Delete projects
89
+ - ✅ Get project's authorization token for access
90
+ - ✅ Get project's usage
91
+
92
+ ## API Reference
93
+
94
+ <Tabs>
95
+ <Tab title="Co-Branded APIs">
96
+
97
+ ### Connect User Account
98
+ Synchronize user account information with InsForge.
99
+
100
+ ```bash
101
+ POST /partnership/v1/:partnerId/connect-user
102
+ ```
103
+
104
+ **Request Body:**
105
+ ```json
106
+ {
107
+ "name": "John Doe", // required
108
+ "email": "john@example.com" // required
109
+ }
110
+ ```
111
+
112
+ **Response:**
113
+ ```json
114
+ {
115
+ "account": {
116
+ "id": "uuid-string"
117
+ }
118
+ }
119
+ ```
120
+
121
+ ### Sync Project
122
+ Create or synchronize a project for a specific user.
123
+
124
+ ```bash
125
+ POST /partnership/v1/:partnerId/:userId/sync-project
126
+ ```
127
+
128
+ **Request Body:**
129
+ ```json
130
+ {
131
+ "project_name": "my-project", // required
132
+ "region": "us-east", // optional, "us-east", "us-west", "ap-southeast", "eu-central", default: "us-east"
133
+ "instance_type": "nano" // optional, "nano", "micro", "small", "medium", "large", "xl", "2xl", "4xl", "8xl", "16xl", default: "nano"
134
+ }
135
+ ```
136
+
137
+ **Response:**
138
+ ```json
139
+ {
140
+ "success": true,
141
+ "project": {
142
+ "id": "uuid-string",
143
+ "access_host": "https://project.us-east.insforge.app",
144
+ "api_key": "project-api-key",
145
+ "status": "active"
146
+ }
147
+ }
148
+ ```
149
+
150
+ #### Handling Project Limits
151
+ Note: Due to project limits on the InsForge free plan, project synchronization from partner platforms may fail. In such cases, the response will be:
152
+
153
+ ```json
154
+ {
155
+ "success": false,
156
+ "message": "Free plan allows up to 2 active projects. Please upgrade your plan to create more projects.",
157
+ "candidate_projects": [
158
+ {
159
+ "id": "uuid-string",
160
+ "access_host": "https://project2.us-east.insforge.app",
161
+ "api_key": "project-api-key",
162
+ "status": "active"
163
+ }
164
+ ]
165
+ }
166
+ ```
167
+
168
+ Partners can guide users to select existing projects for connection rather than always creating new ones.
169
+
170
+ ### Get Project Metadata
171
+ Retrieve connection information for a specific project.
172
+
173
+ ```bash
174
+ GET /partnership/v1/:partnerId/:userId/:projectId/metadata
175
+ ```
176
+
177
+ **Response:**
178
+ ```json
179
+ {
180
+ "project": {
181
+ "id": "uuid-string",
182
+ "access_host": "https://project.us-east.insforge.app",
183
+ "api_key": "project-api-key",
184
+ "status": "active"
185
+ }
186
+ }
187
+ ```
188
+
189
+ </Tab>
190
+ <Tab title="White-Label APIs">
191
+
192
+ ### Sync Embedded Project
193
+ Create an embedded project for white-label partners.
194
+
195
+ ```bash
196
+ POST /partnership/v1/:partnerId/sync-embedded-project
197
+ ```
198
+
199
+ **Request Body:**
200
+ ```json
201
+ {
202
+ "project_name": "embedded-project", // required
203
+ "region": "us-east", // optional, "us-east", "us-west", "ap-southeast", "eu-central", default: "us-east"
204
+ "instance_type": "nano" // optional, "nano", "micro", "small", "medium", "large", "xl", "2xl", "4xl", "8xl", "16xl", default: "nano"
205
+ }
206
+ ```
207
+
208
+ **Response:**
209
+ ```json
210
+ {
211
+ "success": true,
212
+ "project": {
213
+ "id": "uuid-string",
214
+ "access_host": "https://project.us-east.insforge.app",
215
+ "api_key": "project-api-key",
216
+ "status": "active"
217
+ }
218
+ }
219
+ ```
220
+
221
+ ### Get Project Metadata
222
+ Retrieve metadata for a specific project.
223
+
224
+ ```bash
225
+ GET /partnership/v1/:partnerId/:projectId/metadata
226
+ ```
227
+
228
+ **Response:**
229
+ ```json
230
+ {
231
+ "project": {
232
+ "id": "uuid-string",
233
+ "access_host": "https://project.us-east.insforge.app",
234
+ "api_key": "project-api-key",
235
+ "region": "us-east",
236
+ "instance_type": "nano",
237
+ "last_activity_at": "2025-01-21T10:30:00Z",
238
+ "status": "active"
239
+ }
240
+ }
241
+ ```
242
+
243
+ ### Pause Project
244
+ Pause an active project to save resources.
245
+
246
+ ```bash
247
+ POST /partnership/v1/:partnerId/:projectId/pause
248
+ ```
249
+
250
+ **Request Body:**
251
+ ```json
252
+ {
253
+ "wait_for_completion": true // optional
254
+ }
255
+ ```
256
+
257
+ **Response:**
258
+ ```json
259
+ {
260
+ "project": {
261
+ "id": "uuid-string",
262
+ "status": "paused"
263
+ }
264
+ }
265
+ ```
266
+
267
+ ### Restore Project
268
+ Restore a paused project back to active state.
269
+
270
+ ```bash
271
+ POST /partnership/v1/:partnerId/:projectId/restore
272
+ ```
273
+
274
+ **Request Body:**
275
+ ```json
276
+ {
277
+ "wait_for_completion": true // optional
278
+ }
279
+ ```
280
+
281
+ **Response:**
282
+ ```json
283
+ {
284
+ "project": {
285
+ "id": "uuid-string",
286
+ "status": "active"
287
+ }
288
+ }
289
+ ```
290
+
291
+ ### Delete Project
292
+ Permanently delete a project. This operation cannot be undone.
293
+
294
+ ```bash
295
+ DELETE /partnership/v1/:partnerId/:projectId
296
+ ```
297
+
298
+ **Response (200 OK):**
299
+ ```json
300
+ {
301
+ "message": "Project deleted successfully",
302
+ "requestId": "xhiahif-fehfe-feae"
303
+ }
304
+ ```
305
+
306
+ ### Generate Project Authorization
307
+ Generate a short-lived asymmetric JWT token for project access. The token is signed with RSA private key and can be verified using the public JWKS endpoint. Token expires in 10 minutes.
308
+
309
+ ```bash
310
+ POST /partnership/v1/:partnerId/:projectId/authorization
311
+ ```
312
+
313
+ **Response:**
314
+ ```json
315
+ {
316
+ "code": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Imluc2ZvcmdlLWtleS0yMDI1LTA4LTEzIn0...",
317
+ "expires_in": 600,
318
+ "type": "Bearer"
319
+ }
320
+ ```
321
+
322
+ ### Get Project Usage
323
+ Retrieve usage metrics for a specific project over a date range. Returns both summary statistics and daily breakdown of usage metrics. If dates are not specified, returns data for the last 7 days.
324
+
325
+ ```bash
326
+ GET /partnership/v1/:partnerId/:projectId/usage?start_date=2025-11-10&end_date=2025-11-18
327
+ ```
328
+
329
+ **Query Parameters:**
330
+ - `start_date` (optional): Start date in YYYY-MM-DD format (defaults to 7 days ago)
331
+ - `end_date` (optional): End date in YYYY-MM-DD format (defaults to today)
332
+
333
+ **Response:**
334
+ ```json
335
+ {
336
+ "project": {
337
+ "id": "uuid-string",
338
+ "name": "project-name",
339
+ "status": "active",
340
+ "last_activity_at": "2025-11-18T10:30:00Z"
341
+ },
342
+ "period": {
343
+ "start": "2025-11-10T00:00:00Z",
344
+ "end": "2025-11-18T23:59:59Z"
345
+ },
346
+ "summary": {
347
+ "max_database_size_bytes": 1048576,
348
+ "max_file_storage_bytes": 5242880,
349
+ "total_ai_tokens": 15000,
350
+ "total_mcp_calls": 120,
351
+ "total_egress_bytes": 2097152,
352
+ "total_ai_credits": 1.5,
353
+ "total_email_requests": 50,
354
+ "total_function_calls": 300,
355
+ "total_ec2_compute": 3600
356
+ },
357
+ "daily_usage": [
358
+ {
359
+ "usage_date": "2025-11-10",
360
+ "database_size_bytes": 1048576,
361
+ "file_storage_bytes": 5242880,
362
+ "ai_tokens": 1500,
363
+ "mcp_calls": 12,
364
+ "egress_bytes": 204800,
365
+ "ai_credits": 0.15,
366
+ "email_requests": 5,
367
+ "function_calls": 30,
368
+ "ec2_compute": 3600
369
+ }
370
+ ]
371
+ }
372
+ ```
373
+
374
+ </Tab>
375
+ </Tabs>
376
+
377
+ ## Integration Examples
378
+
379
+ ### Co-Branded Integration Flow
380
+
381
+ The following sequence diagram illustrates the integration flow for co-branded partnerships:
382
+
383
+ ```mermaid
384
+ sequenceDiagram
385
+ participant User as End User
386
+ participant Partner as Partner Platform
387
+ participant InsForge as InsForge API
388
+ participant Dashboard as InsForge Dashboard
389
+
390
+ User->>Partner: Sign up/Login
391
+ Partner->>InsForge: POST /connect-user<br/>(name, email)
392
+ InsForge-->>Partner: Return user account ID
393
+
394
+ User->>Partner: Create new project
395
+ Partner->>InsForge: POST /sync-project<br/>(userId, project_name)
396
+
397
+ alt Success
398
+ InsForge-->>Partner: Return project details<br/>(id, access_host, api_key)
399
+ Partner->>Partner: Store project credentials
400
+ Partner->>User: Show project ready
401
+ else Project Limit Reached
402
+ InsForge-->>Partner: Return error + candidate projects
403
+ Partner->>User: Show existing projects to choose
404
+ User->>Partner: Select existing project
405
+ Partner->>InsForge: GET /metadata<br/>(projectId)
406
+ InsForge-->>Partner: Return project details
407
+ end
408
+
409
+ User->>Partner: Use application features
410
+ Partner->>InsForge: API calls using project credentials
411
+ InsForge-->>Partner: Return data
412
+ Partner-->>User: Display results
413
+
414
+ Note over User,Dashboard: User can also access InsForge Dashboard directly
415
+ User->>Dashboard: Login with same email
416
+ Dashboard->>User: Full project management access
417
+ ```
418
+
419
+ ```typescript
420
+ // 1. Connect user account
421
+ const connectUser = async (name: string, email: string) => {
422
+ const response = await fetch(
423
+ `https://api.insforge.dev/partnership/v1/${PARTNER_ID}/connect-user`,
424
+ {
425
+ method: 'POST',
426
+ headers: {
427
+ 'X-Partnership-Secret': `${SECRET_KEY}`,
428
+ 'Content-Type': 'application/json'
429
+ },
430
+ body: JSON.stringify({ name, email })
431
+ }
432
+ );
433
+
434
+ const { account } = await response.json();
435
+ return account.id;
436
+ };
437
+
438
+ // 2. Create project for user
439
+ const createProject = async (userId: string, projectName: string) => {
440
+ const response = await fetch(
441
+ `https://api.insforge.dev/partnership/v1/${PARTNER_ID}/${userId}/sync-project`,
442
+ {
443
+ method: 'POST',
444
+ headers: {
445
+ 'X-Partnership-Secret': `${SECRET_KEY}`,
446
+ 'Content-Type': 'application/json'
447
+ },
448
+ body: JSON.stringify({
449
+ project_name: projectName,
450
+ region: 'us-east',
451
+ instance_type: 'nano'
452
+ })
453
+ }
454
+ );
455
+
456
+ const data = await response.json();
457
+ if (data.success) {
458
+ return data.project;
459
+ }
460
+ throw new Error(data.message);
461
+ };
462
+
463
+ // 3. Use project credentials
464
+ const useProject = async (project: any) => {
465
+ // Connect to InsForge project using returned credentials
466
+ const insForgeClient = new InsForgeClient({
467
+ baseUrl: project.access_host,
468
+ apiKey: project.api_key
469
+ });
470
+
471
+ // Now you can use all InsForge features
472
+ await insForgeClient.database.query('SELECT * FROM users');
473
+ };
474
+ ```
475
+
476
+ ### White-Label Integration Flow
477
+
478
+ The following sequence diagram illustrates the integration flow for white-label partnerships:
479
+
480
+ ```mermaid
481
+ sequenceDiagram
482
+ participant User as End User
483
+ participant Partner as Partner Platform
484
+ participant InsForge as InsForge API
485
+
486
+ Note over User,InsForge: User never interacts with InsForge directly
487
+
488
+ User->>Partner: Sign up/Login to partner platform
489
+
490
+ User->>Partner: Create new project
491
+ Partner->>InsForge: POST /sync-embedded-project<br/>(project_name, region, instance_type)
492
+ InsForge-->>Partner: Return project details<br/>(id, access_host, api_key, status)
493
+ Partner->>Partner: Store project credentials
494
+ Partner->>User: Show project ready
495
+
496
+ User->>Partner: Use application features
497
+ Partner->>InsForge: API calls using project credentials
498
+ InsForge-->>Partner: Return data
499
+ Partner-->>User: Display results
500
+
501
+ User->>Partner: Request to pause project
502
+ Partner->>InsForge: POST /pause<br/>(projectId)
503
+ InsForge-->>Partner: Return status: paused
504
+ Partner->>User: Confirm project paused
505
+
506
+ User->>Partner: Request to restore project
507
+ Partner->>InsForge: POST /restore<br/>(projectId)
508
+ InsForge-->>Partner: Return status: active
509
+ Partner->>User: Confirm project active
510
+
511
+ Partner->>InsForge: GET /metadata<br/>(projectId)
512
+ InsForge-->>Partner: Return current project status
513
+ ```
514
+
515
+ ```typescript
516
+ // 1. Create embedded project
517
+ const createEmbeddedProject = async (projectName: string) => {
518
+ const response = await fetch(
519
+ `https://api.insforge.dev/partnership/v1/${PARTNER_ID}/sync-embedded-project`,
520
+ {
521
+ method: 'POST',
522
+ headers: {
523
+ 'X-Partnership-Secret': `${SECRET_KEY}`,
524
+ 'Content-Type': 'application/json'
525
+ },
526
+ body: JSON.stringify({
527
+ project_name: projectName,
528
+ region: 'eu-west',
529
+ instance_type: 'small'
530
+ })
531
+ }
532
+ );
533
+
534
+ const data = await response.json();
535
+ if (data.success) {
536
+ return data.project;
537
+ }
538
+ throw new Error(data.message);
539
+ };
540
+
541
+ // 2. Manage project lifecycle
542
+ const pauseProject = async (projectId: string) => {
543
+ const response = await fetch(
544
+ `https://api.insforge.dev/partnership/v1/${PARTNER_ID}/${projectId}/pause`,
545
+ {
546
+ method: 'POST',
547
+ headers: {
548
+ 'X-Partnership-Secret': `${SECRET_KEY}`,
549
+ 'Content-Type': 'application/json'
550
+ },
551
+ body: JSON.stringify({
552
+ wait_for_completion: true
553
+ })
554
+ }
555
+ );
556
+
557
+ const { project } = await response.json();
558
+ console.log(`Project ${project.id} status: ${project.status}`);
559
+ };
560
+
561
+ const restoreProject = async (projectId: string) => {
562
+ const response = await fetch(
563
+ `https://api.insforge.dev/partnership/v1/${PARTNER_ID}/${projectId}/restore`,
564
+ {
565
+ method: 'POST',
566
+ headers: {
567
+ 'X-Partnership-Secret': `${SECRET_KEY}`,
568
+ 'Content-Type': 'application/json'
569
+ },
570
+ body: JSON.stringify({
571
+ wait_for_completion: true
572
+ })
573
+ }
574
+ );
575
+
576
+ const { project } = await response.json();
577
+ console.log(`Project ${project.id} status: ${project.status}`);
578
+ };
579
+
580
+ // 3. Delete project
581
+ const deleteProject = async (projectId: string) => {
582
+ const response = await fetch(
583
+ `https://api.insforge.dev/partnership/v1/${PARTNER_ID}/${projectId}`,
584
+ {
585
+ method: 'DELETE',
586
+ headers: {
587
+ 'X-Partnership-Secret': `${SECRET_KEY}`
588
+ }
589
+ }
590
+ );
591
+
592
+ if (response.ok) {
593
+ const data = await response.json();
594
+ console.log(data.message); // "Project deleted successfully"
595
+ console.log(`Request ID: ${data.requestId}`);
596
+ } else {
597
+ throw new Error(`Failed to delete project: ${response.status}`);
598
+ }
599
+ };
600
+ ```
601
+
602
+ ## Parameter and Response Reference
603
+
604
+ ### Project Region Values
605
+ InsForge provides global deployment capabilities. Each project can be deployed to different regions:
606
+ - `us-east` - United States East Coast
607
+ - `us-west` - United States West Coast
608
+ - `ap-southeast` - Asia Pacific Southeast
609
+ - `eu-central` - Europe Central
610
+
611
+ Additional regions will be added based on demand.
612
+
613
+ ### Project Instance Type Values
614
+ Based on your project's business requirements, InsForge offers the following resource types:
615
+ - `nano` - Minimal resources for development
616
+ - `micro` - Basic resources for testing and development
617
+ - `small` - Light workloads
618
+ - `medium` - Standard applications
619
+ - `large` - Production workloads
620
+ - `xl` - High-performance applications
621
+ - `2xl` - Enterprise applications
622
+ - `4xl` - Large-scale operations
623
+ - `8xl` - Mission-critical systems
624
+ - `16xl` - Maximum performance
625
+
626
+ ### Project Status Values
627
+
628
+ Projects can have the following status values:
629
+
630
+ - **active**: Project is running and accessible
631
+ - **paused**: Project is paused (white-label only)
632
+
633
+ ## Error Handling
634
+
635
+ All API endpoints return consistent error responses:
636
+
637
+ ```json
638
+ {
639
+ "success": false,
640
+ "message": "Detailed error message describing what went wrong"
641
+ }
642
+ ```
643
+
644
+ Common error scenarios:
645
+ - Invalid authentication credentials
646
+ - Project not found
647
+ - Insufficient permissions for requested operation
648
+ - Invalid request parameters
649
+
650
+ ## Next Steps
651
+
647
652
  - Schedule a [technical review](https://calendly.com/tony-chang-insforge/45min) with our team