@rathnasgala2/schemas 3.29.0 → 3.30.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.
@@ -629,6 +629,93 @@ components:
629
629
  - description
630
630
  - group
631
631
  type: object
632
+ AssistanceRequest:
633
+ additionalProperties: false
634
+ description: "SCHEMA-3.30.0: a request the site made to the Galascribe team."
635
+ properties:
636
+ closedAt:
637
+ $ref: "#/components/schemas/PortableProblemRfc3339"
638
+ description: When an operator closed the request. Absent while it is `OPEN`.
639
+ createdAt:
640
+ $ref: "#/components/schemas/PortableProblemRfc3339"
641
+ domainName:
642
+ description: The domain the request is about (`DOMAIN_REGISTRATION`, `DOMAIN_MOVE`). Absent for other kinds.
643
+ maxLength: 253
644
+ minLength: 1
645
+ pattern: ^[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?$
646
+ type: string
647
+ findingCodes:
648
+ description: The hosting-check findings the request is about (`GALASCRIBE_HOSTING`). Absent for other kinds.
649
+ items:
650
+ $ref: "#/components/schemas/HostingFindingCode"
651
+ maxItems: 8
652
+ type: array
653
+ uniqueItems: true
654
+ kind:
655
+ $ref: "#/components/schemas/AssistanceRequestKind"
656
+ requestId:
657
+ format: uuid
658
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
659
+ type: string
660
+ state:
661
+ $ref: "#/components/schemas/AssistanceRequestState"
662
+ required:
663
+ - requestId
664
+ - kind
665
+ - state
666
+ - createdAt
667
+ type: object
668
+ AssistanceRequestCreate:
669
+ additionalProperties: false
670
+ description: "SCHEMA-3.30.0: a request for help with a site."
671
+ properties:
672
+ domainName:
673
+ description: The domain the request is about (`DOMAIN_REGISTRATION`, `DOMAIN_MOVE`). Absent for other kinds.
674
+ maxLength: 253
675
+ minLength: 1
676
+ pattern: ^[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?$
677
+ type: string
678
+ findingCodes:
679
+ description: The hosting-check findings the request is about (`GALASCRIBE_HOSTING`). Absent for other kinds.
680
+ items:
681
+ $ref: "#/components/schemas/HostingFindingCode"
682
+ maxItems: 8
683
+ type: array
684
+ uniqueItems: true
685
+ kind:
686
+ $ref: "#/components/schemas/AssistanceRequestKind"
687
+ note:
688
+ description: Anything the person wants the Galascribe team to know.
689
+ maxLength: 1000
690
+ type: string
691
+ required:
692
+ - kind
693
+ type: object
694
+ AssistanceRequestKind:
695
+ description: "`GALASCRIBE_HOSTING`: host what GitHub Pages does not allow. `DOMAIN_REGISTRATION`: register the included domain by hand. `DOMAIN_MOVE`: move a registered domain to the author's own account."
696
+ enum:
697
+ - GALASCRIBE_HOSTING
698
+ - DOMAIN_REGISTRATION
699
+ - DOMAIN_MOVE
700
+ type: string
701
+ AssistanceRequestList:
702
+ additionalProperties: false
703
+ properties:
704
+ items:
705
+ items:
706
+ $ref: "#/components/schemas/AssistanceRequest"
707
+ maxItems: 100
708
+ minItems: 0
709
+ type: array
710
+ required:
711
+ - items
712
+ type: object
713
+ AssistanceRequestState:
714
+ description: "`OPEN`: waiting for the Galascribe team. `CLOSED`: an operator finished it."
715
+ enum:
716
+ - OPEN
717
+ - CLOSED
718
+ type: string
632
719
  AudienceAuthor:
633
720
  additionalProperties: false
634
721
  description: "SCHEMA-3.23.0: an author of a site as the site names it in `gala/publication.json`. `id` is the author's stable id; follows are keyed by (publication, author id)."
@@ -2289,6 +2376,24 @@ components:
2289
2376
  type: string
2290
2377
  expiresAt:
2291
2378
  $ref: "#/components/schemas/PortableProblemRfc3339"
2379
+ galascribeManaged:
2380
+ additionalProperties: false
2381
+ description: |
2382
+ SCHEMA-3.30.0. Present when Galascribe owns the DNS records of this
2383
+ domain, so the person is never asked to add records and a client
2384
+ shows the steps as "Galascribe is setting this up". Absent for a
2385
+ domain the person brought. `GALASCRIBE_ADDRESS`: a free
2386
+ `name.galascribe.com` address (Basic and Pro). `INCLUDED_DOMAIN`: the
2387
+ domain registered for the organization with its plan (Pro).
2388
+ properties:
2389
+ kind:
2390
+ enum:
2391
+ - GALASCRIBE_ADDRESS
2392
+ - INCLUDED_DOMAIN
2393
+ type: string
2394
+ required:
2395
+ - kind
2396
+ type: object
2292
2397
  hostname:
2293
2398
  description: Lower-case ASCII (IDNA) hostname.
2294
2399
  maxLength: 253
@@ -2485,6 +2590,182 @@ components:
2485
2590
  - code
2486
2591
  - detail
2487
2592
  type: object
2593
+ DomainRegistrant:
2594
+ additionalProperties: false
2595
+ description: The person or business that will own the domain. Sent to the registrar and never stored, logged or returned by Galascribe (write-only).
2596
+ properties:
2597
+ address:
2598
+ $ref: "#/components/schemas/DomainRegistrationAddress"
2599
+ email:
2600
+ format: email
2601
+ maxLength: 254
2602
+ minLength: 3
2603
+ type: string
2604
+ name:
2605
+ maxLength: 200
2606
+ minLength: 1
2607
+ type: string
2608
+ organization:
2609
+ description: The business name, when the owner is a business.
2610
+ maxLength: 200
2611
+ minLength: 1
2612
+ type: string
2613
+ phone:
2614
+ description: Country code and number in the form `+1.5555555555`.
2615
+ pattern: ^\+[0-9]{1,3}\.[0-9]{4,14}$
2616
+ type: string
2617
+ required:
2618
+ - name
2619
+ - email
2620
+ - phone
2621
+ - address
2622
+ type: object
2623
+ DomainRegistration:
2624
+ additionalProperties: false
2625
+ description: "SCHEMA-3.30.0: the registration of an included domain. The registrant is never part of it."
2626
+ properties:
2627
+ createdAt:
2628
+ $ref: "#/components/schemas/PortableProblemRfc3339"
2629
+ domainId:
2630
+ description: The domain binding once the site uses the domain (`ATTACHED`).
2631
+ format: uuid
2632
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
2633
+ type: string
2634
+ domainName:
2635
+ maxLength: 253
2636
+ minLength: 1
2637
+ pattern: ^[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?$
2638
+ type: string
2639
+ failure:
2640
+ additionalProperties: false
2641
+ description: Present for `FAILED` and `ACTION_REQUIRED`.
2642
+ properties:
2643
+ code:
2644
+ description: A short machine-readable reason.
2645
+ maxLength: 100
2646
+ minLength: 1
2647
+ type: string
2648
+ detail:
2649
+ description: A plain sentence for the person.
2650
+ maxLength: 500
2651
+ minLength: 1
2652
+ type: string
2653
+ required:
2654
+ - code
2655
+ - detail
2656
+ type: object
2657
+ registrationId:
2658
+ format: uuid
2659
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
2660
+ type: string
2661
+ state:
2662
+ $ref: "#/components/schemas/DomainRegistrationState"
2663
+ updatedAt:
2664
+ $ref: "#/components/schemas/PortableProblemRfc3339"
2665
+ required:
2666
+ - registrationId
2667
+ - domainName
2668
+ - state
2669
+ - createdAt
2670
+ - updatedAt
2671
+ type: object
2672
+ DomainRegistrationAddress:
2673
+ additionalProperties: false
2674
+ properties:
2675
+ city:
2676
+ maxLength: 100
2677
+ minLength: 1
2678
+ type: string
2679
+ countryCode:
2680
+ description: ISO 3166-1 alpha-2, upper case.
2681
+ pattern: ^[A-Z]{2}$
2682
+ type: string
2683
+ postalCode:
2684
+ maxLength: 20
2685
+ minLength: 1
2686
+ type: string
2687
+ region:
2688
+ description: State or province (the region), when the country has them.
2689
+ maxLength: 100
2690
+ minLength: 1
2691
+ type: string
2692
+ street:
2693
+ maxLength: 200
2694
+ minLength: 1
2695
+ type: string
2696
+ required:
2697
+ - street
2698
+ - city
2699
+ - postalCode
2700
+ - countryCode
2701
+ type: object
2702
+ DomainRegistrationCheck:
2703
+ additionalProperties: false
2704
+ description: "SCHEMA-3.30.0: whether a name can be registered as the included domain. It carries no price: the domain is included in the plan."
2705
+ properties:
2706
+ name:
2707
+ description: The name that was checked, as Galascribe read it.
2708
+ maxLength: 253
2709
+ minLength: 1
2710
+ type: string
2711
+ reason:
2712
+ $ref: "#/components/schemas/DomainRegistrationCheckReason"
2713
+ description: Why the name cannot be registered. Absent when `registrable` is true.
2714
+ registrable:
2715
+ type: boolean
2716
+ required:
2717
+ - name
2718
+ - registrable
2719
+ type: object
2720
+ DomainRegistrationCheckReason:
2721
+ description: "`UNAVAILABLE`: already registered. `EXTENSION_NOT_SUPPORTED`: Galascribe cannot register that ending. `PREMIUM`: a premium name. `OVER_PRICE_CAP`: the first-year price is above what the included domain covers. `INVALID_NAME`: not a usable domain name. `PLAN_REQUIRED`: the plan has no included domain. `ALREADY_USED`: the organization already used its included domain. `NOT_CONFIGURED`: registration is not set up on this deployment."
2722
+ enum:
2723
+ - UNAVAILABLE
2724
+ - EXTENSION_NOT_SUPPORTED
2725
+ - PREMIUM
2726
+ - OVER_PRICE_CAP
2727
+ - INVALID_NAME
2728
+ - PLAN_REQUIRED
2729
+ - ALREADY_USED
2730
+ - NOT_CONFIGURED
2731
+ type: string
2732
+ DomainRegistrationCreate:
2733
+ additionalProperties: false
2734
+ description: "SCHEMA-3.30.0: register the included domain."
2735
+ properties:
2736
+ domainName:
2737
+ description: The domain to register, for example `mayawrites.com`.
2738
+ maxLength: 253
2739
+ minLength: 1
2740
+ type: string
2741
+ registrant:
2742
+ $ref: "#/components/schemas/DomainRegistrant"
2743
+ required:
2744
+ - domainName
2745
+ - registrant
2746
+ type: object
2747
+ DomainRegistrationList:
2748
+ additionalProperties: false
2749
+ properties:
2750
+ items:
2751
+ items:
2752
+ $ref: "#/components/schemas/DomainRegistration"
2753
+ maxItems: 20
2754
+ minItems: 0
2755
+ type: array
2756
+ required:
2757
+ - items
2758
+ type: object
2759
+ DomainRegistrationState:
2760
+ description: "`REQUESTED`: accepted, not started. `REGISTERING`: the registrar is registering the name. `ACTION_REQUIRED`: the registrar needs something Galascribe cannot do alone; the person may ask for help. `REGISTERED`: the name is bought and the site does not use it yet. `ATTACHED`: the site uses it; `domainId` names the binding. `FAILED`: registration did not happen; `failure` says why."
2761
+ enum:
2762
+ - REQUESTED
2763
+ - REGISTERING
2764
+ - ACTION_REQUIRED
2765
+ - REGISTERED
2766
+ - ATTACHED
2767
+ - FAILED
2768
+ type: string
2488
2769
  DomainRouting:
2489
2770
  additionalProperties: false
2490
2771
  properties:
@@ -2618,6 +2899,42 @@ components:
2618
2899
  - displayName
2619
2900
  - followedAt
2620
2901
  type: object
2902
+ GalascribeAddressCheck:
2903
+ additionalProperties: false
2904
+ description: "SCHEMA-3.30.0: whether a label can become the site's Galascribe address."
2905
+ properties:
2906
+ available:
2907
+ type: boolean
2908
+ hostname:
2909
+ description: The full address, when the label is well formed.
2910
+ maxLength: 253
2911
+ minLength: 1
2912
+ pattern: ^[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?$
2913
+ type: string
2914
+ label:
2915
+ $ref: "#/components/schemas/GalascribeAddressLabel"
2916
+ reason:
2917
+ $ref: "#/components/schemas/GalascribeAddressReason"
2918
+ description: Why the label cannot be used. Absent when `available` is true.
2919
+ required:
2920
+ - label
2921
+ - available
2922
+ type: object
2923
+ GalascribeAddressLabel:
2924
+ description: "The part before `.galascribe.com`: 3 to 63 lowercase letters, digits and hyphens, not starting or ending with a hyphen. A label that is not usable is answered by the check as `INVALID`."
2925
+ maxLength: 63
2926
+ minLength: 1
2927
+ type: string
2928
+ GalascribeAddressReason:
2929
+ description: "`INVALID`: not a usable label. `RESERVED`: a name Galascribe keeps for itself. `TAKEN`: another site has it or something already exists at that name. `PLAN_REQUIRED`: the plan has no Galascribe address. `NOT_CONFIGURED`: not set up on this deployment. `ALREADY_HAS_DOMAIN`: the site already has a domain that is not detached."
2930
+ enum:
2931
+ - INVALID
2932
+ - RESERVED
2933
+ - TAKEN
2934
+ - PLAN_REQUIRED
2935
+ - NOT_CONFIGURED
2936
+ - ALREADY_HAS_DOMAIN
2937
+ type: string
2621
2938
  GetClaimsByTokenResponse:
2622
2939
  additionalProperties: false
2623
2940
  properties:
@@ -3098,6 +3415,8 @@ components:
3098
3415
  - items
3099
3416
  - hasMore
3100
3417
  type: object
3418
+ GetOrganizationsByOrganizationIdPlanResponse:
3419
+ $ref: "#/components/schemas/OrganizationPlan"
3101
3420
  GetOrganizationsByOrganizationIdPublicationImportsByImportIdResponse:
3102
3421
  allOf:
3103
3422
  - $ref: "#/components/schemas/PublicationImport"
@@ -3251,6 +3570,8 @@ components:
3251
3570
  - catalog
3252
3571
  - openChange
3253
3572
  type: object
3573
+ GetOrganizationsByOrganizationIdPublicationsByPublicationIdAssistanceRequestsResponse:
3574
+ $ref: "#/components/schemas/AssistanceRequestList"
3254
3575
  GetOrganizationsByOrganizationIdPublicationsByPublicationIdContactFormSettingsResponse:
3255
3576
  $ref: "#/components/schemas/ContactFormSettings"
3256
3577
  GetOrganizationsByOrganizationIdPublicationsByPublicationIdContactMessagesResponse:
@@ -3613,6 +3934,10 @@ components:
3613
3934
  - version
3614
3935
  - state
3615
3936
  type: object
3937
+ GetOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsByRegistrationIdResponse:
3938
+ $ref: "#/components/schemas/DomainRegistration"
3939
+ GetOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsResponse:
3940
+ $ref: "#/components/schemas/DomainRegistrationList"
3616
3941
  GetOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsByDomainIdDnsConnectionsByConnectionIdResponse:
3617
3942
  allOf:
3618
3943
  - $ref: "#/components/schemas/DnsConnection"
@@ -4206,6 +4531,8 @@ components:
4206
4531
  type: object
4207
4532
  GetOrganizationsByOrganizationIdPublicationsByPublicationIdSharingSettingsResponse:
4208
4533
  $ref: "#/components/schemas/SharingSettings"
4534
+ GetOrganizationsByOrganizationIdPublicationsByPublicationIdSiteHostingCheckResponse:
4535
+ $ref: "#/components/schemas/SiteHostingCheck"
4209
4536
  GetOrganizationsByOrganizationIdPublicationsByPublicationIdSiteResponse:
4210
4537
  additionalProperties: false
4211
4538
  allOf:
@@ -4551,6 +4878,8 @@ components:
4551
4878
  required:
4552
4879
  - items
4553
4880
  type: object
4881
+ GetPlatformAssistanceRequestsResponse:
4882
+ $ref: "#/components/schemas/PlatformAssistanceRequestPage"
4554
4883
  GetPlatformAuditEventsResponse:
4555
4884
  additionalProperties: false
4556
4885
  allOf:
@@ -5846,6 +6175,103 @@ components:
5846
6175
  - reasonCode
5847
6176
  - retryable
5848
6177
  type: object
6178
+ HostingFinding:
6179
+ additionalProperties: false
6180
+ description: "SCHEMA-3.30.0: one thing the hosting check found. There is at most one finding per `code`."
6181
+ properties:
6182
+ bytes:
6183
+ description: "The measured size in bytes for a size finding: the total for the site and media findings, the largest file for the file findings."
6184
+ format: int64
6185
+ minimum: 0
6186
+ type: integer
6187
+ code:
6188
+ $ref: "#/components/schemas/HostingFindingCode"
6189
+ items:
6190
+ description: Up to 20 of the files or pages concerned, largest or first found first. `pathCount` is the full number.
6191
+ items:
6192
+ $ref: "#/components/schemas/HostingFindingItem"
6193
+ maxItems: 20
6194
+ type: array
6195
+ limitBytes:
6196
+ description: The threshold in bytes the finding is measured against, for a size finding.
6197
+ format: int64
6198
+ minimum: 0
6199
+ type: integer
6200
+ pathCount:
6201
+ description: How many files or pages the finding concerns in all.
6202
+ format: int64
6203
+ minimum: 0
6204
+ type: integer
6205
+ severity:
6206
+ $ref: "#/components/schemas/HostingFindingSeverity"
6207
+ signals:
6208
+ description: What made a `COMMERCE_PAGE` or `SENSITIVE_FORM` finding fire. Absent for other codes.
6209
+ items:
6210
+ $ref: "#/components/schemas/HostingFindingSignal"
6211
+ maxItems: 5
6212
+ type: array
6213
+ uniqueItems: true
6214
+ required:
6215
+ - code
6216
+ - severity
6217
+ - items
6218
+ - pathCount
6219
+ type: object
6220
+ HostingFindingCode:
6221
+ description: "`SITE_OVER_SIZE_LIMIT`: the published files add up to 1 GiB or more, the most GitHub Pages serves. `SITE_NEAR_SIZE_LIMIT`: they add up to 800 MiB or more. `FILE_OVER_SIZE_LIMIT`: one file is 100 MiB or more, which GitHub refuses. `LARGE_FILE`: one file is 50 MiB or more, which GitHub warns about. `DIRECTORY_TOO_LARGE`: one folder holds more than 3,000 entries. `HEAVY_MEDIA`: images, audio, video and PDFs together are 500 MiB or more. `COMMERCE_PAGE`: a page links to a checkout and uses shop words, or is named like a shop, and GitHub does not allow sites that are mainly for selling. `SENSITIVE_FORM`: a page has a password or card-number field, and GitHub does not allow sending passwords or card numbers."
6222
+ enum:
6223
+ - SITE_OVER_SIZE_LIMIT
6224
+ - SITE_NEAR_SIZE_LIMIT
6225
+ - FILE_OVER_SIZE_LIMIT
6226
+ - LARGE_FILE
6227
+ - DIRECTORY_TOO_LARGE
6228
+ - HEAVY_MEDIA
6229
+ - COMMERCE_PAGE
6230
+ - SENSITIVE_FORM
6231
+ type: string
6232
+ HostingFindingItem:
6233
+ additionalProperties: false
6234
+ description: One file or page a finding is about.
6235
+ properties:
6236
+ bytes:
6237
+ description: The file size in bytes, for size findings.
6238
+ format: int64
6239
+ minimum: 0
6240
+ type: integer
6241
+ path:
6242
+ description: The path in the site's repository.
6243
+ maxLength: 1024
6244
+ minLength: 1
6245
+ type: string
6246
+ title:
6247
+ description: The page's title, when it has one.
6248
+ maxLength: 300
6249
+ minLength: 1
6250
+ type: string
6251
+ required:
6252
+ - path
6253
+ type: object
6254
+ HostingFindingSeverity:
6255
+ description: "`LIMIT`: GitHub will refuse the deploy or stop serving the site. `WARNING`: a risk that does not stop publishing."
6256
+ enum:
6257
+ - LIMIT
6258
+ - WARNING
6259
+ type: string
6260
+ HostingFindingSignal:
6261
+ description: 'What made a `COMMERCE_PAGE` or `SENSITIVE_FORM` finding fire. `CHECKOUT_LINK`: a link to a known checkout or payment host. `SHOP_WORDS`: words such as "add to cart" or "buy now". `SHOP_ADDRESS`: a page address or title such as shop, store, cart or checkout. `PASSWORD_FIELD`: a password input in raw HTML. `CARD_FIELD`: a card-number or security-code input in raw HTML.'
6262
+ enum:
6263
+ - CHECKOUT_LINK
6264
+ - SHOP_WORDS
6265
+ - SHOP_ADDRESS
6266
+ - PASSWORD_FIELD
6267
+ - CARD_FIELD
6268
+ type: string
6269
+ HostingOffer:
6270
+ description: "`UPGRADE`: the Free plan can move to a paid plan, which includes Galascribe hosting. `REQUEST_GALASCRIBE_HOSTING`: a paid plan can ask Galascribe to host what GitHub does not allow."
6271
+ enum:
6272
+ - UPGRADE
6273
+ - REQUEST_GALASCRIBE_HOSTING
6274
+ type: string
5849
6275
  IncomingOwnerTransfer:
5850
6276
  additionalProperties: false
5851
6277
  description: A pending ownership transfer addressed to the caller. `consequenceDigest` is what `:accept` quotes back.
@@ -7873,11 +8299,67 @@ components:
7873
8299
  - startedAt
7874
8300
  type: object
7875
8301
  OrganizationKind:
7876
- description: "`SINGLE`: a personal (Pro) organization with one owner and no other members. `COLLABORATIVE`: an Enterprise organization with members, roles and custom roles (SCHEMA-3.3.0)."
8302
+ description: "`SINGLE`: a personal organization with one owner and no other members. It becomes `COLLABORATIVE` with its first invitation, on any plan (SCHEMA-3.30.0). `COLLABORATIVE`: an organization with members, roles and custom roles (SCHEMA-3.3.0)."
7877
8303
  enum:
7878
8304
  - SINGLE
7879
8305
  - COLLABORATIVE
7880
8306
  type: string
8307
+ OrganizationPlan:
8308
+ additionalProperties: false
8309
+ description: "SCHEMA-3.30.0: an organization's plan as the App needs it. `tier` is the API tier (`FREE`, `PRO`, `BUSINESS`); the plans are named Free, Basic and Pro in billing and in the App, so `PRO` is Basic and `BUSINESS` is Pro."
8310
+ properties:
8311
+ collaborators:
8312
+ additionalProperties: false
8313
+ description: How many people besides the owners the plan lets the organization have.
8314
+ properties:
8315
+ limit:
8316
+ description: The most collaborators the plan allows, or null when the plan has no limit.
8317
+ format: int64
8318
+ minimum: 0
8319
+ type:
8320
+ - integer
8321
+ - "null"
8322
+ used:
8323
+ description: Active members other than owners plus invitations still `PENDING`. An invitation counts from the moment it is sent.
8324
+ format: int64
8325
+ minimum: 0
8326
+ type: integer
8327
+ required:
8328
+ - limit
8329
+ - used
8330
+ type: object
8331
+ entitlements:
8332
+ additionalProperties: false
8333
+ description: What the plan includes. A client hides what is false and offers the upgrade.
8334
+ properties:
8335
+ galascribeAddress:
8336
+ description: A free `name.galascribe.com` address for a site (Basic and Pro).
8337
+ type: boolean
8338
+ galascribeHosting:
8339
+ description: Galascribe can host what GitHub Pages does not allow, on request (Basic and Pro).
8340
+ type: boolean
8341
+ includedDomain:
8342
+ description: One domain registered for the organization at no charge (Pro).
8343
+ type: boolean
8344
+ required:
8345
+ - galascribeAddress
8346
+ - includedDomain
8347
+ - galascribeHosting
8348
+ type: object
8349
+ galascribeAddressZone:
8350
+ description: The zone Galascribe addresses are created in, for example `galascribe.com`. Absent when Galascribe addresses are not configured on this deployment; a client then hides the option.
8351
+ maxLength: 253
8352
+ minLength: 1
8353
+ pattern: ^[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?$
8354
+ type: string
8355
+ tier:
8356
+ $ref: "#/components/schemas/PlatformPlanKey"
8357
+ description: The plan tier.
8358
+ required:
8359
+ - tier
8360
+ - collaborators
8361
+ - entitlements
8362
+ type: object
7881
8363
  OrganizationState:
7882
8364
  enum:
7883
8365
  - PROVISIONING
@@ -8464,6 +8946,114 @@ components:
8464
8946
  - content:write
8465
8947
  - publish
8466
8948
  type: string
8949
+ PlatformAssistanceRequest:
8950
+ additionalProperties: false
8951
+ description: "SCHEMA-3.30.0: an assistance request with the organization and site it came from, for the platform operator."
8952
+ properties:
8953
+ closedAt:
8954
+ $ref: "#/components/schemas/PortableProblemRfc3339"
8955
+ description: When an operator closed the request. Absent while it is `OPEN`.
8956
+ createdAt:
8957
+ $ref: "#/components/schemas/PortableProblemRfc3339"
8958
+ domainName:
8959
+ description: The domain the request is about (`DOMAIN_REGISTRATION`, `DOMAIN_MOVE`). Absent for other kinds.
8960
+ maxLength: 253
8961
+ minLength: 1
8962
+ pattern: ^[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?$
8963
+ type: string
8964
+ findingCodes:
8965
+ description: The hosting-check findings the request is about (`GALASCRIBE_HOSTING`). Absent for other kinds.
8966
+ items:
8967
+ $ref: "#/components/schemas/HostingFindingCode"
8968
+ maxItems: 8
8969
+ type: array
8970
+ uniqueItems: true
8971
+ kind:
8972
+ $ref: "#/components/schemas/AssistanceRequestKind"
8973
+ note:
8974
+ description: The person's note.
8975
+ maxLength: 1000
8976
+ type: string
8977
+ organizationId:
8978
+ format: uuid
8979
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
8980
+ type: string
8981
+ organizationName:
8982
+ maxLength: 200
8983
+ minLength: 1
8984
+ type: string
8985
+ publicationId:
8986
+ format: uuid
8987
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
8988
+ type: string
8989
+ publicationName:
8990
+ maxLength: 200
8991
+ minLength: 1
8992
+ type: string
8993
+ requestId:
8994
+ format: uuid
8995
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
8996
+ type: string
8997
+ requestedByLogin:
8998
+ description: The GitHub login of the person who asked.
8999
+ maxLength: 100
9000
+ minLength: 1
9001
+ type: string
9002
+ state:
9003
+ $ref: "#/components/schemas/AssistanceRequestState"
9004
+ required:
9005
+ - requestId
9006
+ - kind
9007
+ - state
9008
+ - createdAt
9009
+ - organizationId
9010
+ - organizationName
9011
+ - publicationId
9012
+ - publicationName
9013
+ - requestedByLogin
9014
+ type: object
9015
+ PlatformAssistanceRequestPage:
9016
+ additionalProperties: false
9017
+ allOf:
9018
+ - else:
9019
+ properties:
9020
+ nextCursor:
9021
+ type: "null"
9022
+ if:
9023
+ properties:
9024
+ hasMore:
9025
+ not:
9026
+ enum:
9027
+ - false
9028
+ type: boolean
9029
+ x-gala-const: true
9030
+ required:
9031
+ - hasMore
9032
+ then:
9033
+ properties:
9034
+ nextCursor:
9035
+ type: string
9036
+ required:
9037
+ - nextCursor
9038
+ properties:
9039
+ hasMore:
9040
+ type: boolean
9041
+ items:
9042
+ items:
9043
+ $ref: "#/components/schemas/PlatformAssistanceRequest"
9044
+ maxItems: 100
9045
+ type: array
9046
+ nextCursor:
9047
+ description: Opaque cursor for the next page. Present and non-null exactly when `hasMore` is true; absent or null when `hasMore` is false.
9048
+ maxLength: 2048
9049
+ minLength: 1
9050
+ type:
9051
+ - string
9052
+ - "null"
9053
+ required:
9054
+ - items
9055
+ - hasMore
9056
+ type: object
8467
9057
  PlatformAuditEvent:
8468
9058
  additionalProperties: false
8469
9059
  description: "One audit event, redacted: identifiers and codes only, never request bodies or secrets."
@@ -8769,6 +9359,11 @@ components:
8769
9359
  PlatformPlan:
8770
9360
  additionalProperties: false
8771
9361
  properties:
9362
+ collaboratorLimit:
9363
+ description: "SCHEMA-3.30.0, the collaborators (active members other than owners plus pending invitations) one organization on this plan may have; a further invitation is `409 PLAN_REQUIRED`. 0 means no limit. Defaults: FREE 1, PRO and BUSINESS no limit."
9364
+ format: int64
9365
+ minimum: 0
9366
+ type: integer
8772
9367
  contactForm:
8773
9368
  description: "SCHEMA-3.23.0, whether sites on this plan may turn on the contact form. A site on a plan without it sees the form locked, and enabling it is `409 PLAN_REQUIRED`. Defaults of the first release: FREE 50 and no contact form, PRO 500 and a contact form, BUSINESS 2000 and a contact form."
8774
9369
  type: boolean
@@ -8792,6 +9387,7 @@ components:
8792
9387
  - newsletterSubscriberLimit
8793
9388
  - contactForm
8794
9389
  - listen
9390
+ - collaboratorLimit
8795
9391
  type: object
8796
9392
  PlatformPlanCapacityRelease:
8797
9393
  additionalProperties: false
@@ -16727,6 +17323,10 @@ components:
16727
17323
  PostOrganizationsByOrganizationIdPublicationTransfersByTransferIdDeclineResponse:
16728
17324
  allOf:
16729
17325
  - $ref: "#/components/schemas/PublicationTransfer"
17326
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdAssistanceRequestsRequest:
17327
+ $ref: "#/components/schemas/AssistanceRequestCreate"
17328
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdAssistanceRequestsResponse:
17329
+ $ref: "#/components/schemas/AssistanceRequest"
16730
17330
  PostOrganizationsByOrganizationIdPublicationsByPublicationIdChangesPublishRequest:
16731
17331
  additionalProperties: false
16732
17332
  properties:
@@ -16961,6 +17561,23 @@ components:
16961
17561
  PostOrganizationsByOrganizationIdPublicationsByPublicationIdDeploymentsRollbackResponse:
16962
17562
  allOf:
16963
17563
  - $ref: "#/components/schemas/OperationResponse"
17564
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsCheckRequest:
17565
+ additionalProperties: false
17566
+ properties:
17567
+ name:
17568
+ description: The domain name to check, for example `mayawrites.com`.
17569
+ maxLength: 253
17570
+ minLength: 1
17571
+ type: string
17572
+ required:
17573
+ - name
17574
+ type: object
17575
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsCheckResponse:
17576
+ $ref: "#/components/schemas/DomainRegistrationCheck"
17577
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsRequest:
17578
+ $ref: "#/components/schemas/DomainRegistrationCreate"
17579
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsResponse:
17580
+ $ref: "#/components/schemas/DomainRegistration"
16964
17581
  PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsByDomainIdCheckResponse:
16965
17582
  allOf:
16966
17583
  - $ref: "#/components/schemas/DomainBinding"
@@ -17015,6 +17632,26 @@ components:
17015
17632
  - authorizationUrl
17016
17633
  - expiresAt
17017
17634
  type: object
17635
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsCheckGalascribeAddressRequest:
17636
+ additionalProperties: false
17637
+ properties:
17638
+ label:
17639
+ $ref: "#/components/schemas/GalascribeAddressLabel"
17640
+ required:
17641
+ - label
17642
+ type: object
17643
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsCheckGalascribeAddressResponse:
17644
+ $ref: "#/components/schemas/GalascribeAddressCheck"
17645
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsClaimGalascribeAddressRequest:
17646
+ additionalProperties: false
17647
+ properties:
17648
+ label:
17649
+ $ref: "#/components/schemas/GalascribeAddressLabel"
17650
+ required:
17651
+ - label
17652
+ type: object
17653
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsClaimGalascribeAddressResponse:
17654
+ $ref: "#/components/schemas/DomainBinding"
17018
17655
  PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsRequest:
17019
17656
  additionalProperties: false
17020
17657
  properties:
@@ -18003,6 +18640,8 @@ components:
18003
18640
  - expiresAt
18004
18641
  - secret
18005
18642
  type: object
18643
+ PostPlatformAssistanceRequestsByRequestIdCloseResponse:
18644
+ $ref: "#/components/schemas/PlatformAssistanceRequest"
18006
18645
  PostPlatformCachesByCacheIdEvictRequest:
18007
18646
  additionalProperties: false
18008
18647
  properties:
@@ -20273,6 +20912,11 @@ components:
20273
20912
  PutPlatformPlansByPlanKeyRequest:
20274
20913
  additionalProperties: false
20275
20914
  properties:
20915
+ collaboratorLimit:
20916
+ description: SCHEMA-3.30.0, optional; absent keeps the plan's current value. 0 means no limit.
20917
+ format: int64
20918
+ minimum: 0
20919
+ type: integer
20276
20920
  contactForm:
20277
20921
  description: SCHEMA-3.23.0, optional; absent keeps the plan's current value.
20278
20922
  type: boolean
@@ -21631,6 +22275,112 @@ components:
21631
22275
  required:
21632
22276
  - code
21633
22277
  type: object
22278
+ SiteHostingCheck:
22279
+ additionalProperties: false
22280
+ description: "SCHEMA-3.30.0: what the site's repository contains that GitHub Pages limits or does not allow. It is advice: nothing here blocks publishing. `findings` is empty and `offers` is empty when the site is fine."
22281
+ properties:
22282
+ checkedAt:
22283
+ $ref: "#/components/schemas/PortableProblemRfc3339"
22284
+ description: When the check ran.
22285
+ findings:
22286
+ items:
22287
+ $ref: "#/components/schemas/HostingFinding"
22288
+ maxItems: 8
22289
+ type: array
22290
+ host:
22291
+ description: "Where the site is hosted today. `GITHUB_PAGES`: GitHub Pages."
22292
+ enum:
22293
+ - GITHUB_PAGES
22294
+ type: string
22295
+ limits:
22296
+ additionalProperties: false
22297
+ description: The thresholds the check used, so a client can show them.
22298
+ properties:
22299
+ directoryEntries:
22300
+ description: The most entries one folder may hold before `DIRECTORY_TOO_LARGE`.
22301
+ format: int64
22302
+ minimum: 0
22303
+ type: integer
22304
+ fileMaxBytes:
22305
+ description: The file size at which `FILE_OVER_SIZE_LIMIT` fires.
22306
+ format: int64
22307
+ minimum: 0
22308
+ type: integer
22309
+ fileWarningBytes:
22310
+ description: The file size at which `LARGE_FILE` fires.
22311
+ format: int64
22312
+ minimum: 0
22313
+ type: integer
22314
+ mediaWarningBytes:
22315
+ description: The media total at which `HEAVY_MEDIA` fires.
22316
+ format: int64
22317
+ minimum: 0
22318
+ type: integer
22319
+ siteBytes:
22320
+ description: The site size at which `SITE_OVER_SIZE_LIMIT` fires.
22321
+ format: int64
22322
+ minimum: 0
22323
+ type: integer
22324
+ required:
22325
+ - siteBytes
22326
+ - fileWarningBytes
22327
+ - fileMaxBytes
22328
+ - directoryEntries
22329
+ - mediaWarningBytes
22330
+ type: object
22331
+ offers:
22332
+ description: What the person can do about the findings. Empty when there is no finding.
22333
+ items:
22334
+ $ref: "#/components/schemas/HostingOffer"
22335
+ maxItems: 2
22336
+ type: array
22337
+ uniqueItems: true
22338
+ planTier:
22339
+ $ref: "#/components/schemas/PlatformPlanKey"
22340
+ description: The organization's plan tier when the check ran.
22341
+ revision:
22342
+ description: The commit of the default branch that was checked.
22343
+ pattern: ^(?:sha1:[0-9a-f]{40}|sha256:[0-9a-f]{64})$
22344
+ type: string
22345
+ totals:
22346
+ additionalProperties: false
22347
+ properties:
22348
+ files:
22349
+ description: Files in the repository.
22350
+ format: int64
22351
+ minimum: 0
22352
+ type: integer
22353
+ mediaBytes:
22354
+ description: Bytes of images, audio, video and PDFs.
22355
+ format: int64
22356
+ minimum: 0
22357
+ type: integer
22358
+ mediaFiles:
22359
+ description: Number of images, audio, video and PDF files.
22360
+ format: int64
22361
+ minimum: 0
22362
+ type: integer
22363
+ siteBytes:
22364
+ description: Bytes of all files.
22365
+ format: int64
22366
+ minimum: 0
22367
+ type: integer
22368
+ required:
22369
+ - siteBytes
22370
+ - mediaBytes
22371
+ - mediaFiles
22372
+ - files
22373
+ type: object
22374
+ required:
22375
+ - checkedAt
22376
+ - revision
22377
+ - host
22378
+ - planTier
22379
+ - totals
22380
+ - limits
22381
+ - findings
22382
+ - offers
22383
+ type: object
21634
22384
  SiteLastPublished:
21635
22385
  additionalProperties: false
21636
22386
  properties:
@@ -25559,7 +26309,10 @@ paths:
25559
26309
  for the inviter's benefit and is never compared with the accepting
25560
26310
  principal's verified identity (LOCAL-34 G6). The token is single-use and
25561
26311
  non-enumerating; recipient binding is revisited when verified email
25562
- exists.
26312
+ exists. The organization's plan limits its collaborators (SCHEMA-3.30.0):
26313
+ when accepting would take it past the limit, because the plan changed
26314
+ since the invitation was sent, the answer is `409 PLAN_REQUIRED` and the
26315
+ invitation stays `PENDING`.
25563
26316
  operationId: postMembershipInvitationsByTokenAccept
25564
26317
  parameters:
25565
26318
  - $ref: "#/components/parameters/XCorrelationId"
@@ -25688,9 +26441,22 @@ paths:
25688
26441
  status: 409
25689
26442
  title: INVALID_SOURCE_STATE
25690
26443
  type: urn:gala:problem:invalid-source-state
26444
+ PLAN_REQUIRED:
26445
+ summary: PLAN_REQUIRED
26446
+ value:
26447
+ code: PLAN_REQUIRED
26448
+ correlationId: 018f0000-0000-7000-8000-000000000001
26449
+ detail: The organization's plan allows no more collaborators. See the operation contract.
26450
+ errors: []
26451
+ retryable: false
26452
+ schemaId: urn:gala:schema:problem:2.0.0
26453
+ schemaVersion: 2.0.0
26454
+ status: 409
26455
+ title: PLAN_REQUIRED
26456
+ type: urn:gala:problem:plan-required
25691
26457
  schema:
25692
26458
  $ref: "#/components/schemas/Problem"
25693
- description: INVALID_SOURCE_STATE
26459
+ description: INVALID_SOURCE_STATE, PLAN_REQUIRED
25694
26460
  headers:
25695
26461
  Cache-Control:
25696
26462
  $ref: "#/components/headers/CacheControlNoStore"
@@ -25698,6 +26464,7 @@ paths:
25698
26464
  $ref: "#/components/headers/XCorrelationId"
25699
26465
  x-gala-problem-codes:
25700
26466
  - INVALID_SOURCE_STATE
26467
+ - PLAN_REQUIRED
25701
26468
  "422":
25702
26469
  content:
25703
26470
  application/problem+json:
@@ -25743,6 +26510,7 @@ paths:
25743
26510
  x-gala-reachable-problems:
25744
26511
  - AUTHENTICATION_REQUIRED
25745
26512
  - INVALID_SOURCE_STATE
26513
+ - PLAN_REQUIRED
25746
26514
  - REQUEST_FIELD_UNKNOWN
25747
26515
  - VALIDATION_FAILED
25748
26516
  x-gala-replay-identity: invitation-capability
@@ -26886,6 +27654,13 @@ paths:
26886
27654
  the invitation, never a verified identity and never an authorization
26887
27655
  input. Hand the link only to the person it is meant for, and revoke and
26888
27656
  re-invite if it goes astray (LOCAL-34 G6).
27657
+
27658
+ Every organization may invite, on any plan (SCHEMA-3.30.0). A personal
27659
+ organization becomes collaborative with its first invitation. The plan
27660
+ limits how many collaborators the organization may have: active members
27661
+ other than owners plus invitations still `PENDING` (`GET
27662
+ .../plan` shows the count). An invitation past the limit is `409
27663
+ PLAN_REQUIRED`, and the detail names the limit.
26889
27664
  operationId: postOrganizationsByOrganizationIdMembershipInvitations
26890
27665
  parameters:
26891
27666
  - $ref: "#/components/parameters/XCorrelationId"
@@ -27101,9 +27876,22 @@ paths:
27101
27876
  status: 409
27102
27877
  title: INVALID_SOURCE_STATE
27103
27878
  type: urn:gala:problem:invalid-source-state
27879
+ PLAN_REQUIRED:
27880
+ summary: PLAN_REQUIRED
27881
+ value:
27882
+ code: PLAN_REQUIRED
27883
+ correlationId: 018f0000-0000-7000-8000-000000000001
27884
+ detail: The organization's plan allows no more collaborators. See the operation contract.
27885
+ errors: []
27886
+ retryable: false
27887
+ schemaId: urn:gala:schema:problem:2.0.0
27888
+ schemaVersion: 2.0.0
27889
+ status: 409
27890
+ title: PLAN_REQUIRED
27891
+ type: urn:gala:problem:plan-required
27104
27892
  schema:
27105
27893
  $ref: "#/components/schemas/Problem"
27106
- description: COMMAND_REPLAY_CONFLICT, INVALID_SOURCE_STATE
27894
+ description: COMMAND_REPLAY_CONFLICT, INVALID_SOURCE_STATE, PLAN_REQUIRED
27107
27895
  headers:
27108
27896
  Cache-Control:
27109
27897
  $ref: "#/components/headers/CacheControlNoStore"
@@ -27112,6 +27900,7 @@ paths:
27112
27900
  x-gala-problem-codes:
27113
27901
  - COMMAND_REPLAY_CONFLICT
27114
27902
  - INVALID_SOURCE_STATE
27903
+ - PLAN_REQUIRED
27115
27904
  "422":
27116
27905
  content:
27117
27906
  application/problem+json:
@@ -27158,6 +27947,7 @@ paths:
27158
27947
  - AUTHORIZATION_DENIED
27159
27948
  - COMMAND_REPLAY_CONFLICT
27160
27949
  - INVALID_SOURCE_STATE
27950
+ - PLAN_REQUIRED
27161
27951
  - REAUTH_REQUIRED
27162
27952
  - REQUEST_FIELD_UNKNOWN
27163
27953
  - RESOURCE_NOT_FOUND
@@ -31091,11 +31881,19 @@ paths:
31091
31881
  - NONE
31092
31882
  x-gala-success-category: protocol
31093
31883
  x-gala-tenant-scope: ORGANIZATION_PATH
31094
- /v2/organizations/{organizationId}/publication-imports:
31884
+ /v2/organizations/{organizationId}/plan:
31095
31885
  get:
31096
31886
  description: |
31097
- The organization's repository imports, newest first.
31098
- operationId: getOrganizationsByOrganizationIdPublicationImports
31887
+ Needs `organization.view`, so any member of the organization may read it.
31888
+ The organization's plan tier, how many collaborators it may have and how
31889
+ many it has, and what the plan includes: a `name.galascribe.com`
31890
+ address, one included domain and Galascribe hosting. `collaborators.limit`
31891
+ is null when the plan has no limit; `collaborators.used` counts the active
31892
+ members other than owners plus the invitations still `PENDING`.
31893
+ `galascribeAddressZone` is the zone Galascribe addresses are created in and
31894
+ is absent when Galascribe addresses are not configured, so a client hides
31895
+ the option.
31896
+ operationId: getOrganizationsByOrganizationIdPlan
31099
31897
  parameters:
31100
31898
  - $ref: "#/components/parameters/XCorrelationId"
31101
31899
  - example: 018f0000-0000-7000-8000-000000000001
@@ -31106,8 +31904,6 @@ paths:
31106
31904
  format: uuid
31107
31905
  pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
31108
31906
  type: string
31109
- - $ref: "#/components/parameters/Cursor"
31110
- - $ref: "#/components/parameters/Limit"
31111
31907
  responses:
31112
31908
  "200":
31113
31909
  content:
@@ -31116,60 +31912,159 @@ paths:
31116
31912
  nominal:
31117
31913
  summary: Nominal successful response
31118
31914
  value:
31119
- hasMore: false
31120
- items:
31121
- - findings:
31122
- - code: V1_SYNTAX_UNSUPPORTED
31123
- detail: A gallery block is kept as text.
31124
- path: content/posts/trip/index.en.md
31125
- severity: WARNING
31126
- importId: 018f0000-0000-7000-8000-000000000001
31127
- layout: GALA_V1
31128
- operationId: 018f0000-0000-7000-8000-000000000002
31129
- repository:
31130
- defaultBranch: main
31131
- fullName: rathnastest/g11
31132
- private: false
31133
- state: READY
31134
- suggested:
31135
- name: Priya's notes
31136
- slug: priyas-notes
31137
- version: 2
31915
+ collaborators:
31916
+ limit: null
31917
+ used: 2
31918
+ entitlements:
31919
+ galascribeAddress: true
31920
+ galascribeHosting: true
31921
+ includedDomain: false
31922
+ galascribeAddressZone: galascribe.com
31923
+ tier: PRO
31138
31924
  schema:
31139
- $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPublicationImportsResponse"
31140
- description: list repository imports succeeded
31925
+ $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPlanResponse"
31926
+ description: read an organization's plan succeeded
31141
31927
  headers:
31142
31928
  Cache-Control:
31143
31929
  $ref: "#/components/headers/CacheControlNoStore"
31144
31930
  X-Correlation-Id:
31145
31931
  $ref: "#/components/headers/XCorrelationId"
31146
31932
  "400":
31147
- content:
31148
- application/problem+json:
31149
- examples:
31150
- VALIDATION_FAILED:
31151
- summary: VALIDATION_FAILED
31152
- value:
31153
- code: VALIDATION_FAILED
31154
- correlationId: 018f0000-0000-7000-8000-000000000001
31155
- detail: See the operation contract.
31156
- errors: []
31157
- retryable: false
31158
- schemaId: urn:gala:schema:problem:2.0.0
31159
- schemaVersion: 2.0.0
31160
- status: 400
31161
- title: VALIDATION_FAILED
31162
- type: urn:gala:problem:validation-failed
31163
- schema:
31164
- $ref: "#/components/schemas/Problem"
31165
- description: VALIDATION_FAILED
31166
- headers:
31167
- Cache-Control:
31168
- $ref: "#/components/headers/CacheControlNoStore"
31169
- X-Correlation-Id:
31170
- $ref: "#/components/headers/XCorrelationId"
31171
- x-gala-problem-codes:
31172
- - VALIDATION_FAILED
31933
+ $ref: "#/components/responses/ValidationFailed"
31934
+ "401":
31935
+ content:
31936
+ application/problem+json:
31937
+ examples:
31938
+ AUTHENTICATION_REQUIRED:
31939
+ summary: AUTHENTICATION_REQUIRED
31940
+ value:
31941
+ code: AUTHENTICATION_REQUIRED
31942
+ correlationId: 018f0000-0000-7000-8000-000000000001
31943
+ detail: See the operation contract.
31944
+ errors: []
31945
+ retryable: false
31946
+ schemaId: urn:gala:schema:problem:2.0.0
31947
+ schemaVersion: 2.0.0
31948
+ status: 401
31949
+ title: AUTHENTICATION_REQUIRED
31950
+ type: urn:gala:problem:authentication-required
31951
+ schema:
31952
+ $ref: "#/components/schemas/Problem"
31953
+ description: AUTHENTICATION_REQUIRED
31954
+ headers:
31955
+ Cache-Control:
31956
+ $ref: "#/components/headers/CacheControlNoStore"
31957
+ X-Correlation-Id:
31958
+ $ref: "#/components/headers/XCorrelationId"
31959
+ x-gala-problem-codes:
31960
+ - AUTHENTICATION_REQUIRED
31961
+ "403":
31962
+ $ref: "#/components/responses/AuthorizationDenied"
31963
+ "404":
31964
+ $ref: "#/components/responses/ResourceNotFound"
31965
+ security:
31966
+ - browserSession: []
31967
+ summary: read an organization's plan
31968
+ tags:
31969
+ - organizations
31970
+ x-gala-activation-gate: MVP
31971
+ x-gala-activation-guards:
31972
+ - NONE
31973
+ x-gala-capability-key: organization.view
31974
+ x-gala-concurrency: authorization-epoch
31975
+ x-gala-conditional-capabilities: []
31976
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
31977
+ x-gala-nullability: required-and-nullable-are-explicit
31978
+ x-gala-purpose: read an organization's plan
31979
+ x-gala-reachable-problems:
31980
+ - AUTHENTICATION_REQUIRED
31981
+ - AUTHORIZATION_DENIED
31982
+ - RESOURCE_NOT_FOUND
31983
+ - VALIDATION_FAILED
31984
+ x-gala-replay-identity: safe-query
31985
+ x-gala-state-guards:
31986
+ - NONE
31987
+ x-gala-success-category: query
31988
+ x-gala-tenant-scope: ORGANIZATION_PATH
31989
+ /v2/organizations/{organizationId}/publication-imports:
31990
+ get:
31991
+ description: |
31992
+ The organization's repository imports, newest first.
31993
+ operationId: getOrganizationsByOrganizationIdPublicationImports
31994
+ parameters:
31995
+ - $ref: "#/components/parameters/XCorrelationId"
31996
+ - example: 018f0000-0000-7000-8000-000000000001
31997
+ in: path
31998
+ name: organizationId
31999
+ required: true
32000
+ schema:
32001
+ format: uuid
32002
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
32003
+ type: string
32004
+ - $ref: "#/components/parameters/Cursor"
32005
+ - $ref: "#/components/parameters/Limit"
32006
+ responses:
32007
+ "200":
32008
+ content:
32009
+ application/json:
32010
+ examples:
32011
+ nominal:
32012
+ summary: Nominal successful response
32013
+ value:
32014
+ hasMore: false
32015
+ items:
32016
+ - findings:
32017
+ - code: V1_SYNTAX_UNSUPPORTED
32018
+ detail: A gallery block is kept as text.
32019
+ path: content/posts/trip/index.en.md
32020
+ severity: WARNING
32021
+ importId: 018f0000-0000-7000-8000-000000000001
32022
+ layout: GALA_V1
32023
+ operationId: 018f0000-0000-7000-8000-000000000002
32024
+ repository:
32025
+ defaultBranch: main
32026
+ fullName: rathnastest/g11
32027
+ private: false
32028
+ state: READY
32029
+ suggested:
32030
+ name: Priya's notes
32031
+ slug: priyas-notes
32032
+ version: 2
32033
+ schema:
32034
+ $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPublicationImportsResponse"
32035
+ description: list repository imports succeeded
32036
+ headers:
32037
+ Cache-Control:
32038
+ $ref: "#/components/headers/CacheControlNoStore"
32039
+ X-Correlation-Id:
32040
+ $ref: "#/components/headers/XCorrelationId"
32041
+ "400":
32042
+ content:
32043
+ application/problem+json:
32044
+ examples:
32045
+ VALIDATION_FAILED:
32046
+ summary: VALIDATION_FAILED
32047
+ value:
32048
+ code: VALIDATION_FAILED
32049
+ correlationId: 018f0000-0000-7000-8000-000000000001
32050
+ detail: See the operation contract.
32051
+ errors: []
32052
+ retryable: false
32053
+ schemaId: urn:gala:schema:problem:2.0.0
32054
+ schemaVersion: 2.0.0
32055
+ status: 400
32056
+ title: VALIDATION_FAILED
32057
+ type: urn:gala:problem:validation-failed
32058
+ schema:
32059
+ $ref: "#/components/schemas/Problem"
32060
+ description: VALIDATION_FAILED
32061
+ headers:
32062
+ Cache-Control:
32063
+ $ref: "#/components/headers/CacheControlNoStore"
32064
+ X-Correlation-Id:
32065
+ $ref: "#/components/headers/XCorrelationId"
32066
+ x-gala-problem-codes:
32067
+ - VALIDATION_FAILED
31173
32068
  "401":
31174
32069
  content:
31175
32070
  application/problem+json:
@@ -35759,45 +36654,341 @@ paths:
35759
36654
  - NONE
35760
36655
  x-gala-success-category: query
35761
36656
  x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
35762
- /v2/organizations/{organizationId}/publications/{publicationId}/changes:publish:
36657
+ /v2/organizations/{organizationId}/publications/{publicationId}/assistance-requests:
36658
+ get:
36659
+ description: |
36660
+ Needs `publication.view`. The requests this site has made to the Galascribe
36661
+ team (`AssistanceRequest`), newest first, open and closed. At most 100.
36662
+ operationId: getOrganizationsByOrganizationIdPublicationsByPublicationIdAssistanceRequests
36663
+ parameters:
36664
+ - $ref: "#/components/parameters/XCorrelationId"
36665
+ - example: 018f0000-0000-7000-8000-000000000001
36666
+ in: path
36667
+ name: organizationId
36668
+ required: true
36669
+ schema:
36670
+ format: uuid
36671
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
36672
+ type: string
36673
+ - example: 018f0000-0000-7000-8000-000000000001
36674
+ in: path
36675
+ name: publicationId
36676
+ required: true
36677
+ schema:
36678
+ format: uuid
36679
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
36680
+ type: string
36681
+ responses:
36682
+ "200":
36683
+ content:
36684
+ application/json:
36685
+ examples:
36686
+ nominal:
36687
+ summary: Nominal successful response
36688
+ value:
36689
+ items:
36690
+ - createdAt: "2026-11-02T09:00:00.000Z"
36691
+ findingCodes:
36692
+ - LARGE_FILE
36693
+ kind: GALASCRIBE_HOSTING
36694
+ requestId: 018f0000-0000-7000-8000-000000000001
36695
+ state: OPEN
36696
+ schema:
36697
+ $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPublicationsByPublicationIdAssistanceRequestsResponse"
36698
+ description: list a site's requests for help succeeded
36699
+ headers:
36700
+ Cache-Control:
36701
+ $ref: "#/components/headers/CacheControlNoStore"
36702
+ X-Correlation-Id:
36703
+ $ref: "#/components/headers/XCorrelationId"
36704
+ "400":
36705
+ $ref: "#/components/responses/ValidationFailed"
36706
+ "401":
36707
+ content:
36708
+ application/problem+json:
36709
+ examples:
36710
+ AUTHENTICATION_REQUIRED:
36711
+ summary: AUTHENTICATION_REQUIRED
36712
+ value:
36713
+ code: AUTHENTICATION_REQUIRED
36714
+ correlationId: 018f0000-0000-7000-8000-000000000001
36715
+ detail: See the operation contract.
36716
+ errors: []
36717
+ retryable: false
36718
+ schemaId: urn:gala:schema:problem:2.0.0
36719
+ schemaVersion: 2.0.0
36720
+ status: 401
36721
+ title: AUTHENTICATION_REQUIRED
36722
+ type: urn:gala:problem:authentication-required
36723
+ schema:
36724
+ $ref: "#/components/schemas/Problem"
36725
+ description: AUTHENTICATION_REQUIRED
36726
+ headers:
36727
+ Cache-Control:
36728
+ $ref: "#/components/headers/CacheControlNoStore"
36729
+ X-Correlation-Id:
36730
+ $ref: "#/components/headers/XCorrelationId"
36731
+ x-gala-problem-codes:
36732
+ - AUTHENTICATION_REQUIRED
36733
+ "403":
36734
+ $ref: "#/components/responses/AuthorizationDenied"
36735
+ "404":
36736
+ $ref: "#/components/responses/ResourceNotFound"
36737
+ security:
36738
+ - browserSession: []
36739
+ summary: list a site's requests for help
36740
+ tags:
36741
+ - organizations
36742
+ x-gala-activation-gate: MVP
36743
+ x-gala-activation-guards:
36744
+ - NONE
36745
+ x-gala-capability-key: publication.view
36746
+ x-gala-concurrency: authorization-and-publication-epochs
36747
+ x-gala-conditional-capabilities: []
36748
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
36749
+ x-gala-nullability: required-and-nullable-are-explicit
36750
+ x-gala-purpose: list a site's requests for help
36751
+ x-gala-reachable-problems:
36752
+ - AUTHENTICATION_REQUIRED
36753
+ - AUTHORIZATION_DENIED
36754
+ - RESOURCE_NOT_FOUND
36755
+ - VALIDATION_FAILED
36756
+ x-gala-replay-identity: safe-query
36757
+ x-gala-state-guards:
36758
+ - NONE
36759
+ x-gala-success-category: query
36760
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
35763
36761
  post:
35764
36762
  description: |
35765
- Publishes the named repository changes together. For each change, in order:
35766
-
35767
- 1. If the change is behind the main branch head it is brought up to date automatically when that is clean (the same file-level merge as `:bring-up-to-date`). When it is not clean nothing is written for any change and the response is `409 INVALID_SOURCE_STATE` with one error per conflicting path (`code: CONTENT_CONFLICT`, `pointer: /documents/<path>` or `/assets/<path>`) and the live head on `X-Gala-Current-Head`.
35768
- 2. If the publication's `publishingPolicy.requireReview` is true and the change has no approval, `409 INVALID_SOURCE_STATE` with `errors[].code REVIEW_REQUIRED` pointed at `/changeIds/<index>`.
35769
- 3. If `publishingPolicy.galascribeMerges` is true (the default) the server opens and merges the pull request itself through the GitHub App. Otherwise each change must already be merged on GitHub; one that is not is `409 INVALID_SOURCE_STATE` with `errors[].code SOURCE_NOT_MERGED` pointed at `/changeIds/<index>`.
35770
-
35771
- Then ONE deploy of the resulting main head is started. Success is `202` with the accepted operation (kind `publish`; `publishId` names it, and the operation's `subject.generationId` names the generation once it exists). `scheduledFor` schedules the deploy instead of starting it now and additionally needs `publication.schedule`; it is cancelled with `:cancel` on the publish. `Idempotency-Key` replays the same acceptance. Whole-request validation happens before any change is merged: a refused request merges nothing.
35772
-
35773
- SCHEMA-3.3.0 scheduling: with `scheduledFor` the request is validated
35774
- exactly as an immediate publish (changes publishable, review state,
35775
- repository set up, binding active, no publish in flight) and nothing is
35776
- merged now; the named changes are merged and deployed at `scheduledFor`,
35777
- after the same checks run again. `scheduledFor` must be at least 5
35778
- minutes and at most 366 days ahead, else `422 VALIDATION_FAILED` pointed
35779
- at `/scheduledFor`. One schedule per publication: `409 SCHEDULE_EXISTS`
35780
- while another is pending (its `publishId` is in the problem `detail` and
35781
- in the site read's `schedule`). `409 CANONICAL_BASE_MISMATCH` when the
35782
- merged head's `gala/publication.json` `canonicalBase` is not the address
35783
- the site is served at (the active custom domain, else the github.io
35784
- address); the problem `detail` names the expected value.
35785
-
35786
- SCHEMA-3.17.0: that problem also carries the optional members
35787
- `expectedBase` (the address the site is served at, an https URL),
35788
- `profileBase` (the base the profile carries now, as written),
35789
- `domainState` (the custom domain's state that decided the expected
35790
- base, absent without a domain) and `remedy` (one sentence for the
35791
- author), so a client names both addresses and renders the `remedy`
35792
- without parsing `detail`. The server first includes the pending "Site
35793
- address" change in the publish, or proposes one inside the request, and
35794
- returns the problem only when it cannot. `409 INVALID_SOURCE_STATE`
35795
- with `errors[].code DOMAIN_NOT_READY` is returned while
35796
- a custom domain is part-way through its switch and no address can be
35797
- verified (after the Pages CNAME is set and before the certificate
35798
- serves); it resolves on its own, and the domain read's `nextStep` says
35799
- what is being waited on.
35800
- operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdChangesPublish
36763
+ Needs `publication.settings.manage`. Paid plans only: `409 PLAN_REQUIRED`
36764
+ on the Free plan. Asks the Galascribe team to do something by hand for the
36765
+ site: `GALASCRIBE_HOSTING` (host what GitHub does not allow, with the
36766
+ `findingCodes` of the hosting check), `DOMAIN_REGISTRATION` (register the
36767
+ included domain `domainName` for the author) or `DOMAIN_MOVE` (move the
36768
+ domain `domainName` to the author's own account). The request is `OPEN`
36769
+ until an operator closes it. When a request of the same `kind` is already
36770
+ `OPEN` for the site, that request is returned with `200` and nothing new
36771
+ is created.
36772
+ operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdAssistanceRequests
36773
+ parameters:
36774
+ - $ref: "#/components/parameters/XCorrelationId"
36775
+ - example: 018f0000-0000-7000-8000-000000000001
36776
+ in: path
36777
+ name: organizationId
36778
+ required: true
36779
+ schema:
36780
+ format: uuid
36781
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
36782
+ type: string
36783
+ - example: 018f0000-0000-7000-8000-000000000001
36784
+ in: path
36785
+ name: publicationId
36786
+ required: true
36787
+ schema:
36788
+ format: uuid
36789
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
36790
+ type: string
36791
+ - $ref: "#/components/parameters/IdempotencyKey"
36792
+ - $ref: "#/components/parameters/XCsrfToken"
36793
+ requestBody:
36794
+ content:
36795
+ application/json:
36796
+ examples:
36797
+ nominal:
36798
+ summary: Nominal valid request
36799
+ value:
36800
+ findingCodes:
36801
+ - LARGE_FILE
36802
+ kind: GALASCRIBE_HOSTING
36803
+ note: The tour video is 60 MB.
36804
+ schema:
36805
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdAssistanceRequestsRequest"
36806
+ required: true
36807
+ responses:
36808
+ "200":
36809
+ content:
36810
+ application/json:
36811
+ examples:
36812
+ nominal:
36813
+ summary: The request of this kind that is already open
36814
+ value:
36815
+ createdAt: "2026-11-02T09:00:00.000Z"
36816
+ findingCodes:
36817
+ - LARGE_FILE
36818
+ kind: GALASCRIBE_HOSTING
36819
+ requestId: 018f0000-0000-7000-8000-000000000001
36820
+ state: OPEN
36821
+ schema:
36822
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdAssistanceRequestsResponse"
36823
+ description: a request of the same kind is already open for the site
36824
+ headers:
36825
+ Cache-Control:
36826
+ $ref: "#/components/headers/CacheControlNoStore"
36827
+ X-Correlation-Id:
36828
+ $ref: "#/components/headers/XCorrelationId"
36829
+ "201":
36830
+ content:
36831
+ application/json:
36832
+ examples:
36833
+ nominal:
36834
+ summary: Nominal successful response
36835
+ value:
36836
+ createdAt: "2026-11-02T09:00:00.000Z"
36837
+ findingCodes:
36838
+ - LARGE_FILE
36839
+ kind: GALASCRIBE_HOSTING
36840
+ requestId: 018f0000-0000-7000-8000-000000000001
36841
+ state: OPEN
36842
+ schema:
36843
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdAssistanceRequestsResponse"
36844
+ description: ask Galascribe for help with a site succeeded
36845
+ headers:
36846
+ Cache-Control:
36847
+ $ref: "#/components/headers/CacheControlNoStore"
36848
+ Location:
36849
+ $ref: "#/components/headers/Location"
36850
+ X-Correlation-Id:
36851
+ $ref: "#/components/headers/XCorrelationId"
36852
+ "400":
36853
+ $ref: "#/components/responses/RequestInvalid"
36854
+ "401":
36855
+ content:
36856
+ application/problem+json:
36857
+ examples:
36858
+ AUTHENTICATION_REQUIRED:
36859
+ summary: AUTHENTICATION_REQUIRED
36860
+ value:
36861
+ code: AUTHENTICATION_REQUIRED
36862
+ correlationId: 018f0000-0000-7000-8000-000000000001
36863
+ detail: See the operation contract.
36864
+ errors: []
36865
+ retryable: false
36866
+ schemaId: urn:gala:schema:problem:2.0.0
36867
+ schemaVersion: 2.0.0
36868
+ status: 401
36869
+ title: AUTHENTICATION_REQUIRED
36870
+ type: urn:gala:problem:authentication-required
36871
+ schema:
36872
+ $ref: "#/components/schemas/Problem"
36873
+ description: AUTHENTICATION_REQUIRED
36874
+ headers:
36875
+ Cache-Control:
36876
+ $ref: "#/components/headers/CacheControlNoStore"
36877
+ X-Correlation-Id:
36878
+ $ref: "#/components/headers/XCorrelationId"
36879
+ x-gala-problem-codes:
36880
+ - AUTHENTICATION_REQUIRED
36881
+ "403":
36882
+ $ref: "#/components/responses/AuthorizationDenied"
36883
+ "404":
36884
+ $ref: "#/components/responses/ResourceNotFound"
36885
+ "409":
36886
+ content:
36887
+ application/problem+json:
36888
+ examples:
36889
+ COMMAND_REPLAY_CONFLICT:
36890
+ summary: COMMAND_REPLAY_CONFLICT
36891
+ value:
36892
+ code: COMMAND_REPLAY_CONFLICT
36893
+ correlationId: 018f0000-0000-7000-8000-000000000001
36894
+ detail: See the operation contract.
36895
+ errors: []
36896
+ retryable: false
36897
+ schemaId: urn:gala:schema:problem:2.0.0
36898
+ schemaVersion: 2.0.0
36899
+ status: 409
36900
+ title: COMMAND_REPLAY_CONFLICT
36901
+ type: urn:gala:problem:command-replay-conflict
36902
+ PLAN_REQUIRED:
36903
+ summary: PLAN_REQUIRED
36904
+ value:
36905
+ code: PLAN_REQUIRED
36906
+ correlationId: 018f0000-0000-7000-8000-000000000001
36907
+ detail: The organization's plan does not include asking Galascribe for help. See the operation contract.
36908
+ errors: []
36909
+ retryable: false
36910
+ schemaId: urn:gala:schema:problem:2.0.0
36911
+ schemaVersion: 2.0.0
36912
+ status: 409
36913
+ title: PLAN_REQUIRED
36914
+ type: urn:gala:problem:plan-required
36915
+ schema:
36916
+ $ref: "#/components/schemas/Problem"
36917
+ description: COMMAND_REPLAY_CONFLICT, PLAN_REQUIRED
36918
+ headers:
36919
+ Cache-Control:
36920
+ $ref: "#/components/headers/CacheControlNoStore"
36921
+ X-Correlation-Id:
36922
+ $ref: "#/components/headers/XCorrelationId"
36923
+ x-gala-problem-codes:
36924
+ - COMMAND_REPLAY_CONFLICT
36925
+ - PLAN_REQUIRED
36926
+ security:
36927
+ - browserSession: []
36928
+ summary: ask Galascribe for help with a site
36929
+ tags:
36930
+ - organizations
36931
+ x-gala-activation-gate: MVP
36932
+ x-gala-activation-guards:
36933
+ - NONE
36934
+ x-gala-capability-key: publication.settings.manage
36935
+ x-gala-concurrency: none
36936
+ x-gala-conditional-capabilities: []
36937
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
36938
+ x-gala-nullability: required-and-nullable-are-explicit
36939
+ x-gala-purpose: ask Galascribe for help with a site
36940
+ x-gala-reachable-problems:
36941
+ - AUTHENTICATION_REQUIRED
36942
+ - AUTHORIZATION_DENIED
36943
+ - COMMAND_REPLAY_CONFLICT
36944
+ - PLAN_REQUIRED
36945
+ - REQUEST_FIELD_UNKNOWN
36946
+ - RESOURCE_NOT_FOUND
36947
+ - VALIDATION_FAILED
36948
+ x-gala-replay-identity: idempotency-key
36949
+ x-gala-state-guards:
36950
+ - NONE
36951
+ x-gala-success-category: create
36952
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
36953
+ /v2/organizations/{organizationId}/publications/{publicationId}/changes:publish:
36954
+ post:
36955
+ description: |
36956
+ Publishes the named repository changes together. For each change, in order:
36957
+
36958
+ 1. If the change is behind the main branch head it is brought up to date automatically when that is clean (the same file-level merge as `:bring-up-to-date`). When it is not clean nothing is written for any change and the response is `409 INVALID_SOURCE_STATE` with one error per conflicting path (`code: CONTENT_CONFLICT`, `pointer: /documents/<path>` or `/assets/<path>`) and the live head on `X-Gala-Current-Head`.
36959
+ 2. If the publication's `publishingPolicy.requireReview` is true and the change has no approval, `409 INVALID_SOURCE_STATE` with `errors[].code REVIEW_REQUIRED` pointed at `/changeIds/<index>`.
36960
+ 3. If `publishingPolicy.galascribeMerges` is true (the default) the server opens and merges the pull request itself through the GitHub App. Otherwise each change must already be merged on GitHub; one that is not is `409 INVALID_SOURCE_STATE` with `errors[].code SOURCE_NOT_MERGED` pointed at `/changeIds/<index>`.
36961
+
36962
+ Then ONE deploy of the resulting main head is started. Success is `202` with the accepted operation (kind `publish`; `publishId` names it, and the operation's `subject.generationId` names the generation once it exists). `scheduledFor` schedules the deploy instead of starting it now and additionally needs `publication.schedule`; it is cancelled with `:cancel` on the publish. `Idempotency-Key` replays the same acceptance. Whole-request validation happens before any change is merged: a refused request merges nothing.
36963
+
36964
+ SCHEMA-3.3.0 scheduling: with `scheduledFor` the request is validated
36965
+ exactly as an immediate publish (changes publishable, review state,
36966
+ repository set up, binding active, no publish in flight) and nothing is
36967
+ merged now; the named changes are merged and deployed at `scheduledFor`,
36968
+ after the same checks run again. `scheduledFor` must be at least 5
36969
+ minutes and at most 366 days ahead, else `422 VALIDATION_FAILED` pointed
36970
+ at `/scheduledFor`. One schedule per publication: `409 SCHEDULE_EXISTS`
36971
+ while another is pending (its `publishId` is in the problem `detail` and
36972
+ in the site read's `schedule`). `409 CANONICAL_BASE_MISMATCH` when the
36973
+ merged head's `gala/publication.json` `canonicalBase` is not the address
36974
+ the site is served at (the active custom domain, else the github.io
36975
+ address); the problem `detail` names the expected value.
36976
+
36977
+ SCHEMA-3.17.0: that problem also carries the optional members
36978
+ `expectedBase` (the address the site is served at, an https URL),
36979
+ `profileBase` (the base the profile carries now, as written),
36980
+ `domainState` (the custom domain's state that decided the expected
36981
+ base, absent without a domain) and `remedy` (one sentence for the
36982
+ author), so a client names both addresses and renders the `remedy`
36983
+ without parsing `detail`. The server first includes the pending "Site
36984
+ address" change in the publish, or proposes one inside the request, and
36985
+ returns the problem only when it cannot. `409 INVALID_SOURCE_STATE`
36986
+ with `errors[].code DOMAIN_NOT_READY` is returned while
36987
+ a custom domain is part-way through its switch and no address can be
36988
+ verified (after the Pages CNAME is set and before the certificate
36989
+ serves); it resolves on its own, and the domain read's `nextStep` says
36990
+ what is being waited on.
36991
+ operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdChangesPublish
35801
36992
  parameters:
35802
36993
  - $ref: "#/components/parameters/XCorrelationId"
35803
36994
  - example: 018f0000-0000-7000-8000-000000000001
@@ -40753,12 +41944,12 @@ paths:
40753
41944
  - PublicationDestination:UNSET|SET
40754
41945
  x-gala-success-category: update
40755
41946
  x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
40756
- /v2/organizations/{organizationId}/publications/{publicationId}/domains:
41947
+ /v2/organizations/{organizationId}/publications/{publicationId}/domain-registrations:
40757
41948
  get:
40758
41949
  description: |
40759
- The publication's custom domain bindings, current first (at most one is
40760
- not `DETACHED` or `EXPIRED`).
40761
- operationId: getOrganizationsByOrganizationIdPublicationsByPublicationIdDomains
41950
+ Needs `publication.view`. The registrations made for this site, newest
41951
+ first (`DomainRegistration`). At most 20.
41952
+ operationId: getOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrations
40762
41953
  parameters:
40763
41954
  - $ref: "#/components/parameters/XCorrelationId"
40764
41955
  - example: 018f0000-0000-7000-8000-000000000001
@@ -40786,71 +41977,656 @@ paths:
40786
41977
  summary: Nominal successful response
40787
41978
  value:
40788
41979
  items:
40789
- - canonicalBase:
40790
- current: https://rathnastest.github.io/g11/
40791
- published: false
40792
- target: https://blog.maya.dev/
40793
- certificate:
40794
- state: NONE
40795
- createdAt: "2026-10-09T12:00:00.000Z"
40796
- dns:
40797
- observed:
40798
- addresses: []
40799
- pointsToGithub: false
40800
- resolves: false
40801
- records:
40802
- - name: blog
40803
- type: CNAME
40804
- value: rathnastest.github.io
40805
- domainId: 018f0000-0000-7000-8000-000000000001
40806
- expiresAt: "2026-10-16T12:00:00.000Z"
40807
- hostname: blog.maya.dev
40808
- kind: SUBDOMAIN
40809
- nextStep:
40810
- code: ADD_DNS_RECORDS
40811
- detail: Add the CNAME record at your registrar.
40812
- routing:
40813
- httpsEnforced: false
40814
- probeOk: false
40815
- servedByPages: false
40816
- state: OWNERSHIP_PENDING
40817
- updatedAt: "2026-10-09T12:00:00.000Z"
40818
- version: 0
41980
+ - createdAt: "2026-11-02T09:00:00.000Z"
41981
+ domainName: mayawrites.com
41982
+ registrationId: 018f0000-0000-7000-8000-000000000001
41983
+ state: REGISTERING
41984
+ updatedAt: "2026-11-02T09:00:00.000Z"
40819
41985
  schema:
40820
- $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsResponse"
40821
- description: list the custom domains of a publication succeeded
41986
+ $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsResponse"
41987
+ description: list the domain registrations of a site succeeded
40822
41988
  headers:
40823
41989
  Cache-Control:
40824
41990
  $ref: "#/components/headers/CacheControlNoStore"
40825
41991
  X-Correlation-Id:
40826
41992
  $ref: "#/components/headers/XCorrelationId"
40827
41993
  "400":
40828
- content:
40829
- application/problem+json:
40830
- examples:
40831
- VALIDATION_FAILED:
40832
- summary: VALIDATION_FAILED
40833
- value:
40834
- code: VALIDATION_FAILED
40835
- correlationId: 018f0000-0000-7000-8000-000000000001
40836
- detail: See the operation contract.
40837
- errors: []
40838
- retryable: false
40839
- schemaId: urn:gala:schema:problem:2.0.0
40840
- schemaVersion: 2.0.0
40841
- status: 400
40842
- title: VALIDATION_FAILED
40843
- type: urn:gala:problem:validation-failed
40844
- schema:
40845
- $ref: "#/components/schemas/Problem"
40846
- description: VALIDATION_FAILED
40847
- headers:
40848
- Cache-Control:
40849
- $ref: "#/components/headers/CacheControlNoStore"
40850
- X-Correlation-Id:
40851
- $ref: "#/components/headers/XCorrelationId"
40852
- x-gala-problem-codes:
40853
- - VALIDATION_FAILED
41994
+ $ref: "#/components/responses/ValidationFailed"
41995
+ "401":
41996
+ content:
41997
+ application/problem+json:
41998
+ examples:
41999
+ AUTHENTICATION_REQUIRED:
42000
+ summary: AUTHENTICATION_REQUIRED
42001
+ value:
42002
+ code: AUTHENTICATION_REQUIRED
42003
+ correlationId: 018f0000-0000-7000-8000-000000000001
42004
+ detail: See the operation contract.
42005
+ errors: []
42006
+ retryable: false
42007
+ schemaId: urn:gala:schema:problem:2.0.0
42008
+ schemaVersion: 2.0.0
42009
+ status: 401
42010
+ title: AUTHENTICATION_REQUIRED
42011
+ type: urn:gala:problem:authentication-required
42012
+ schema:
42013
+ $ref: "#/components/schemas/Problem"
42014
+ description: AUTHENTICATION_REQUIRED
42015
+ headers:
42016
+ Cache-Control:
42017
+ $ref: "#/components/headers/CacheControlNoStore"
42018
+ X-Correlation-Id:
42019
+ $ref: "#/components/headers/XCorrelationId"
42020
+ x-gala-problem-codes:
42021
+ - AUTHENTICATION_REQUIRED
42022
+ "403":
42023
+ $ref: "#/components/responses/AuthorizationDenied"
42024
+ "404":
42025
+ $ref: "#/components/responses/ResourceNotFound"
42026
+ security:
42027
+ - browserSession: []
42028
+ summary: list the domain registrations of a site
42029
+ tags:
42030
+ - domains
42031
+ x-gala-activation-gate: MVP
42032
+ x-gala-activation-guards:
42033
+ - NONE
42034
+ x-gala-capability-key: publication.view
42035
+ x-gala-concurrency: publication-and-destination-epochs
42036
+ x-gala-conditional-capabilities: []
42037
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
42038
+ x-gala-nullability: required-and-nullable-are-explicit
42039
+ x-gala-purpose: list the domain registrations of a site
42040
+ x-gala-reachable-problems:
42041
+ - AUTHENTICATION_REQUIRED
42042
+ - AUTHORIZATION_DENIED
42043
+ - RESOURCE_NOT_FOUND
42044
+ - VALIDATION_FAILED
42045
+ x-gala-replay-identity: safe-query
42046
+ x-gala-state-guards:
42047
+ - NONE
42048
+ x-gala-success-category: query
42049
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
42050
+ post:
42051
+ description: |
42052
+ Needs `publication.settings.manage`. Registers `domainName` for the
42053
+ organization as its one included domain and attaches it to this site.
42054
+ Galascribe re-checks the name, registers it with `registrant` as the
42055
+ domain's owner, then writes the DNS records and attaches the domain, so the
42056
+ person adds no records. The answer is `202` with a `DomainRegistration`
42057
+ that moves through its `state` while the work runs; read it again to follow
42058
+ it. `registrant` is sent to the registrar and is never stored, logged or
42059
+ returned. `409 PLAN_REQUIRED` when the plan has no included domain;
42060
+ `409 INVALID_SOURCE_STATE` when the organization already used its included
42061
+ domain; `422 VALIDATION_FAILED` for a name or registrant field that is not
42062
+ valid; `503 CAPABILITY_UNAVAILABLE` when registration is not set up.
42063
+ operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrations
42064
+ parameters:
42065
+ - $ref: "#/components/parameters/XCorrelationId"
42066
+ - example: 018f0000-0000-7000-8000-000000000001
42067
+ in: path
42068
+ name: organizationId
42069
+ required: true
42070
+ schema:
42071
+ format: uuid
42072
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
42073
+ type: string
42074
+ - example: 018f0000-0000-7000-8000-000000000001
42075
+ in: path
42076
+ name: publicationId
42077
+ required: true
42078
+ schema:
42079
+ format: uuid
42080
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
42081
+ type: string
42082
+ - $ref: "#/components/parameters/IdempotencyKey"
42083
+ - $ref: "#/components/parameters/XCsrfToken"
42084
+ requestBody:
42085
+ content:
42086
+ application/json:
42087
+ examples:
42088
+ nominal:
42089
+ summary: Nominal valid request
42090
+ value:
42091
+ domainName: mayawrites.com
42092
+ registrant:
42093
+ address:
42094
+ city: Portland
42095
+ countryCode: US
42096
+ postalCode: "97201"
42097
+ region: OR
42098
+ street: 12 Example Street
42099
+ email: maya@example.com
42100
+ name: Maya Example
42101
+ phone: "+1.5555555555"
42102
+ schema:
42103
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsRequest"
42104
+ required: true
42105
+ responses:
42106
+ "202":
42107
+ content:
42108
+ application/json:
42109
+ examples:
42110
+ nominal:
42111
+ summary: Nominal successful response
42112
+ value:
42113
+ createdAt: "2026-11-02T09:00:00.000Z"
42114
+ domainName: mayawrites.com
42115
+ registrationId: 018f0000-0000-7000-8000-000000000001
42116
+ state: REGISTERING
42117
+ updatedAt: "2026-11-02T09:00:00.000Z"
42118
+ schema:
42119
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsResponse"
42120
+ description: register the included domain succeeded
42121
+ headers:
42122
+ Cache-Control:
42123
+ $ref: "#/components/headers/CacheControlNoStore"
42124
+ X-Correlation-Id:
42125
+ $ref: "#/components/headers/XCorrelationId"
42126
+ "400":
42127
+ $ref: "#/components/responses/RequestInvalid"
42128
+ "401":
42129
+ content:
42130
+ application/problem+json:
42131
+ examples:
42132
+ AUTHENTICATION_REQUIRED:
42133
+ summary: AUTHENTICATION_REQUIRED
42134
+ value:
42135
+ code: AUTHENTICATION_REQUIRED
42136
+ correlationId: 018f0000-0000-7000-8000-000000000001
42137
+ detail: See the operation contract.
42138
+ errors: []
42139
+ retryable: false
42140
+ schemaId: urn:gala:schema:problem:2.0.0
42141
+ schemaVersion: 2.0.0
42142
+ status: 401
42143
+ title: AUTHENTICATION_REQUIRED
42144
+ type: urn:gala:problem:authentication-required
42145
+ schema:
42146
+ $ref: "#/components/schemas/Problem"
42147
+ description: AUTHENTICATION_REQUIRED
42148
+ headers:
42149
+ Cache-Control:
42150
+ $ref: "#/components/headers/CacheControlNoStore"
42151
+ X-Correlation-Id:
42152
+ $ref: "#/components/headers/XCorrelationId"
42153
+ x-gala-problem-codes:
42154
+ - AUTHENTICATION_REQUIRED
42155
+ "403":
42156
+ $ref: "#/components/responses/AuthorizationDenied"
42157
+ "404":
42158
+ $ref: "#/components/responses/ResourceNotFound"
42159
+ "409":
42160
+ content:
42161
+ application/problem+json:
42162
+ examples:
42163
+ COMMAND_REPLAY_CONFLICT:
42164
+ summary: COMMAND_REPLAY_CONFLICT
42165
+ value:
42166
+ code: COMMAND_REPLAY_CONFLICT
42167
+ correlationId: 018f0000-0000-7000-8000-000000000001
42168
+ detail: See the operation contract.
42169
+ errors: []
42170
+ retryable: false
42171
+ schemaId: urn:gala:schema:problem:2.0.0
42172
+ schemaVersion: 2.0.0
42173
+ status: 409
42174
+ title: COMMAND_REPLAY_CONFLICT
42175
+ type: urn:gala:problem:command-replay-conflict
42176
+ INVALID_SOURCE_STATE:
42177
+ summary: INVALID_SOURCE_STATE
42178
+ value:
42179
+ code: INVALID_SOURCE_STATE
42180
+ correlationId: 018f0000-0000-7000-8000-000000000001
42181
+ detail: See the operation contract.
42182
+ errors: []
42183
+ retryable: false
42184
+ schemaId: urn:gala:schema:problem:2.0.0
42185
+ schemaVersion: 2.0.0
42186
+ status: 409
42187
+ title: INVALID_SOURCE_STATE
42188
+ type: urn:gala:problem:invalid-source-state
42189
+ PLAN_REQUIRED:
42190
+ summary: PLAN_REQUIRED
42191
+ value:
42192
+ code: PLAN_REQUIRED
42193
+ correlationId: 018f0000-0000-7000-8000-000000000001
42194
+ detail: The organization's plan does not include a domain. See the operation contract.
42195
+ errors: []
42196
+ retryable: false
42197
+ schemaId: urn:gala:schema:problem:2.0.0
42198
+ schemaVersion: 2.0.0
42199
+ status: 409
42200
+ title: PLAN_REQUIRED
42201
+ type: urn:gala:problem:plan-required
42202
+ schema:
42203
+ $ref: "#/components/schemas/Problem"
42204
+ description: COMMAND_REPLAY_CONFLICT, INVALID_SOURCE_STATE, PLAN_REQUIRED
42205
+ headers:
42206
+ Cache-Control:
42207
+ $ref: "#/components/headers/CacheControlNoStore"
42208
+ X-Correlation-Id:
42209
+ $ref: "#/components/headers/XCorrelationId"
42210
+ x-gala-problem-codes:
42211
+ - COMMAND_REPLAY_CONFLICT
42212
+ - INVALID_SOURCE_STATE
42213
+ - PLAN_REQUIRED
42214
+ "422":
42215
+ content:
42216
+ application/problem+json:
42217
+ examples:
42218
+ VALIDATION_FAILED:
42219
+ summary: VALIDATION_FAILED
42220
+ value:
42221
+ code: VALIDATION_FAILED
42222
+ correlationId: 018f0000-0000-7000-8000-000000000001
42223
+ detail: See the operation contract.
42224
+ errors: []
42225
+ retryable: false
42226
+ schemaId: urn:gala:schema:problem:2.0.0
42227
+ schemaVersion: 2.0.0
42228
+ status: 422
42229
+ title: VALIDATION_FAILED
42230
+ type: urn:gala:problem:validation-failed
42231
+ schema:
42232
+ $ref: "#/components/schemas/Problem"
42233
+ description: VALIDATION_FAILED
42234
+ headers:
42235
+ Cache-Control:
42236
+ $ref: "#/components/headers/CacheControlNoStore"
42237
+ X-Correlation-Id:
42238
+ $ref: "#/components/headers/XCorrelationId"
42239
+ x-gala-problem-codes:
42240
+ - VALIDATION_FAILED
42241
+ "503":
42242
+ content:
42243
+ application/problem+json:
42244
+ examples:
42245
+ CAPABILITY_UNAVAILABLE:
42246
+ summary: CAPABILITY_UNAVAILABLE
42247
+ value:
42248
+ code: CAPABILITY_UNAVAILABLE
42249
+ correlationId: 018f0000-0000-7000-8000-000000000001
42250
+ detail: See the operation contract.
42251
+ errors: []
42252
+ retryable: false
42253
+ schemaId: urn:gala:schema:problem:2.0.0
42254
+ schemaVersion: 2.0.0
42255
+ status: 503
42256
+ title: CAPABILITY_UNAVAILABLE
42257
+ type: urn:gala:problem:capability-unavailable
42258
+ schema:
42259
+ $ref: "#/components/schemas/Problem"
42260
+ description: CAPABILITY_UNAVAILABLE
42261
+ headers:
42262
+ Cache-Control:
42263
+ $ref: "#/components/headers/CacheControlNoStore"
42264
+ X-Correlation-Id:
42265
+ $ref: "#/components/headers/XCorrelationId"
42266
+ x-gala-problem-codes:
42267
+ - CAPABILITY_UNAVAILABLE
42268
+ security:
42269
+ - browserSession: []
42270
+ summary: register the included domain
42271
+ tags:
42272
+ - domains
42273
+ x-gala-activation-gate: MVP
42274
+ x-gala-activation-guards:
42275
+ - DOMAIN_REGISTRATION_ENABLED
42276
+ x-gala-capability-key: publication.settings.manage
42277
+ x-gala-concurrency: organization-version
42278
+ x-gala-conditional-capabilities: []
42279
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
42280
+ x-gala-nullability: required-and-nullable-are-explicit
42281
+ x-gala-purpose: register the included domain
42282
+ x-gala-reachable-problems:
42283
+ - AUTHENTICATION_REQUIRED
42284
+ - AUTHORIZATION_DENIED
42285
+ - CAPABILITY_UNAVAILABLE
42286
+ - COMMAND_REPLAY_CONFLICT
42287
+ - INVALID_SOURCE_STATE
42288
+ - PLAN_REQUIRED
42289
+ - REQUEST_FIELD_UNKNOWN
42290
+ - RESOURCE_NOT_FOUND
42291
+ - VALIDATION_FAILED
42292
+ x-gala-replay-identity: idempotency-key
42293
+ x-gala-state-guards:
42294
+ - Organization:INCLUDED_DOMAIN_UNUSED
42295
+ x-gala-success-category: async
42296
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
42297
+ /v2/organizations/{organizationId}/publications/{publicationId}/domain-registrations/{registrationId}:
42298
+ get:
42299
+ description: |
42300
+ Needs `publication.view`. One registration made for this site. `state`
42301
+ follows the work: `REQUESTED`, `REGISTERING`, `REGISTERED` (bought, records
42302
+ not yet written) and `ATTACHED` (the site uses it; `domainId` names the
42303
+ binding), or `ACTION_REQUIRED` and `FAILED` (`failure` says what happened and
42304
+ the person may ask Galascribe for help).
42305
+ operationId: getOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsByRegistrationId
42306
+ parameters:
42307
+ - $ref: "#/components/parameters/XCorrelationId"
42308
+ - example: 018f0000-0000-7000-8000-000000000001
42309
+ in: path
42310
+ name: organizationId
42311
+ required: true
42312
+ schema:
42313
+ format: uuid
42314
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
42315
+ type: string
42316
+ - example: 018f0000-0000-7000-8000-000000000001
42317
+ in: path
42318
+ name: publicationId
42319
+ required: true
42320
+ schema:
42321
+ format: uuid
42322
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
42323
+ type: string
42324
+ - example: 018f0000-0000-7000-8000-000000000001
42325
+ in: path
42326
+ name: registrationId
42327
+ required: true
42328
+ schema:
42329
+ format: uuid
42330
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
42331
+ type: string
42332
+ responses:
42333
+ "200":
42334
+ content:
42335
+ application/json:
42336
+ examples:
42337
+ nominal:
42338
+ summary: Nominal successful response
42339
+ value:
42340
+ createdAt: "2026-11-02T09:00:00.000Z"
42341
+ domainId: 018f0000-0000-7000-8000-000000000001
42342
+ domainName: mayawrites.com
42343
+ registrationId: 018f0000-0000-7000-8000-000000000001
42344
+ state: ATTACHED
42345
+ updatedAt: "2026-11-02T09:00:00.000Z"
42346
+ schema:
42347
+ $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsByRegistrationIdResponse"
42348
+ description: read a domain registration succeeded
42349
+ headers:
42350
+ Cache-Control:
42351
+ $ref: "#/components/headers/CacheControlNoStore"
42352
+ X-Correlation-Id:
42353
+ $ref: "#/components/headers/XCorrelationId"
42354
+ "400":
42355
+ $ref: "#/components/responses/ValidationFailed"
42356
+ "401":
42357
+ content:
42358
+ application/problem+json:
42359
+ examples:
42360
+ AUTHENTICATION_REQUIRED:
42361
+ summary: AUTHENTICATION_REQUIRED
42362
+ value:
42363
+ code: AUTHENTICATION_REQUIRED
42364
+ correlationId: 018f0000-0000-7000-8000-000000000001
42365
+ detail: See the operation contract.
42366
+ errors: []
42367
+ retryable: false
42368
+ schemaId: urn:gala:schema:problem:2.0.0
42369
+ schemaVersion: 2.0.0
42370
+ status: 401
42371
+ title: AUTHENTICATION_REQUIRED
42372
+ type: urn:gala:problem:authentication-required
42373
+ schema:
42374
+ $ref: "#/components/schemas/Problem"
42375
+ description: AUTHENTICATION_REQUIRED
42376
+ headers:
42377
+ Cache-Control:
42378
+ $ref: "#/components/headers/CacheControlNoStore"
42379
+ X-Correlation-Id:
42380
+ $ref: "#/components/headers/XCorrelationId"
42381
+ x-gala-problem-codes:
42382
+ - AUTHENTICATION_REQUIRED
42383
+ "403":
42384
+ $ref: "#/components/responses/AuthorizationDenied"
42385
+ "404":
42386
+ $ref: "#/components/responses/ResourceNotFound"
42387
+ security:
42388
+ - browserSession: []
42389
+ summary: read a domain registration
42390
+ tags:
42391
+ - domains
42392
+ x-gala-activation-gate: MVP
42393
+ x-gala-activation-guards:
42394
+ - NONE
42395
+ x-gala-capability-key: publication.view
42396
+ x-gala-concurrency: publication-and-destination-epochs
42397
+ x-gala-conditional-capabilities: []
42398
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
42399
+ x-gala-nullability: required-and-nullable-are-explicit
42400
+ x-gala-purpose: read a domain registration
42401
+ x-gala-reachable-problems:
42402
+ - AUTHENTICATION_REQUIRED
42403
+ - AUTHORIZATION_DENIED
42404
+ - RESOURCE_NOT_FOUND
42405
+ - VALIDATION_FAILED
42406
+ x-gala-replay-identity: safe-query
42407
+ x-gala-state-guards:
42408
+ - NONE
42409
+ x-gala-success-category: query
42410
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
42411
+ /v2/organizations/{organizationId}/publications/{publicationId}/domain-registrations:check:
42412
+ post:
42413
+ description: |
42414
+ Needs `publication.settings.manage`. Asks whether `name` can be registered
42415
+ for the organization as its included domain, without registering it. Always
42416
+ `200`: `registrable` is true, or `reason` says why not. `UNAVAILABLE`:
42417
+ already registered. `EXTENSION_NOT_SUPPORTED`: Galascribe cannot register
42418
+ that ending. `PREMIUM`: a premium name, which the included domain does
42419
+ not cover. `OVER_PRICE_CAP`: its first-year price is above what the
42420
+ included domain covers. `INVALID_NAME`: not a usable domain name.
42421
+ `PLAN_REQUIRED`: the plan has no included domain. `ALREADY_USED`: the
42422
+ organization already used its included domain. `NOT_CONFIGURED`:
42423
+ registration is not set up on this deployment. The response carries no
42424
+ price: the domain is included in the plan.
42425
+ operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsCheck
42426
+ parameters:
42427
+ - $ref: "#/components/parameters/XCorrelationId"
42428
+ - example: 018f0000-0000-7000-8000-000000000001
42429
+ in: path
42430
+ name: organizationId
42431
+ required: true
42432
+ schema:
42433
+ format: uuid
42434
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
42435
+ type: string
42436
+ - example: 018f0000-0000-7000-8000-000000000001
42437
+ in: path
42438
+ name: publicationId
42439
+ required: true
42440
+ schema:
42441
+ format: uuid
42442
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
42443
+ type: string
42444
+ - $ref: "#/components/parameters/XCsrfToken"
42445
+ requestBody:
42446
+ content:
42447
+ application/json:
42448
+ examples:
42449
+ nominal:
42450
+ summary: Nominal valid request
42451
+ value:
42452
+ name: mayawrites.com
42453
+ schema:
42454
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsCheckRequest"
42455
+ required: true
42456
+ responses:
42457
+ "200":
42458
+ content:
42459
+ application/json:
42460
+ examples:
42461
+ nominal:
42462
+ summary: Nominal successful response
42463
+ value:
42464
+ name: mayawrites.com
42465
+ registrable: true
42466
+ schema:
42467
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsCheckResponse"
42468
+ description: check a domain name for registration succeeded
42469
+ headers:
42470
+ Cache-Control:
42471
+ $ref: "#/components/headers/CacheControlNoStore"
42472
+ X-Correlation-Id:
42473
+ $ref: "#/components/headers/XCorrelationId"
42474
+ "400":
42475
+ $ref: "#/components/responses/RequestInvalid"
42476
+ "401":
42477
+ content:
42478
+ application/problem+json:
42479
+ examples:
42480
+ AUTHENTICATION_REQUIRED:
42481
+ summary: AUTHENTICATION_REQUIRED
42482
+ value:
42483
+ code: AUTHENTICATION_REQUIRED
42484
+ correlationId: 018f0000-0000-7000-8000-000000000001
42485
+ detail: See the operation contract.
42486
+ errors: []
42487
+ retryable: false
42488
+ schemaId: urn:gala:schema:problem:2.0.0
42489
+ schemaVersion: 2.0.0
42490
+ status: 401
42491
+ title: AUTHENTICATION_REQUIRED
42492
+ type: urn:gala:problem:authentication-required
42493
+ schema:
42494
+ $ref: "#/components/schemas/Problem"
42495
+ description: AUTHENTICATION_REQUIRED
42496
+ headers:
42497
+ Cache-Control:
42498
+ $ref: "#/components/headers/CacheControlNoStore"
42499
+ X-Correlation-Id:
42500
+ $ref: "#/components/headers/XCorrelationId"
42501
+ x-gala-problem-codes:
42502
+ - AUTHENTICATION_REQUIRED
42503
+ "403":
42504
+ $ref: "#/components/responses/AuthorizationDenied"
42505
+ "404":
42506
+ $ref: "#/components/responses/ResourceNotFound"
42507
+ security:
42508
+ - browserSession: []
42509
+ summary: check a domain name for registration
42510
+ tags:
42511
+ - domains
42512
+ x-gala-activation-gate: MVP
42513
+ x-gala-activation-guards:
42514
+ - NONE
42515
+ x-gala-capability-key: publication.settings.manage
42516
+ x-gala-concurrency: none
42517
+ x-gala-conditional-capabilities: []
42518
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
42519
+ x-gala-nullability: required-and-nullable-are-explicit
42520
+ x-gala-purpose: check a domain name for registration
42521
+ x-gala-reachable-problems:
42522
+ - AUTHENTICATION_REQUIRED
42523
+ - AUTHORIZATION_DENIED
42524
+ - REQUEST_FIELD_UNKNOWN
42525
+ - RESOURCE_NOT_FOUND
42526
+ - VALIDATION_FAILED
42527
+ x-gala-replay-identity: safe-query
42528
+ x-gala-state-guards:
42529
+ - NONE
42530
+ x-gala-success-category: protocol
42531
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
42532
+ /v2/organizations/{organizationId}/publications/{publicationId}/domains:
42533
+ get:
42534
+ description: |
42535
+ The publication's custom domain bindings, current first (at most one is
42536
+ not `DETACHED` or `EXPIRED`).
42537
+ operationId: getOrganizationsByOrganizationIdPublicationsByPublicationIdDomains
42538
+ parameters:
42539
+ - $ref: "#/components/parameters/XCorrelationId"
42540
+ - example: 018f0000-0000-7000-8000-000000000001
42541
+ in: path
42542
+ name: organizationId
42543
+ required: true
42544
+ schema:
42545
+ format: uuid
42546
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
42547
+ type: string
42548
+ - example: 018f0000-0000-7000-8000-000000000001
42549
+ in: path
42550
+ name: publicationId
42551
+ required: true
42552
+ schema:
42553
+ format: uuid
42554
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
42555
+ type: string
42556
+ responses:
42557
+ "200":
42558
+ content:
42559
+ application/json:
42560
+ examples:
42561
+ nominal:
42562
+ summary: Nominal successful response
42563
+ value:
42564
+ items:
42565
+ - canonicalBase:
42566
+ current: https://rathnastest.github.io/g11/
42567
+ published: false
42568
+ target: https://blog.maya.dev/
42569
+ certificate:
42570
+ state: NONE
42571
+ createdAt: "2026-10-09T12:00:00.000Z"
42572
+ dns:
42573
+ observed:
42574
+ addresses: []
42575
+ pointsToGithub: false
42576
+ resolves: false
42577
+ records:
42578
+ - name: blog
42579
+ type: CNAME
42580
+ value: rathnastest.github.io
42581
+ domainId: 018f0000-0000-7000-8000-000000000001
42582
+ expiresAt: "2026-10-16T12:00:00.000Z"
42583
+ hostname: blog.maya.dev
42584
+ kind: SUBDOMAIN
42585
+ nextStep:
42586
+ code: ADD_DNS_RECORDS
42587
+ detail: Add the CNAME record at your registrar.
42588
+ routing:
42589
+ httpsEnforced: false
42590
+ probeOk: false
42591
+ servedByPages: false
42592
+ state: OWNERSHIP_PENDING
42593
+ updatedAt: "2026-10-09T12:00:00.000Z"
42594
+ version: 0
42595
+ schema:
42596
+ $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsResponse"
42597
+ description: list the custom domains of a publication succeeded
42598
+ headers:
42599
+ Cache-Control:
42600
+ $ref: "#/components/headers/CacheControlNoStore"
42601
+ X-Correlation-Id:
42602
+ $ref: "#/components/headers/XCorrelationId"
42603
+ "400":
42604
+ content:
42605
+ application/problem+json:
42606
+ examples:
42607
+ VALIDATION_FAILED:
42608
+ summary: VALIDATION_FAILED
42609
+ value:
42610
+ code: VALIDATION_FAILED
42611
+ correlationId: 018f0000-0000-7000-8000-000000000001
42612
+ detail: See the operation contract.
42613
+ errors: []
42614
+ retryable: false
42615
+ schemaId: urn:gala:schema:problem:2.0.0
42616
+ schemaVersion: 2.0.0
42617
+ status: 400
42618
+ title: VALIDATION_FAILED
42619
+ type: urn:gala:problem:validation-failed
42620
+ schema:
42621
+ $ref: "#/components/schemas/Problem"
42622
+ description: VALIDATION_FAILED
42623
+ headers:
42624
+ Cache-Control:
42625
+ $ref: "#/components/headers/CacheControlNoStore"
42626
+ X-Correlation-Id:
42627
+ $ref: "#/components/headers/XCorrelationId"
42628
+ x-gala-problem-codes:
42629
+ - VALIDATION_FAILED
40854
42630
  "401":
40855
42631
  content:
40856
42632
  application/problem+json:
@@ -43397,6 +45173,389 @@ paths:
43397
45173
  - NONE
43398
45174
  x-gala-success-category: update
43399
45175
  x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
45176
+ /v2/organizations/{organizationId}/publications/{publicationId}/domains:check-galascribe-address:
45177
+ post:
45178
+ description: |
45179
+ Needs `publication.settings.manage`. Asks whether `label` can become this
45180
+ site's `label.galascribe.com` address, without reserving it. Always
45181
+ `200`: `available` is true, or `reason` says why not. `INVALID`: not a
45182
+ usable label (3 to 63 lowercase letters, digits and hyphens, not starting
45183
+ or ending with a hyphen). `RESERVED`: a name Galascribe keeps for itself.
45184
+ `TAKEN`: another site has it or something already exists at that name.
45185
+ `PLAN_REQUIRED`: the organization's plan has no Galascribe address.
45186
+ `NOT_CONFIGURED`: Galascribe addresses are not set up on this deployment.
45187
+ `ALREADY_HAS_DOMAIN`: the site already has a domain that is not detached.
45188
+ `hostname` is the full address when the label is well formed.
45189
+ operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsCheckGalascribeAddress
45190
+ parameters:
45191
+ - $ref: "#/components/parameters/XCorrelationId"
45192
+ - example: 018f0000-0000-7000-8000-000000000001
45193
+ in: path
45194
+ name: organizationId
45195
+ required: true
45196
+ schema:
45197
+ format: uuid
45198
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
45199
+ type: string
45200
+ - example: 018f0000-0000-7000-8000-000000000001
45201
+ in: path
45202
+ name: publicationId
45203
+ required: true
45204
+ schema:
45205
+ format: uuid
45206
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
45207
+ type: string
45208
+ - $ref: "#/components/parameters/XCsrfToken"
45209
+ requestBody:
45210
+ content:
45211
+ application/json:
45212
+ examples:
45213
+ nominal:
45214
+ summary: Nominal valid request
45215
+ value:
45216
+ label: maya
45217
+ schema:
45218
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsCheckGalascribeAddressRequest"
45219
+ required: true
45220
+ responses:
45221
+ "200":
45222
+ content:
45223
+ application/json:
45224
+ examples:
45225
+ nominal:
45226
+ summary: Nominal successful response
45227
+ value:
45228
+ available: true
45229
+ hostname: maya.galascribe.com
45230
+ label: maya
45231
+ schema:
45232
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsCheckGalascribeAddressResponse"
45233
+ description: check a Galascribe address succeeded
45234
+ headers:
45235
+ Cache-Control:
45236
+ $ref: "#/components/headers/CacheControlNoStore"
45237
+ X-Correlation-Id:
45238
+ $ref: "#/components/headers/XCorrelationId"
45239
+ "400":
45240
+ $ref: "#/components/responses/RequestInvalid"
45241
+ "401":
45242
+ content:
45243
+ application/problem+json:
45244
+ examples:
45245
+ AUTHENTICATION_REQUIRED:
45246
+ summary: AUTHENTICATION_REQUIRED
45247
+ value:
45248
+ code: AUTHENTICATION_REQUIRED
45249
+ correlationId: 018f0000-0000-7000-8000-000000000001
45250
+ detail: See the operation contract.
45251
+ errors: []
45252
+ retryable: false
45253
+ schemaId: urn:gala:schema:problem:2.0.0
45254
+ schemaVersion: 2.0.0
45255
+ status: 401
45256
+ title: AUTHENTICATION_REQUIRED
45257
+ type: urn:gala:problem:authentication-required
45258
+ schema:
45259
+ $ref: "#/components/schemas/Problem"
45260
+ description: AUTHENTICATION_REQUIRED
45261
+ headers:
45262
+ Cache-Control:
45263
+ $ref: "#/components/headers/CacheControlNoStore"
45264
+ X-Correlation-Id:
45265
+ $ref: "#/components/headers/XCorrelationId"
45266
+ x-gala-problem-codes:
45267
+ - AUTHENTICATION_REQUIRED
45268
+ "403":
45269
+ $ref: "#/components/responses/AuthorizationDenied"
45270
+ "404":
45271
+ $ref: "#/components/responses/ResourceNotFound"
45272
+ security:
45273
+ - browserSession: []
45274
+ summary: check a Galascribe address
45275
+ tags:
45276
+ - domains
45277
+ x-gala-activation-gate: MVP
45278
+ x-gala-activation-guards:
45279
+ - NONE
45280
+ x-gala-capability-key: publication.settings.manage
45281
+ x-gala-concurrency: none
45282
+ x-gala-conditional-capabilities: []
45283
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
45284
+ x-gala-nullability: required-and-nullable-are-explicit
45285
+ x-gala-purpose: check a Galascribe address
45286
+ x-gala-reachable-problems:
45287
+ - AUTHENTICATION_REQUIRED
45288
+ - AUTHORIZATION_DENIED
45289
+ - REQUEST_FIELD_UNKNOWN
45290
+ - RESOURCE_NOT_FOUND
45291
+ - VALIDATION_FAILED
45292
+ x-gala-replay-identity: safe-query
45293
+ x-gala-state-guards:
45294
+ - NONE
45295
+ x-gala-success-category: protocol
45296
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
45297
+ /v2/organizations/{organizationId}/publications/{publicationId}/domains:claim-galascribe-address:
45298
+ post:
45299
+ description: |
45300
+ Needs `publication.settings.manage`. Makes `label.galascribe.com` this
45301
+ site's custom domain. Galascribe owns the DNS records, so the returned
45302
+ `DomainBinding` carries `galascribeManaged` and the person is never asked
45303
+ to add records; the binding then follows the usual domain steps (Pages
45304
+ domain, certificate, base move). `409 PLAN_REQUIRED` when the plan has no
45305
+ Galascribe address; `409 INVALID_SOURCE_STATE` when the site already has a
45306
+ domain that is not detached; `422 VALIDATION_FAILED` pointed at `/label`
45307
+ when the label is `INVALID`, `RESERVED` or `TAKEN` (the reasons of the check
45308
+ read, which tells a client which one); `503 CAPABILITY_UNAVAILABLE` when
45309
+ Galascribe addresses are not configured.
45310
+ operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsClaimGalascribeAddress
45311
+ parameters:
45312
+ - $ref: "#/components/parameters/XCorrelationId"
45313
+ - example: 018f0000-0000-7000-8000-000000000001
45314
+ in: path
45315
+ name: organizationId
45316
+ required: true
45317
+ schema:
45318
+ format: uuid
45319
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
45320
+ type: string
45321
+ - example: 018f0000-0000-7000-8000-000000000001
45322
+ in: path
45323
+ name: publicationId
45324
+ required: true
45325
+ schema:
45326
+ format: uuid
45327
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
45328
+ type: string
45329
+ - $ref: "#/components/parameters/IdempotencyKey"
45330
+ - $ref: "#/components/parameters/XCsrfToken"
45331
+ requestBody:
45332
+ content:
45333
+ application/json:
45334
+ examples:
45335
+ nominal:
45336
+ summary: Nominal valid request
45337
+ value:
45338
+ label: maya
45339
+ schema:
45340
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsClaimGalascribeAddressRequest"
45341
+ required: true
45342
+ responses:
45343
+ "201":
45344
+ content:
45345
+ application/json:
45346
+ examples:
45347
+ nominal:
45348
+ summary: Nominal successful response
45349
+ value:
45350
+ canonicalBase:
45351
+ current: https://rathnastest.github.io/g11/
45352
+ published: false
45353
+ target: https://maya.galascribe.com/
45354
+ certificate:
45355
+ state: NONE
45356
+ createdAt: "2026-11-02T09:00:00.000Z"
45357
+ dns:
45358
+ observed:
45359
+ addresses: []
45360
+ pointsToGithub: false
45361
+ resolves: false
45362
+ records: []
45363
+ domainId: 018f0000-0000-7000-8000-000000000001
45364
+ galascribeManaged:
45365
+ kind: GALASCRIBE_ADDRESS
45366
+ hostname: maya.galascribe.com
45367
+ kind: SUBDOMAIN
45368
+ nextStep:
45369
+ code: WAIT_FOR_DNS
45370
+ detail: Galascribe is setting this up.
45371
+ routing:
45372
+ httpsEnforced: false
45373
+ probeOk: false
45374
+ servedByPages: false
45375
+ state: OWNERSHIP_PENDING
45376
+ updatedAt: "2026-11-02T09:00:00.000Z"
45377
+ version: 0
45378
+ schema:
45379
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsClaimGalascribeAddressResponse"
45380
+ description: claim a Galascribe address succeeded
45381
+ headers:
45382
+ Cache-Control:
45383
+ $ref: "#/components/headers/CacheControlNoStore"
45384
+ Location:
45385
+ $ref: "#/components/headers/Location"
45386
+ X-Correlation-Id:
45387
+ $ref: "#/components/headers/XCorrelationId"
45388
+ "400":
45389
+ $ref: "#/components/responses/RequestInvalid"
45390
+ "401":
45391
+ content:
45392
+ application/problem+json:
45393
+ examples:
45394
+ AUTHENTICATION_REQUIRED:
45395
+ summary: AUTHENTICATION_REQUIRED
45396
+ value:
45397
+ code: AUTHENTICATION_REQUIRED
45398
+ correlationId: 018f0000-0000-7000-8000-000000000001
45399
+ detail: See the operation contract.
45400
+ errors: []
45401
+ retryable: false
45402
+ schemaId: urn:gala:schema:problem:2.0.0
45403
+ schemaVersion: 2.0.0
45404
+ status: 401
45405
+ title: AUTHENTICATION_REQUIRED
45406
+ type: urn:gala:problem:authentication-required
45407
+ schema:
45408
+ $ref: "#/components/schemas/Problem"
45409
+ description: AUTHENTICATION_REQUIRED
45410
+ headers:
45411
+ Cache-Control:
45412
+ $ref: "#/components/headers/CacheControlNoStore"
45413
+ X-Correlation-Id:
45414
+ $ref: "#/components/headers/XCorrelationId"
45415
+ x-gala-problem-codes:
45416
+ - AUTHENTICATION_REQUIRED
45417
+ "403":
45418
+ $ref: "#/components/responses/AuthorizationDenied"
45419
+ "404":
45420
+ $ref: "#/components/responses/ResourceNotFound"
45421
+ "409":
45422
+ content:
45423
+ application/problem+json:
45424
+ examples:
45425
+ COMMAND_REPLAY_CONFLICT:
45426
+ summary: COMMAND_REPLAY_CONFLICT
45427
+ value:
45428
+ code: COMMAND_REPLAY_CONFLICT
45429
+ correlationId: 018f0000-0000-7000-8000-000000000001
45430
+ detail: See the operation contract.
45431
+ errors: []
45432
+ retryable: false
45433
+ schemaId: urn:gala:schema:problem:2.0.0
45434
+ schemaVersion: 2.0.0
45435
+ status: 409
45436
+ title: COMMAND_REPLAY_CONFLICT
45437
+ type: urn:gala:problem:command-replay-conflict
45438
+ INVALID_SOURCE_STATE:
45439
+ summary: INVALID_SOURCE_STATE
45440
+ value:
45441
+ code: INVALID_SOURCE_STATE
45442
+ correlationId: 018f0000-0000-7000-8000-000000000001
45443
+ detail: See the operation contract.
45444
+ errors: []
45445
+ retryable: false
45446
+ schemaId: urn:gala:schema:problem:2.0.0
45447
+ schemaVersion: 2.0.0
45448
+ status: 409
45449
+ title: INVALID_SOURCE_STATE
45450
+ type: urn:gala:problem:invalid-source-state
45451
+ PLAN_REQUIRED:
45452
+ summary: PLAN_REQUIRED
45453
+ value:
45454
+ code: PLAN_REQUIRED
45455
+ correlationId: 018f0000-0000-7000-8000-000000000001
45456
+ detail: The organization's plan does not include a Galascribe address. See the operation contract.
45457
+ errors: []
45458
+ retryable: false
45459
+ schemaId: urn:gala:schema:problem:2.0.0
45460
+ schemaVersion: 2.0.0
45461
+ status: 409
45462
+ title: PLAN_REQUIRED
45463
+ type: urn:gala:problem:plan-required
45464
+ schema:
45465
+ $ref: "#/components/schemas/Problem"
45466
+ description: COMMAND_REPLAY_CONFLICT, INVALID_SOURCE_STATE, PLAN_REQUIRED
45467
+ headers:
45468
+ Cache-Control:
45469
+ $ref: "#/components/headers/CacheControlNoStore"
45470
+ X-Correlation-Id:
45471
+ $ref: "#/components/headers/XCorrelationId"
45472
+ x-gala-problem-codes:
45473
+ - COMMAND_REPLAY_CONFLICT
45474
+ - INVALID_SOURCE_STATE
45475
+ - PLAN_REQUIRED
45476
+ "422":
45477
+ content:
45478
+ application/problem+json:
45479
+ examples:
45480
+ VALIDATION_FAILED:
45481
+ summary: VALIDATION_FAILED
45482
+ value:
45483
+ code: VALIDATION_FAILED
45484
+ correlationId: 018f0000-0000-7000-8000-000000000001
45485
+ detail: That address is reserved. Choose another. See the operation contract.
45486
+ errors: []
45487
+ retryable: false
45488
+ schemaId: urn:gala:schema:problem:2.0.0
45489
+ schemaVersion: 2.0.0
45490
+ status: 422
45491
+ title: VALIDATION_FAILED
45492
+ type: urn:gala:problem:validation-failed
45493
+ schema:
45494
+ $ref: "#/components/schemas/Problem"
45495
+ description: VALIDATION_FAILED
45496
+ headers:
45497
+ Cache-Control:
45498
+ $ref: "#/components/headers/CacheControlNoStore"
45499
+ X-Correlation-Id:
45500
+ $ref: "#/components/headers/XCorrelationId"
45501
+ x-gala-problem-codes:
45502
+ - VALIDATION_FAILED
45503
+ "503":
45504
+ content:
45505
+ application/problem+json:
45506
+ examples:
45507
+ CAPABILITY_UNAVAILABLE:
45508
+ summary: CAPABILITY_UNAVAILABLE
45509
+ value:
45510
+ code: CAPABILITY_UNAVAILABLE
45511
+ correlationId: 018f0000-0000-7000-8000-000000000001
45512
+ detail: See the operation contract.
45513
+ errors: []
45514
+ retryable: false
45515
+ schemaId: urn:gala:schema:problem:2.0.0
45516
+ schemaVersion: 2.0.0
45517
+ status: 503
45518
+ title: CAPABILITY_UNAVAILABLE
45519
+ type: urn:gala:problem:capability-unavailable
45520
+ schema:
45521
+ $ref: "#/components/schemas/Problem"
45522
+ description: CAPABILITY_UNAVAILABLE
45523
+ headers:
45524
+ Cache-Control:
45525
+ $ref: "#/components/headers/CacheControlNoStore"
45526
+ X-Correlation-Id:
45527
+ $ref: "#/components/headers/XCorrelationId"
45528
+ x-gala-problem-codes:
45529
+ - CAPABILITY_UNAVAILABLE
45530
+ security:
45531
+ - browserSession: []
45532
+ summary: claim a Galascribe address
45533
+ tags:
45534
+ - domains
45535
+ x-gala-activation-gate: MVP
45536
+ x-gala-activation-guards:
45537
+ - GALASCRIBE_ADDRESS_ZONE_CONFIGURED
45538
+ x-gala-capability-key: publication.settings.manage
45539
+ x-gala-concurrency: binding-epoch
45540
+ x-gala-conditional-capabilities: []
45541
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
45542
+ x-gala-nullability: required-and-nullable-are-explicit
45543
+ x-gala-purpose: claim a Galascribe address
45544
+ x-gala-reachable-problems:
45545
+ - AUTHENTICATION_REQUIRED
45546
+ - AUTHORIZATION_DENIED
45547
+ - CAPABILITY_UNAVAILABLE
45548
+ - COMMAND_REPLAY_CONFLICT
45549
+ - INVALID_SOURCE_STATE
45550
+ - PLAN_REQUIRED
45551
+ - REQUEST_FIELD_UNKNOWN
45552
+ - RESOURCE_NOT_FOUND
45553
+ - VALIDATION_FAILED
45554
+ x-gala-replay-identity: idempotency-key
45555
+ x-gala-state-guards:
45556
+ - PublicationDomain:NONE -> OWNERSHIP_PENDING
45557
+ x-gala-success-category: create
45558
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
43400
45559
  /v2/organizations/{organizationId}/publications/{publicationId}/followers:
43401
45560
  get:
43402
45561
  description: Needs `publication.audience.read`. `total` is every follow of the site, `authors` the count per author, and `items` the followers newest first as display names, one keyset page at a time. There is no public follower count; this list is for the site's owners and admins.
@@ -56237,6 +58396,199 @@ paths:
56237
58396
  - NONE
56238
58397
  x-gala-success-category: query
56239
58398
  x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
58399
+ /v2/organizations/{organizationId}/publications/{publicationId}/site/hosting-check:
58400
+ get:
58401
+ description: |
58402
+ Needs `publication.view`. What the site's repository contains that GitHub
58403
+ Pages limits or does not allow, as a `SiteHostingCheck`, computed for the
58404
+ default branch's current commit (`revision`) from the repository's file
58405
+ tree and a bounded scan of its pages. It is advice and never blocks
58406
+ publishing: a `LIMIT` finding is something GitHub will refuse or stop
58407
+ serving, a `WARNING` is a risk. `offers` is empty when there is no
58408
+ finding, `UPGRADE` on the Free plan and `REQUEST_GALASCRIBE_HOSTING` on a
58409
+ paid plan. The response carries a strong `ETag` and honours
58410
+ `If-None-Match` with `304` and no body; `Cache-Control` is `private,
58411
+ no-cache`, so a browser stores the body and revalidates it on every use.
58412
+ operationId: getOrganizationsByOrganizationIdPublicationsByPublicationIdSiteHostingCheck
58413
+ parameters:
58414
+ - $ref: "#/components/parameters/XCorrelationId"
58415
+ - example: 018f0000-0000-7000-8000-000000000001
58416
+ in: path
58417
+ name: organizationId
58418
+ required: true
58419
+ schema:
58420
+ format: uuid
58421
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
58422
+ type: string
58423
+ - example: 018f0000-0000-7000-8000-000000000001
58424
+ in: path
58425
+ name: publicationId
58426
+ required: true
58427
+ schema:
58428
+ format: uuid
58429
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
58430
+ type: string
58431
+ - description: A previously returned `ETag`; a match answers `304`.
58432
+ example: '"1"'
58433
+ in: header
58434
+ name: If-None-Match
58435
+ required: false
58436
+ schema:
58437
+ maxLength: 256
58438
+ type: string
58439
+ responses:
58440
+ "200":
58441
+ content:
58442
+ application/json:
58443
+ examples:
58444
+ nominal:
58445
+ summary: Nominal successful response
58446
+ value:
58447
+ checkedAt: "2026-11-02T09:00:00.000Z"
58448
+ findings:
58449
+ - bytes: 62914560
58450
+ code: LARGE_FILE
58451
+ items:
58452
+ - bytes: 62914560
58453
+ path: media/launch-tour.mp4
58454
+ limitBytes: 52428800
58455
+ pathCount: 1
58456
+ severity: WARNING
58457
+ - code: COMMERCE_PAGE
58458
+ items:
58459
+ - path: pages/shop.md
58460
+ title: Shop
58461
+ pathCount: 1
58462
+ severity: WARNING
58463
+ signals:
58464
+ - CHECKOUT_LINK
58465
+ - SHOP_WORDS
58466
+ host: GITHUB_PAGES
58467
+ limits:
58468
+ directoryEntries: 3000
58469
+ fileMaxBytes: 104857600
58470
+ fileWarningBytes: 52428800
58471
+ mediaWarningBytes: 524288000
58472
+ siteBytes: 1073741824
58473
+ offers:
58474
+ - UPGRADE
58475
+ planTier: FREE
58476
+ revision: sha1:0000000000000000000000000000000000000000
58477
+ totals:
58478
+ files: 142
58479
+ mediaBytes: 83886080
58480
+ mediaFiles: 12
58481
+ siteBytes: 125829120
58482
+ schema:
58483
+ $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPublicationsByPublicationIdSiteHostingCheckResponse"
58484
+ description: read a site's hosting check succeeded
58485
+ headers:
58486
+ Cache-Control:
58487
+ $ref: "#/components/headers/CacheControlPrivateNoCache"
58488
+ ETag:
58489
+ description: Strong validator of this response body.
58490
+ required: true
58491
+ schema:
58492
+ maxLength: 256
58493
+ type: string
58494
+ X-Correlation-Id:
58495
+ $ref: "#/components/headers/XCorrelationId"
58496
+ "304":
58497
+ description: the caller's `If-None-Match` still matches; no body
58498
+ headers:
58499
+ ETag:
58500
+ description: Strong validator of this response body.
58501
+ required: true
58502
+ schema:
58503
+ maxLength: 256
58504
+ type: string
58505
+ X-Correlation-Id:
58506
+ $ref: "#/components/headers/XCorrelationId"
58507
+ "400":
58508
+ $ref: "#/components/responses/ValidationFailed"
58509
+ "401":
58510
+ content:
58511
+ application/problem+json:
58512
+ examples:
58513
+ AUTHENTICATION_REQUIRED:
58514
+ summary: AUTHENTICATION_REQUIRED
58515
+ value:
58516
+ code: AUTHENTICATION_REQUIRED
58517
+ correlationId: 018f0000-0000-7000-8000-000000000001
58518
+ detail: See the operation contract.
58519
+ errors: []
58520
+ retryable: false
58521
+ schemaId: urn:gala:schema:problem:2.0.0
58522
+ schemaVersion: 2.0.0
58523
+ status: 401
58524
+ title: AUTHENTICATION_REQUIRED
58525
+ type: urn:gala:problem:authentication-required
58526
+ schema:
58527
+ $ref: "#/components/schemas/Problem"
58528
+ description: AUTHENTICATION_REQUIRED
58529
+ headers:
58530
+ Cache-Control:
58531
+ $ref: "#/components/headers/CacheControlNoStore"
58532
+ X-Correlation-Id:
58533
+ $ref: "#/components/headers/XCorrelationId"
58534
+ x-gala-problem-codes:
58535
+ - AUTHENTICATION_REQUIRED
58536
+ "403":
58537
+ $ref: "#/components/responses/AuthorizationDenied"
58538
+ "404":
58539
+ $ref: "#/components/responses/ResourceNotFound"
58540
+ "503":
58541
+ content:
58542
+ application/problem+json:
58543
+ examples:
58544
+ DEPENDENCY_UNAVAILABLE:
58545
+ summary: DEPENDENCY_UNAVAILABLE
58546
+ value:
58547
+ code: DEPENDENCY_UNAVAILABLE
58548
+ correlationId: 018f0000-0000-7000-8000-000000000001
58549
+ detail: See the operation contract.
58550
+ errors: []
58551
+ retryable: true
58552
+ schemaId: urn:gala:schema:problem:2.0.0
58553
+ schemaVersion: 2.0.0
58554
+ status: 503
58555
+ title: DEPENDENCY_UNAVAILABLE
58556
+ type: urn:gala:problem:dependency-unavailable
58557
+ schema:
58558
+ $ref: "#/components/schemas/Problem"
58559
+ description: DEPENDENCY_UNAVAILABLE
58560
+ headers:
58561
+ Cache-Control:
58562
+ $ref: "#/components/headers/CacheControlNoStore"
58563
+ X-Correlation-Id:
58564
+ $ref: "#/components/headers/XCorrelationId"
58565
+ x-gala-problem-codes:
58566
+ - DEPENDENCY_UNAVAILABLE
58567
+ security:
58568
+ - browserSession: []
58569
+ summary: read a site's hosting check
58570
+ tags:
58571
+ - organizations
58572
+ x-gala-activation-gate: MVP
58573
+ x-gala-activation-guards:
58574
+ - NONE
58575
+ x-gala-capability-key: publication.view
58576
+ x-gala-concurrency: authorization-and-publication-epochs
58577
+ x-gala-conditional-capabilities: []
58578
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
58579
+ x-gala-nullability: required-and-nullable-are-explicit
58580
+ x-gala-purpose: read a site's hosting check
58581
+ x-gala-reachable-problems:
58582
+ - AUTHENTICATION_REQUIRED
58583
+ - AUTHORIZATION_DENIED
58584
+ - DEPENDENCY_UNAVAILABLE
58585
+ - RESOURCE_NOT_FOUND
58586
+ - VALIDATION_FAILED
58587
+ x-gala-replay-identity: safe-query
58588
+ x-gala-state-guards:
58589
+ - NONE
58590
+ x-gala-success-category: query
58591
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
56240
58592
  /v2/organizations/{organizationId}/publications/{publicationId}/site:publish-update:
56241
58593
  post:
56242
58594
  description: |
@@ -60400,6 +62752,168 @@ paths:
60400
62752
  - NONE
60401
62753
  x-gala-success-category: update
60402
62754
  x-gala-tenant-scope: NONE
62755
+ /v2/platform/assistance-requests:
62756
+ get:
62757
+ description: |
62758
+ Operators only, with recent authentication. Keyset-paged requests that
62759
+ authors made for help with their sites, newest first. `state` limits the
62760
+ list to `OPEN` or `CLOSED` requests. Each item names the organization and
62761
+ site, the GitHub login that asked and the optional note.
62762
+ operationId: getPlatformAssistanceRequests
62763
+ parameters:
62764
+ - $ref: "#/components/parameters/XCorrelationId"
62765
+ - description: Which requests to list. Absent lists both.
62766
+ example: OPEN
62767
+ in: query
62768
+ name: state
62769
+ required: false
62770
+ schema:
62771
+ enum:
62772
+ - OPEN
62773
+ - CLOSED
62774
+ type: string
62775
+ - $ref: "#/components/parameters/Cursor"
62776
+ - $ref: "#/components/parameters/Limit"
62777
+ responses:
62778
+ "200":
62779
+ content:
62780
+ application/json:
62781
+ examples:
62782
+ nominal:
62783
+ summary: Nominal successful response
62784
+ value:
62785
+ hasMore: false
62786
+ items:
62787
+ - createdAt: "2026-11-02T09:00:00.000Z"
62788
+ findingCodes:
62789
+ - LARGE_FILE
62790
+ kind: GALASCRIBE_HOSTING
62791
+ note: The tour video is 60 MB.
62792
+ organizationId: 018f0000-0000-7000-8000-000000000001
62793
+ organizationName: Maya Studio
62794
+ publicationId: 018f0000-0000-7000-8000-000000000001
62795
+ publicationName: Maya Writes
62796
+ requestId: 018f0000-0000-7000-8000-000000000001
62797
+ requestedByLogin: maya
62798
+ state: OPEN
62799
+ schema:
62800
+ $ref: "#/components/schemas/GetPlatformAssistanceRequestsResponse"
62801
+ description: list assistance requests succeeded
62802
+ headers:
62803
+ Cache-Control:
62804
+ $ref: "#/components/headers/CacheControlNoStore"
62805
+ X-Correlation-Id:
62806
+ $ref: "#/components/headers/XCorrelationId"
62807
+ "400":
62808
+ $ref: "#/components/responses/ValidationFailed"
62809
+ "401":
62810
+ $ref: "#/components/responses/PlatformAuthenticationRequired"
62811
+ "403":
62812
+ $ref: "#/components/responses/AuthorizationDenied"
62813
+ security:
62814
+ - browserSession: []
62815
+ summary: list assistance requests
62816
+ tags:
62817
+ - platform
62818
+ x-gala-activation-gate: MVP
62819
+ x-gala-activation-guards:
62820
+ - NONE
62821
+ x-gala-capability-key: platform.users.view
62822
+ x-gala-concurrency: none
62823
+ x-gala-conditional-capabilities: []
62824
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
62825
+ x-gala-nullability: required-and-nullable-are-explicit
62826
+ x-gala-purpose: list assistance requests
62827
+ x-gala-reachable-problems:
62828
+ - AUTHENTICATION_REQUIRED
62829
+ - AUTHORIZATION_DENIED
62830
+ - REAUTH_REQUIRED
62831
+ - VALIDATION_FAILED
62832
+ x-gala-replay-identity: safe-query
62833
+ x-gala-state-guards:
62834
+ - NONE
62835
+ x-gala-success-category: query
62836
+ x-gala-tenant-scope: NONE
62837
+ /v2/platform/assistance-requests/{requestId}:close:
62838
+ post:
62839
+ description: |
62840
+ Operators only, with recent authentication. Marks the request `CLOSED`
62841
+ once the operator has done the work, and returns it. Closing a request that
62842
+ is already closed returns it unchanged.
62843
+ operationId: postPlatformAssistanceRequestsByRequestIdClose
62844
+ parameters:
62845
+ - $ref: "#/components/parameters/XCorrelationId"
62846
+ - example: 018f0000-0000-7000-8000-000000000001
62847
+ in: path
62848
+ name: requestId
62849
+ required: true
62850
+ schema:
62851
+ format: uuid
62852
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
62853
+ type: string
62854
+ - $ref: "#/components/parameters/XCsrfToken"
62855
+ responses:
62856
+ "200":
62857
+ content:
62858
+ application/json:
62859
+ examples:
62860
+ nominal:
62861
+ summary: Nominal successful response
62862
+ value:
62863
+ closedAt: "2026-11-02T09:00:00.000Z"
62864
+ createdAt: "2026-11-02T09:00:00.000Z"
62865
+ findingCodes:
62866
+ - LARGE_FILE
62867
+ kind: GALASCRIBE_HOSTING
62868
+ note: The tour video is 60 MB.
62869
+ organizationId: 018f0000-0000-7000-8000-000000000001
62870
+ organizationName: Maya Studio
62871
+ publicationId: 018f0000-0000-7000-8000-000000000001
62872
+ publicationName: Maya Writes
62873
+ requestId: 018f0000-0000-7000-8000-000000000001
62874
+ requestedByLogin: maya
62875
+ state: CLOSED
62876
+ schema:
62877
+ $ref: "#/components/schemas/PostPlatformAssistanceRequestsByRequestIdCloseResponse"
62878
+ description: close an assistance request succeeded
62879
+ headers:
62880
+ Cache-Control:
62881
+ $ref: "#/components/headers/CacheControlNoStore"
62882
+ X-Correlation-Id:
62883
+ $ref: "#/components/headers/XCorrelationId"
62884
+ "400":
62885
+ $ref: "#/components/responses/ValidationFailed"
62886
+ "401":
62887
+ $ref: "#/components/responses/PlatformAuthenticationRequired"
62888
+ "403":
62889
+ $ref: "#/components/responses/AuthorizationDenied"
62890
+ "404":
62891
+ $ref: "#/components/responses/ResourceNotFound"
62892
+ security:
62893
+ - browserSession: []
62894
+ summary: close an assistance request
62895
+ tags:
62896
+ - platform
62897
+ x-gala-activation-gate: MVP
62898
+ x-gala-activation-guards:
62899
+ - NONE
62900
+ x-gala-capability-key: platform.users.contact
62901
+ x-gala-concurrency: none
62902
+ x-gala-conditional-capabilities: []
62903
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
62904
+ x-gala-nullability: required-and-nullable-are-explicit
62905
+ x-gala-purpose: close an assistance request
62906
+ x-gala-reachable-problems:
62907
+ - AUTHENTICATION_REQUIRED
62908
+ - AUTHORIZATION_DENIED
62909
+ - REAUTH_REQUIRED
62910
+ - RESOURCE_NOT_FOUND
62911
+ - VALIDATION_FAILED
62912
+ x-gala-replay-identity: natural-idempotent-state
62913
+ x-gala-state-guards:
62914
+ - NONE
62915
+ x-gala-success-category: protocol
62916
+ x-gala-tenant-scope: NONE
60403
62917
  /v2/platform/audit-events:
60404
62918
  get:
60405
62919
  description: |
@@ -61879,7 +64393,9 @@ paths:
61879
64393
  its sites may turn on Listen, the audio version of posts). Defaults of
61880
64394
  the first release: FREE 50 and no contact form, PRO 500 and a contact
61881
64395
  form, BUSINESS 2000 and a contact form. Listen defaults: FREE no, PRO
61882
- and BUSINESS yes.
64396
+ and BUSINESS yes. `collaboratorLimit` (SCHEMA-3.30.0) is the most
64397
+ collaborators an organization on the plan may have, 0 meaning no limit:
64398
+ FREE 1, PRO and BUSINESS no limit.
61883
64399
  operationId: getPlatformPlans
61884
64400
  parameters:
61885
64401
  - $ref: "#/components/parameters/XCorrelationId"
@@ -61893,17 +64409,20 @@ paths:
61893
64409
  value:
61894
64410
  effectiveAt: "2026-10-10T00:00:04.000Z"
61895
64411
  items:
61896
- - contactForm: false
64412
+ - collaboratorLimit: 1
64413
+ contactForm: false
61897
64414
  listen: false
61898
64415
  newsletterSubscriberLimit: 50
61899
64416
  planKey: FREE
61900
64417
  publicationLimit: 1
61901
- - contactForm: true
64418
+ - collaboratorLimit: 0
64419
+ contactForm: true
61902
64420
  listen: true
61903
64421
  newsletterSubscriberLimit: 500
61904
64422
  planKey: PRO
61905
64423
  publicationLimit: 10
61906
- - contactForm: true
64424
+ - collaboratorLimit: 0
64425
+ contactForm: true
61907
64426
  listen: true
61908
64427
  newsletterSubscriberLimit: 2000
61909
64428
  planKey: BUSINESS
@@ -61953,8 +64472,8 @@ paths:
61953
64472
  Operators only, with recent authentication. Atomically replaces the
61954
64473
  complete publication-capacity release, changing the named plan's limits
61955
64474
  while retaining the other two, at the release version in `If-Match`.
61956
- `newsletterSubscriberLimit`, `contactForm` and `listen` are optional:
61957
- absent keeps the plan's current value. The invariant FREE <= PRO <=
64475
+ `newsletterSubscriberLimit`, `contactForm`, `listen` and
64476
+ `collaboratorLimit` are optional: absent keeps the plan's current value. The invariant FREE <= PRO <=
61958
64477
  BUSINESS is enforced on `publicationLimit` only. `reason` is a
61959
64478
  non-sensitive operator reason code recorded in the audit event.
61960
64479
  operationId: putPlatformPlansByPlanKey
@@ -61991,17 +64510,20 @@ paths:
61991
64510
  value:
61992
64511
  effectiveAt: "2026-10-10T12:00:00.000Z"
61993
64512
  items:
61994
- - contactForm: false
64513
+ - collaboratorLimit: 1
64514
+ contactForm: false
61995
64515
  listen: false
61996
64516
  newsletterSubscriberLimit: 50
61997
64517
  planKey: FREE
61998
64518
  publicationLimit: 1
61999
- - contactForm: true
64519
+ - collaboratorLimit: 0
64520
+ contactForm: true
62000
64521
  listen: true
62001
64522
  newsletterSubscriberLimit: 500
62002
64523
  planKey: PRO
62003
64524
  publicationLimit: 12
62004
- - contactForm: true
64525
+ - collaboratorLimit: 0
64526
+ contactForm: true
62005
64527
  listen: true
62006
64528
  newsletterSubscriberLimit: 2000
62007
64529
  planKey: BUSINESS