@postxl/schema 1.8.1 → 1.9.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.
@@ -0,0 +1,897 @@
1
+ {
2
+ "name": "paxl",
3
+ "slug": "paxl",
4
+ "description": "AI-powered enterprise app builder platform. Non-technical users describe what they need, AI agents build production-grade applications using PostXL generators, and apps deploy to the company's own cloud infrastructure.",
5
+ "projectType": "standalone",
6
+ "version": "0.1.0",
7
+ "auth": {
8
+ "provider": "keycloak",
9
+ "roleClaimPath": "realm_access.roles",
10
+ "defaultDeny": true
11
+ },
12
+ "schemas": [{ "name": "PXL" }, { "name": "Data" }],
13
+ "defaultSchema": "Data",
14
+ "systemUser": { "name": "System", "email": "system@paxl.io" },
15
+ "standardModels": ["User", "Action", "ActionOperation", "File", "TableView", "Comment", "Config"],
16
+ "models": {
17
+ "Organization": {
18
+ "description": "Top-level tenant representing a company or consulting firm using the Paxl platform.",
19
+ "schema": "Data",
20
+ "standardFields": ["id", "createdAt", "updatedAt"],
21
+ "labelField": "name",
22
+ "keyField": "slug",
23
+ "fields": {
24
+ "name": {
25
+ "type": "String",
26
+ "label": "Organization Name",
27
+ "description": "Display name of the organization",
28
+ "maxLength": 120
29
+ },
30
+ "slug": {
31
+ "type": "String",
32
+ "label": "Slug",
33
+ "description": "URL-friendly unique identifier for the organization",
34
+ "isUnique": true,
35
+ "maxLength": 80
36
+ },
37
+ "status": {
38
+ "type": {
39
+ "Provisioning": "Initial setup phase — IdP, cloud, and git connections being configured",
40
+ "Active": "Fully provisioned and operational",
41
+ "Suspended": "Temporarily disabled by platform admin or billing failure"
42
+ },
43
+ "label": "Status",
44
+ "description": "Current lifecycle state of the organization"
45
+ },
46
+ "ssoProvider": {
47
+ "type": "String?",
48
+ "label": "SSO Provider",
49
+ "description": "Identity provider type for single sign-on (e.g. Okta, Azure AD)"
50
+ },
51
+ "ssoRealm": {
52
+ "type": "String?",
53
+ "label": "SSO Realm",
54
+ "description": "Keycloak realm identifier for this organization's SSO configuration"
55
+ },
56
+ "cloudProvider": {
57
+ "type": {
58
+ "Aws": "Amazon Web Services",
59
+ "Azure": "Microsoft Azure",
60
+ "None": "No cloud provider connected yet"
61
+ },
62
+ "label": "Cloud Provider",
63
+ "description": "Primary cloud infrastructure provider for deployments"
64
+ },
65
+ "cloudCredentials": {
66
+ "type": "Json?",
67
+ "label": "Cloud Credentials",
68
+ "description": "Encrypted cloud provider credentials (stored as structured JSON)"
69
+ },
70
+ "gitProvider": {
71
+ "type": {
72
+ "Github": "GitHub",
73
+ "Gitlab": "GitLab",
74
+ "Bitbucket": "Atlassian Bitbucket",
75
+ "None": "No git provider connected yet"
76
+ },
77
+ "label": "Git Provider",
78
+ "description": "Primary git hosting provider for code repositories"
79
+ }
80
+ }
81
+ },
82
+ "Workspace": {
83
+ "description": "A shared context within an organization where teams collaborate on apps. Contains members, apps, git connections, and deployment environments.",
84
+ "schema": "Data",
85
+ "standardFields": ["id", "createdAt", "updatedAt"],
86
+ "labelField": "name",
87
+ "keyField": "slug",
88
+ "fields": {
89
+ "name": {
90
+ "type": "String",
91
+ "label": "Workspace Name",
92
+ "description": "Display name of the workspace",
93
+ "maxLength": 120
94
+ },
95
+ "slug": {
96
+ "type": "String",
97
+ "label": "Slug",
98
+ "description": "URL-friendly unique identifier within the organization",
99
+ "isUnique": true,
100
+ "maxLength": 80
101
+ },
102
+ "description": {
103
+ "type": "String?",
104
+ "label": "Description",
105
+ "description": "Optional description of the workspace's purpose"
106
+ },
107
+ "status": {
108
+ "type": {
109
+ "Active": "Workspace is operational and accessible",
110
+ "Archived": "Workspace is hidden and read-only"
111
+ },
112
+ "label": "Status",
113
+ "description": "Current lifecycle state of the workspace"
114
+ },
115
+ "organizationId": {
116
+ "type": "Organization",
117
+ "label": "Organization",
118
+ "description": "The organization this workspace belongs to"
119
+ }
120
+ }
121
+ },
122
+ "OrgMember": {
123
+ "description": "Junction model linking a user to an organization with a specific role. Controls organization-level access.",
124
+ "schema": "Data",
125
+ "standardFields": ["id", "createdAt", "updatedAt"],
126
+ "fields": {
127
+ "role": {
128
+ "type": {
129
+ "OrgAdmin": "Full administrative access to the organization",
130
+ "Member": "Standard member with access to assigned workspaces"
131
+ },
132
+ "label": "Role",
133
+ "description": "The member's role within the organization"
134
+ },
135
+ "organizationId": {
136
+ "type": "Organization",
137
+ "label": "Organization",
138
+ "description": "The organization this membership belongs to"
139
+ },
140
+ "userId": {
141
+ "type": "User",
142
+ "label": "User",
143
+ "description": "The user who is a member of this organization"
144
+ }
145
+ }
146
+ },
147
+ "WorkspaceMember": {
148
+ "description": "Junction model linking a user to a workspace with a specific role. Controls workspace-level access and permissions.",
149
+ "schema": "Data",
150
+ "standardFields": ["id", "createdAt", "updatedAt"],
151
+ "fields": {
152
+ "role": {
153
+ "type": {
154
+ "WorkspaceAdmin": "Full control over workspace settings, members, and deployments",
155
+ "Builder": "Can create and build apps within the workspace",
156
+ "Viewer": "Read-only access to apps and their status"
157
+ },
158
+ "label": "Role",
159
+ "description": "The member's role within the workspace"
160
+ },
161
+ "workspaceId": {
162
+ "type": "Workspace",
163
+ "label": "Workspace",
164
+ "description": "The workspace this membership belongs to"
165
+ },
166
+ "userId": {
167
+ "type": "User",
168
+ "label": "User",
169
+ "description": "The user who is a member of this workspace"
170
+ }
171
+ }
172
+ },
173
+ "App": {
174
+ "description": "An application being built on the Paxl platform. Progresses through concept, building, and deployment stages.",
175
+ "schema": "Data",
176
+ "standardFields": ["id", "createdAt", "updatedAt"],
177
+ "labelField": "name",
178
+ "keyField": "slug",
179
+ "fields": {
180
+ "name": {
181
+ "type": "String",
182
+ "label": "App Name",
183
+ "description": "Display name of the application",
184
+ "maxLength": 120
185
+ },
186
+ "slug": {
187
+ "type": "String",
188
+ "label": "Slug",
189
+ "description": "URL-friendly unique identifier for the app",
190
+ "isUnique": true,
191
+ "maxLength": 80
192
+ },
193
+ "description": {
194
+ "type": "String?",
195
+ "label": "Description",
196
+ "description": "Optional description of what the app does"
197
+ },
198
+ "status": {
199
+ "type": {
200
+ "Concept": "App concept is being designed",
201
+ "Building": "Code is being generated by AI agents",
202
+ "Built": "Code generation complete, ready for deployment",
203
+ "Deployed": "App is live on cloud infrastructure",
204
+ "Archived": "App is no longer active"
205
+ },
206
+ "label": "Status",
207
+ "description": "Current lifecycle stage of the application"
208
+ },
209
+ "workspaceId": {
210
+ "type": "Workspace",
211
+ "label": "Workspace",
212
+ "description": "The workspace this app belongs to"
213
+ },
214
+ "createdById": {
215
+ "type": "User",
216
+ "label": "Created By",
217
+ "description": "The user who initially created this app"
218
+ }
219
+ }
220
+ },
221
+ "AppVersion": {
222
+ "description": "A numbered version of an app's generated code. Tracks the evolution from concept through multiple build iterations.",
223
+ "schema": "Data",
224
+ "standardFields": ["id", "createdAt", "updatedAt"],
225
+ "labelField": "label",
226
+ "fields": {
227
+ "versionNumber": {
228
+ "type": "Int",
229
+ "label": "Version Number",
230
+ "description": "Sequential version number starting from 1"
231
+ },
232
+ "label": {
233
+ "type": "String?",
234
+ "label": "Label",
235
+ "description": "Optional human-readable label for this version (e.g. 'Initial build', 'Post-review fixes')",
236
+ "maxLength": 200
237
+ },
238
+ "status": {
239
+ "type": {
240
+ "Draft": "Version is being worked on",
241
+ "Current": "Active version of the app",
242
+ "Superseded": "Replaced by a newer version"
243
+ },
244
+ "label": "Status",
245
+ "description": "Version lifecycle state"
246
+ },
247
+ "appId": {
248
+ "type": "App",
249
+ "label": "App",
250
+ "description": "The app this version belongs to"
251
+ },
252
+ "gitBranch": {
253
+ "type": "String?",
254
+ "label": "Git Branch",
255
+ "description": "Name of the git branch for this version's code"
256
+ },
257
+ "gitCommitHash": {
258
+ "type": "String?",
259
+ "label": "Git Commit Hash",
260
+ "description": "SHA of the latest commit for this version"
261
+ }
262
+ }
263
+ },
264
+ "AppConcept": {
265
+ "description": "The structured concept for an app, capturing the full design specification from project brief through screens. Stores the _concept/ pipeline output.",
266
+ "schema": "Data",
267
+ "standardFields": ["id", "createdAt", "updatedAt"],
268
+ "labelField": "name",
269
+ "fields": {
270
+ "name": {
271
+ "type": "String",
272
+ "label": "Concept Name",
273
+ "description": "Working title for this concept",
274
+ "maxLength": 200
275
+ },
276
+ "status": {
277
+ "type": {
278
+ "Drafting": "Concept sections are being generated and refined",
279
+ "InReview": "All sections generated, awaiting approval",
280
+ "Approved": "Concept fully approved, ready for code generation",
281
+ "Archived": "Concept is no longer active"
282
+ },
283
+ "label": "Status",
284
+ "description": "Current phase of the concept workflow"
285
+ },
286
+ "conceptData": {
287
+ "type": "Json",
288
+ "label": "Concept Data",
289
+ "description": "Structured JSON storing the full _concept/ pipeline output (brief, features, data model, screens, brand, tech stack)"
290
+ },
291
+ "appId": {
292
+ "type": "App",
293
+ "label": "App",
294
+ "description": "The app this concept belongs to"
295
+ }
296
+ }
297
+ },
298
+ "ConceptSection": {
299
+ "description": "An individual section of an app concept (brief, features, data model, etc.). Tracks generation and review status per section.",
300
+ "schema": "Data",
301
+ "standardFields": ["id", "createdAt", "updatedAt"],
302
+ "labelField": "name",
303
+ "fields": {
304
+ "name": {
305
+ "type": "String",
306
+ "label": "Section Name",
307
+ "description": "Display name for this section",
308
+ "maxLength": 120
309
+ },
310
+ "sectionType": {
311
+ "type": {
312
+ "Brief": "Project brief and goals",
313
+ "Features": "Feature specifications",
314
+ "DataModel": "Data model and entity definitions",
315
+ "Screens": "Screen specifications and layouts",
316
+ "Brand": "Brand identity and design tokens",
317
+ "TechStack": "Technology stack selection"
318
+ },
319
+ "label": "Section Type",
320
+ "description": "Which part of the concept pipeline this section represents"
321
+ },
322
+ "status": {
323
+ "type": {
324
+ "Pending": "Not yet generated",
325
+ "Generated": "AI-generated content available for review",
326
+ "Reviewed": "User has reviewed and provided feedback",
327
+ "Approved": "Section content is finalized"
328
+ },
329
+ "label": "Status",
330
+ "description": "Review status of this section"
331
+ },
332
+ "content": {
333
+ "type": "Json",
334
+ "label": "Content",
335
+ "description": "Structured JSON content for this section (format varies by sectionType)"
336
+ },
337
+ "appConceptId": {
338
+ "type": "AppConcept",
339
+ "label": "App Concept",
340
+ "description": "The concept this section belongs to"
341
+ }
342
+ }
343
+ },
344
+ "BuildSession": {
345
+ "description": "An interactive session where AI agents generate application code from an approved concept. Tracks mode, status, and conversation history.",
346
+ "schema": "Data",
347
+ "standardFields": ["id", "createdAt", "updatedAt"],
348
+ "fields": {
349
+ "status": {
350
+ "type": {
351
+ "Idle": "Session created but generation not yet started",
352
+ "Generating": "AI agent is actively generating code",
353
+ "Previewing": "Code generated, user is previewing the result",
354
+ "Error": "Generation encountered an error"
355
+ },
356
+ "label": "Status",
357
+ "description": "Current state of the build session"
358
+ },
359
+ "mode": {
360
+ "type": {
361
+ "Agent": "Autonomous AI agent mode — generates full app from concept",
362
+ "Chat": "Conversational mode — user guides generation step by step",
363
+ "Visual": "Visual editing mode — user selects and modifies UI elements"
364
+ },
365
+ "label": "Mode",
366
+ "description": "The interaction mode for this build session"
367
+ },
368
+ "appVersionId": {
369
+ "type": "AppVersion",
370
+ "label": "App Version",
371
+ "description": "The app version being built in this session"
372
+ },
373
+ "userId": {
374
+ "type": "User",
375
+ "label": "User",
376
+ "description": "The user who started this build session"
377
+ },
378
+ "startedAt": {
379
+ "type": "DateTime",
380
+ "label": "Started At",
381
+ "description": "When this build session began"
382
+ },
383
+ "endedAt": {
384
+ "type": "DateTime?",
385
+ "label": "Ended At",
386
+ "description": "When this build session completed or was terminated"
387
+ }
388
+ }
389
+ },
390
+ "BuildMessage": {
391
+ "description": "A single message in a build session conversation between the user, AI agent, and system.",
392
+ "schema": "Data",
393
+ "standardFields": ["id", "createdAt", "updatedAt"],
394
+ "labelField": "content",
395
+ "fields": {
396
+ "role": {
397
+ "type": {
398
+ "User": "Message from the human user",
399
+ "Agent": "Response from the AI build agent",
400
+ "System": "System-generated status or error message"
401
+ },
402
+ "label": "Role",
403
+ "description": "Who sent this message"
404
+ },
405
+ "content": {
406
+ "type": "String",
407
+ "label": "Content",
408
+ "description": "The message text (may include markdown, code blocks, or structured output)"
409
+ },
410
+ "metadata": {
411
+ "type": "Json?",
412
+ "label": "Metadata",
413
+ "description": "Optional structured metadata (e.g. generation step, file changes, error details)"
414
+ },
415
+ "buildSessionId": {
416
+ "type": "BuildSession",
417
+ "label": "Build Session",
418
+ "description": "The build session this message belongs to"
419
+ }
420
+ }
421
+ },
422
+ "GitConnection": {
423
+ "description": "An OAuth connection to a git hosting provider, scoped to a workspace. Enables repo linking, code commits, and branch management.",
424
+ "schema": "Data",
425
+ "standardFields": ["id", "createdAt", "updatedAt"],
426
+ "labelField": "providerUsername",
427
+ "fields": {
428
+ "provider": {
429
+ "type": {
430
+ "Github": "GitHub",
431
+ "Gitlab": "GitLab",
432
+ "Bitbucket": "Atlassian Bitbucket"
433
+ },
434
+ "label": "Provider",
435
+ "description": "The git hosting service"
436
+ },
437
+ "status": {
438
+ "type": {
439
+ "Connecting": "OAuth flow in progress",
440
+ "Connected": "Successfully authenticated and operational",
441
+ "Error": "Connection failed or token expired",
442
+ "Revoked": "Connection explicitly disconnected by user"
443
+ },
444
+ "label": "Status",
445
+ "description": "Current state of the git connection"
446
+ },
447
+ "accessToken": {
448
+ "type": "String?",
449
+ "label": "Access Token",
450
+ "description": "Encrypted OAuth access token for API calls"
451
+ },
452
+ "refreshToken": {
453
+ "type": "String?",
454
+ "label": "Refresh Token",
455
+ "description": "Encrypted OAuth refresh token for token renewal"
456
+ },
457
+ "providerUsername": {
458
+ "type": "String?",
459
+ "label": "Provider Username",
460
+ "description": "The authenticated username on the git provider"
461
+ },
462
+ "workspaceId": {
463
+ "type": "Workspace",
464
+ "label": "Workspace",
465
+ "description": "The workspace this git connection is scoped to"
466
+ }
467
+ }
468
+ },
469
+ "GitRepo": {
470
+ "description": "A git repository linked to a workspace through a git connection. Stores code for one or more apps.",
471
+ "schema": "Data",
472
+ "standardFields": ["id", "createdAt", "updatedAt"],
473
+ "labelField": "name",
474
+ "fields": {
475
+ "name": {
476
+ "type": "String",
477
+ "label": "Repository Name",
478
+ "description": "Short name of the repository",
479
+ "maxLength": 200
480
+ },
481
+ "fullName": {
482
+ "type": "String",
483
+ "label": "Full Name",
484
+ "description": "Full qualified name including owner (e.g. 'acme-corp/inventory-app')",
485
+ "maxLength": 300
486
+ },
487
+ "defaultBranch": {
488
+ "type": "String",
489
+ "label": "Default Branch",
490
+ "description": "Name of the default branch (e.g. 'main', 'master')",
491
+ "maxLength": 100
492
+ },
493
+ "status": {
494
+ "type": {
495
+ "Linked": "Repository is actively connected and managed",
496
+ "Unlinked": "Repository has been disconnected"
497
+ },
498
+ "label": "Status",
499
+ "description": "Whether this repo is currently linked to the workspace"
500
+ },
501
+ "url": {
502
+ "type": "String",
503
+ "label": "URL",
504
+ "description": "Clone URL of the repository"
505
+ },
506
+ "gitConnectionId": {
507
+ "type": "GitConnection",
508
+ "label": "Git Connection",
509
+ "description": "The git connection used to access this repository"
510
+ },
511
+ "workspaceId": {
512
+ "type": "Workspace",
513
+ "label": "Workspace",
514
+ "description": "The workspace this repo is linked to"
515
+ }
516
+ }
517
+ },
518
+ "GitCommit": {
519
+ "description": "A git commit generated by a build session and pushed to a repository. Tracks the link between code generation and version control.",
520
+ "schema": "Data",
521
+ "standardFields": ["id", "createdAt", "updatedAt"],
522
+ "labelField": "message",
523
+ "fields": {
524
+ "commitHash": {
525
+ "type": "String",
526
+ "label": "Commit Hash",
527
+ "description": "Full SHA hash of the commit",
528
+ "maxLength": 40
529
+ },
530
+ "message": {
531
+ "type": "String",
532
+ "label": "Commit Message",
533
+ "description": "The commit message describing the changes"
534
+ },
535
+ "branch": {
536
+ "type": "String",
537
+ "label": "Branch",
538
+ "description": "Name of the branch this commit was pushed to",
539
+ "maxLength": 200
540
+ },
541
+ "appVersionId": {
542
+ "type": "AppVersion",
543
+ "label": "App Version",
544
+ "description": "The app version this commit belongs to"
545
+ },
546
+ "gitRepoId": {
547
+ "type": "GitRepo",
548
+ "label": "Git Repo",
549
+ "description": "The repository this commit was pushed to"
550
+ },
551
+ "committedAt": {
552
+ "type": "DateTime",
553
+ "label": "Committed At",
554
+ "description": "Timestamp of the commit"
555
+ }
556
+ }
557
+ },
558
+ "CloudConnection": {
559
+ "description": "A connection to a cloud infrastructure provider (AWS or Azure), scoped to an organization. Stores credentials and enables VM provisioning for deployments.",
560
+ "schema": "Data",
561
+ "standardFields": ["id", "createdAt", "updatedAt"],
562
+ "labelField": "region",
563
+ "fields": {
564
+ "provider": {
565
+ "type": {
566
+ "Aws": "Amazon Web Services",
567
+ "Azure": "Microsoft Azure"
568
+ },
569
+ "label": "Provider",
570
+ "description": "The cloud infrastructure provider"
571
+ },
572
+ "status": {
573
+ "type": {
574
+ "Configuring": "Credentials being validated",
575
+ "Connected": "Successfully authenticated and operational",
576
+ "Error": "Connection failed or credentials expired",
577
+ "Revoked": "Connection explicitly disconnected"
578
+ },
579
+ "label": "Status",
580
+ "description": "Current state of the cloud connection"
581
+ },
582
+ "credentials": {
583
+ "type": "Json?",
584
+ "label": "Credentials",
585
+ "description": "Encrypted cloud provider credentials (access keys, service principal, etc.)"
586
+ },
587
+ "region": {
588
+ "type": "String?",
589
+ "label": "Region",
590
+ "description": "Default cloud region for provisioning (e.g. 'eu-central-1', 'westeurope')",
591
+ "maxLength": 50
592
+ },
593
+ "organizationId": {
594
+ "type": "Organization",
595
+ "label": "Organization",
596
+ "description": "The organization this cloud connection belongs to"
597
+ }
598
+ }
599
+ },
600
+ "Deployment": {
601
+ "description": "A deployment of an app version to cloud infrastructure. Tracks the full lifecycle from queuing through provisioning, deploying, and running.",
602
+ "schema": "Data",
603
+ "standardFields": ["id", "createdAt", "updatedAt"],
604
+ "labelField": "url",
605
+ "fields": {
606
+ "status": {
607
+ "type": {
608
+ "Queued": "Waiting to begin provisioning",
609
+ "Provisioning": "VM and infrastructure being set up",
610
+ "Deploying": "Application code being deployed to provisioned infrastructure",
611
+ "Running": "Application is live and serving traffic",
612
+ "Failed": "Deployment encountered an error",
613
+ "Stopped": "Application was manually stopped or replaced"
614
+ },
615
+ "label": "Status",
616
+ "description": "Current state of the deployment pipeline"
617
+ },
618
+ "appVersionId": {
619
+ "type": "AppVersion",
620
+ "label": "App Version",
621
+ "description": "The app version being deployed"
622
+ },
623
+ "cloudConnectionId": {
624
+ "type": "CloudConnection",
625
+ "label": "Cloud Connection",
626
+ "description": "The cloud connection used for infrastructure provisioning"
627
+ },
628
+ "vmInstanceId": {
629
+ "type": "String?",
630
+ "label": "VM Instance ID",
631
+ "description": "Cloud provider instance identifier for the provisioned VM"
632
+ },
633
+ "url": {
634
+ "type": "String?",
635
+ "label": "Deployment URL",
636
+ "description": "Public URL where the deployed app is accessible"
637
+ },
638
+ "startedAt": {
639
+ "type": "DateTime",
640
+ "label": "Started At",
641
+ "description": "When the deployment process began"
642
+ },
643
+ "completedAt": {
644
+ "type": "DateTime?",
645
+ "label": "Completed At",
646
+ "description": "When the deployment completed (success or failure)"
647
+ },
648
+ "errorMessage": {
649
+ "type": "String?",
650
+ "label": "Error Message",
651
+ "description": "Error details if the deployment failed"
652
+ }
653
+ }
654
+ },
655
+ "DeploymentEnvironment": {
656
+ "description": "A named deployment target (dev, staging, production) within a workspace. Provides environment-specific configuration and domain mapping.",
657
+ "schema": "Data",
658
+ "standardFields": ["id", "createdAt", "updatedAt"],
659
+ "labelField": "name",
660
+ "fields": {
661
+ "name": {
662
+ "type": "String",
663
+ "label": "Environment Name",
664
+ "description": "Display name of the environment",
665
+ "maxLength": 80
666
+ },
667
+ "environmentType": {
668
+ "type": {
669
+ "Development": "For testing during development",
670
+ "Staging": "Pre-production validation environment",
671
+ "Production": "Live environment serving end users"
672
+ },
673
+ "label": "Environment Type",
674
+ "description": "The purpose classification of this environment"
675
+ },
676
+ "status": {
677
+ "type": {
678
+ "Active": "Environment is available for deployments",
679
+ "Inactive": "Environment is disabled"
680
+ },
681
+ "label": "Status",
682
+ "description": "Whether this environment is currently available"
683
+ },
684
+ "domain": {
685
+ "type": "String?",
686
+ "label": "Domain",
687
+ "description": "Custom domain or subdomain assigned to this environment",
688
+ "maxLength": 253
689
+ },
690
+ "workspaceId": {
691
+ "type": "Workspace",
692
+ "label": "Workspace",
693
+ "description": "The workspace this environment belongs to"
694
+ }
695
+ }
696
+ },
697
+ "Template": {
698
+ "description": "A reusable app concept template that can be forked into new apps. Published from existing approved concepts.",
699
+ "schema": "Data",
700
+ "standardFields": ["id", "createdAt", "updatedAt"],
701
+ "labelField": "name",
702
+ "keyField": "slug",
703
+ "fields": {
704
+ "name": {
705
+ "type": "String",
706
+ "label": "Template Name",
707
+ "description": "Display name of the template",
708
+ "maxLength": 200
709
+ },
710
+ "slug": {
711
+ "type": "String",
712
+ "label": "Slug",
713
+ "description": "URL-friendly unique identifier for the template",
714
+ "isUnique": true,
715
+ "maxLength": 80
716
+ },
717
+ "description": {
718
+ "type": "String",
719
+ "label": "Description",
720
+ "description": "Detailed description of what this template produces"
721
+ },
722
+ "category": {
723
+ "type": "String",
724
+ "label": "Category",
725
+ "description": "Template category (e.g. 'CRM', 'Project Management', 'HR')",
726
+ "maxLength": 80
727
+ },
728
+ "status": {
729
+ "type": {
730
+ "Draft": "Template awaiting review before publishing",
731
+ "Published": "Template is available in the marketplace",
732
+ "Deprecated": "Template is no longer recommended for use"
733
+ },
734
+ "label": "Status",
735
+ "description": "Publication lifecycle state"
736
+ },
737
+ "conceptData": {
738
+ "type": "Json",
739
+ "label": "Concept Data",
740
+ "description": "Full concept pipeline snapshot that gets forked into new apps"
741
+ },
742
+ "organizationId": {
743
+ "type": "Organization?",
744
+ "label": "Organization",
745
+ "description": "The organization that owns this template (null for platform-provided templates)"
746
+ },
747
+ "createdById": {
748
+ "type": "User",
749
+ "label": "Created By",
750
+ "description": "The user who published this template"
751
+ },
752
+ "usageCount": {
753
+ "type": "Int",
754
+ "label": "Usage Count",
755
+ "description": "Number of times this template has been forked",
756
+ "isReadonly": true
757
+ }
758
+ }
759
+ },
760
+ "WebhookEndpoint": {
761
+ "description": "A configured webhook endpoint for a generated app. Fires HTTP callbacks on data change events to enable external system integration.",
762
+ "schema": "Data",
763
+ "standardFields": ["id", "createdAt", "updatedAt"],
764
+ "labelField": "url",
765
+ "fields": {
766
+ "url": {
767
+ "type": "String",
768
+ "label": "Endpoint URL",
769
+ "description": "The HTTP(S) URL that receives webhook payloads"
770
+ },
771
+ "events": {
772
+ "type": "Json",
773
+ "label": "Events",
774
+ "description": "Array of event types this endpoint listens for (e.g. ['record.created', 'record.updated'])"
775
+ },
776
+ "status": {
777
+ "type": {
778
+ "Active": "Webhook is enabled and delivering payloads",
779
+ "Paused": "Webhook is temporarily disabled",
780
+ "Error": "Webhook has exceeded max retries and is disabled"
781
+ },
782
+ "label": "Status",
783
+ "description": "Current delivery state of the webhook"
784
+ },
785
+ "secret": {
786
+ "type": "String",
787
+ "label": "Secret",
788
+ "description": "HMAC secret for payload signature verification"
789
+ },
790
+ "appId": {
791
+ "type": "App",
792
+ "label": "App",
793
+ "description": "The app this webhook is configured for"
794
+ },
795
+ "lastTriggeredAt": {
796
+ "type": "DateTime?",
797
+ "label": "Last Triggered At",
798
+ "description": "Timestamp of the most recent webhook delivery attempt"
799
+ }
800
+ }
801
+ },
802
+ "ApiKey": {
803
+ "description": "An API key for programmatic access to a generated app's data. Scoped to an organization with rate limiting.",
804
+ "schema": "Data",
805
+ "standardFields": ["id", "createdAt", "updatedAt"],
806
+ "labelField": "name",
807
+ "fields": {
808
+ "name": {
809
+ "type": "String",
810
+ "label": "Key Name",
811
+ "description": "Human-readable label for this API key",
812
+ "maxLength": 120
813
+ },
814
+ "keyHash": {
815
+ "type": "String",
816
+ "label": "Key Hash",
817
+ "description": "Hashed API key value (the plaintext is only shown once at creation)"
818
+ },
819
+ "status": {
820
+ "type": {
821
+ "Active": "Key is valid and accepting requests",
822
+ "Revoked": "Key has been permanently disabled"
823
+ },
824
+ "label": "Status",
825
+ "description": "Whether this key is currently usable"
826
+ },
827
+ "lastUsedAt": {
828
+ "type": "DateTime?",
829
+ "label": "Last Used At",
830
+ "description": "Timestamp of the most recent API call using this key"
831
+ },
832
+ "organizationId": {
833
+ "type": "Organization",
834
+ "label": "Organization",
835
+ "description": "The organization this API key belongs to"
836
+ },
837
+ "createdById": {
838
+ "type": "User",
839
+ "label": "Created By",
840
+ "description": "The user who generated this API key"
841
+ }
842
+ }
843
+ },
844
+ "Subscription": {
845
+ "description": "A billing subscription for an organization's use of the Paxl platform. Tracks plan, status, and billing period.",
846
+ "schema": "Data",
847
+ "standardFields": ["id", "createdAt", "updatedAt"],
848
+ "fields": {
849
+ "plan": {
850
+ "type": {
851
+ "Trial": "Free trial period with full access",
852
+ "Starter": "Small teams, limited apps and deployments",
853
+ "Professional": "Growing teams with more capacity",
854
+ "Enterprise": "Unlimited capacity with priority support and SLA"
855
+ },
856
+ "label": "Plan",
857
+ "description": "The subscription tier"
858
+ },
859
+ "status": {
860
+ "type": {
861
+ "Trial": "In free trial period",
862
+ "Active": "Subscription is paid and active",
863
+ "PastDue": "Payment failed, in grace period",
864
+ "Cancelled": "Subscription terminated"
865
+ },
866
+ "label": "Status",
867
+ "description": "Current billing state"
868
+ },
869
+ "organizationId": {
870
+ "type": "Organization",
871
+ "label": "Organization",
872
+ "description": "The organization this subscription covers"
873
+ },
874
+ "currentPeriodStart": {
875
+ "type": "DateTime",
876
+ "label": "Period Start",
877
+ "description": "Start of the current billing period"
878
+ },
879
+ "currentPeriodEnd": {
880
+ "type": "DateTime",
881
+ "label": "Period End",
882
+ "description": "End of the current billing period"
883
+ },
884
+ "maxApps": {
885
+ "type": "Int",
886
+ "label": "Max Apps",
887
+ "description": "Maximum number of apps allowed under this plan"
888
+ },
889
+ "maxWorkspaces": {
890
+ "type": "Int",
891
+ "label": "Max Workspaces",
892
+ "description": "Maximum number of workspaces allowed under this plan"
893
+ }
894
+ }
895
+ }
896
+ }
897
+ }