@rathnasgala2/schemas 3.29.0 → 3.31.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
@@ -9006,8 +9602,14 @@ components:
9006
9602
  PlatformUser:
9007
9603
  additionalProperties: false
9008
9604
  properties:
9605
+ contactEmail:
9606
+ description: SCHEMA-3.31.0, the contact email address the person agreed to share. Returned only when one is on file and the caller holds `platform.users.contact`; null otherwise.
9607
+ maxLength: 320
9608
+ type:
9609
+ - string
9610
+ - "null"
9009
9611
  contactEmailOnFile:
9010
- description: Whether a contact email the person agreed to is on file. The address itself is never returned.
9612
+ description: Whether a contact email the person agreed to is on file. True whenever an agreed address is on file, whether or not the caller may see it.
9011
9613
  type: boolean
9012
9614
  createdAt:
9013
9615
  $ref: "#/components/schemas/PortableProblemRfc3339"
@@ -9052,6 +9654,7 @@ components:
9052
9654
  - publicationCount
9053
9655
  - planTiers
9054
9656
  - contactEmailOnFile
9657
+ - contactEmail
9055
9658
  type: object
9056
9659
  PlatformWebhookEvent:
9057
9660
  additionalProperties: false
@@ -16727,6 +17330,10 @@ components:
16727
17330
  PostOrganizationsByOrganizationIdPublicationTransfersByTransferIdDeclineResponse:
16728
17331
  allOf:
16729
17332
  - $ref: "#/components/schemas/PublicationTransfer"
17333
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdAssistanceRequestsRequest:
17334
+ $ref: "#/components/schemas/AssistanceRequestCreate"
17335
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdAssistanceRequestsResponse:
17336
+ $ref: "#/components/schemas/AssistanceRequest"
16730
17337
  PostOrganizationsByOrganizationIdPublicationsByPublicationIdChangesPublishRequest:
16731
17338
  additionalProperties: false
16732
17339
  properties:
@@ -16961,6 +17568,23 @@ components:
16961
17568
  PostOrganizationsByOrganizationIdPublicationsByPublicationIdDeploymentsRollbackResponse:
16962
17569
  allOf:
16963
17570
  - $ref: "#/components/schemas/OperationResponse"
17571
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsCheckRequest:
17572
+ additionalProperties: false
17573
+ properties:
17574
+ name:
17575
+ description: The domain name to check, for example `mayawrites.com`.
17576
+ maxLength: 253
17577
+ minLength: 1
17578
+ type: string
17579
+ required:
17580
+ - name
17581
+ type: object
17582
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsCheckResponse:
17583
+ $ref: "#/components/schemas/DomainRegistrationCheck"
17584
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsRequest:
17585
+ $ref: "#/components/schemas/DomainRegistrationCreate"
17586
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsResponse:
17587
+ $ref: "#/components/schemas/DomainRegistration"
16964
17588
  PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsByDomainIdCheckResponse:
16965
17589
  allOf:
16966
17590
  - $ref: "#/components/schemas/DomainBinding"
@@ -17015,6 +17639,26 @@ components:
17015
17639
  - authorizationUrl
17016
17640
  - expiresAt
17017
17641
  type: object
17642
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsCheckGalascribeAddressRequest:
17643
+ additionalProperties: false
17644
+ properties:
17645
+ label:
17646
+ $ref: "#/components/schemas/GalascribeAddressLabel"
17647
+ required:
17648
+ - label
17649
+ type: object
17650
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsCheckGalascribeAddressResponse:
17651
+ $ref: "#/components/schemas/GalascribeAddressCheck"
17652
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsClaimGalascribeAddressRequest:
17653
+ additionalProperties: false
17654
+ properties:
17655
+ label:
17656
+ $ref: "#/components/schemas/GalascribeAddressLabel"
17657
+ required:
17658
+ - label
17659
+ type: object
17660
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsClaimGalascribeAddressResponse:
17661
+ $ref: "#/components/schemas/DomainBinding"
17018
17662
  PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsRequest:
17019
17663
  additionalProperties: false
17020
17664
  properties:
@@ -18003,6 +18647,8 @@ components:
18003
18647
  - expiresAt
18004
18648
  - secret
18005
18649
  type: object
18650
+ PostPlatformAssistanceRequestsByRequestIdCloseResponse:
18651
+ $ref: "#/components/schemas/PlatformAssistanceRequest"
18006
18652
  PostPlatformCachesByCacheIdEvictRequest:
18007
18653
  additionalProperties: false
18008
18654
  properties:
@@ -20273,6 +20919,11 @@ components:
20273
20919
  PutPlatformPlansByPlanKeyRequest:
20274
20920
  additionalProperties: false
20275
20921
  properties:
20922
+ collaboratorLimit:
20923
+ description: SCHEMA-3.30.0, optional; absent keeps the plan's current value. 0 means no limit.
20924
+ format: int64
20925
+ minimum: 0
20926
+ type: integer
20276
20927
  contactForm:
20277
20928
  description: SCHEMA-3.23.0, optional; absent keeps the plan's current value.
20278
20929
  type: boolean
@@ -21631,6 +22282,112 @@ components:
21631
22282
  required:
21632
22283
  - code
21633
22284
  type: object
22285
+ SiteHostingCheck:
22286
+ additionalProperties: false
22287
+ 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."
22288
+ properties:
22289
+ checkedAt:
22290
+ $ref: "#/components/schemas/PortableProblemRfc3339"
22291
+ description: When the check ran.
22292
+ findings:
22293
+ items:
22294
+ $ref: "#/components/schemas/HostingFinding"
22295
+ maxItems: 8
22296
+ type: array
22297
+ host:
22298
+ description: "Where the site is hosted today. `GITHUB_PAGES`: GitHub Pages."
22299
+ enum:
22300
+ - GITHUB_PAGES
22301
+ type: string
22302
+ limits:
22303
+ additionalProperties: false
22304
+ description: The thresholds the check used, so a client can show them.
22305
+ properties:
22306
+ directoryEntries:
22307
+ description: The most entries one folder may hold before `DIRECTORY_TOO_LARGE`.
22308
+ format: int64
22309
+ minimum: 0
22310
+ type: integer
22311
+ fileMaxBytes:
22312
+ description: The file size at which `FILE_OVER_SIZE_LIMIT` fires.
22313
+ format: int64
22314
+ minimum: 0
22315
+ type: integer
22316
+ fileWarningBytes:
22317
+ description: The file size at which `LARGE_FILE` fires.
22318
+ format: int64
22319
+ minimum: 0
22320
+ type: integer
22321
+ mediaWarningBytes:
22322
+ description: The media total at which `HEAVY_MEDIA` fires.
22323
+ format: int64
22324
+ minimum: 0
22325
+ type: integer
22326
+ siteBytes:
22327
+ description: The site size at which `SITE_OVER_SIZE_LIMIT` fires.
22328
+ format: int64
22329
+ minimum: 0
22330
+ type: integer
22331
+ required:
22332
+ - siteBytes
22333
+ - fileWarningBytes
22334
+ - fileMaxBytes
22335
+ - directoryEntries
22336
+ - mediaWarningBytes
22337
+ type: object
22338
+ offers:
22339
+ description: What the person can do about the findings. Empty when there is no finding.
22340
+ items:
22341
+ $ref: "#/components/schemas/HostingOffer"
22342
+ maxItems: 2
22343
+ type: array
22344
+ uniqueItems: true
22345
+ planTier:
22346
+ $ref: "#/components/schemas/PlatformPlanKey"
22347
+ description: The organization's plan tier when the check ran.
22348
+ revision:
22349
+ description: The commit of the default branch that was checked.
22350
+ pattern: ^(?:sha1:[0-9a-f]{40}|sha256:[0-9a-f]{64})$
22351
+ type: string
22352
+ totals:
22353
+ additionalProperties: false
22354
+ properties:
22355
+ files:
22356
+ description: Files in the repository.
22357
+ format: int64
22358
+ minimum: 0
22359
+ type: integer
22360
+ mediaBytes:
22361
+ description: Bytes of images, audio, video and PDFs.
22362
+ format: int64
22363
+ minimum: 0
22364
+ type: integer
22365
+ mediaFiles:
22366
+ description: Number of images, audio, video and PDF files.
22367
+ format: int64
22368
+ minimum: 0
22369
+ type: integer
22370
+ siteBytes:
22371
+ description: Bytes of all files.
22372
+ format: int64
22373
+ minimum: 0
22374
+ type: integer
22375
+ required:
22376
+ - siteBytes
22377
+ - mediaBytes
22378
+ - mediaFiles
22379
+ - files
22380
+ type: object
22381
+ required:
22382
+ - checkedAt
22383
+ - revision
22384
+ - host
22385
+ - planTier
22386
+ - totals
22387
+ - limits
22388
+ - findings
22389
+ - offers
22390
+ type: object
21634
22391
  SiteLastPublished:
21635
22392
  additionalProperties: false
21636
22393
  properties:
@@ -25559,7 +26316,10 @@ paths:
25559
26316
  for the inviter's benefit and is never compared with the accepting
25560
26317
  principal's verified identity (LOCAL-34 G6). The token is single-use and
25561
26318
  non-enumerating; recipient binding is revisited when verified email
25562
- exists.
26319
+ exists. The organization's plan limits its collaborators (SCHEMA-3.30.0):
26320
+ when accepting would take it past the limit, because the plan changed
26321
+ since the invitation was sent, the answer is `409 PLAN_REQUIRED` and the
26322
+ invitation stays `PENDING`.
25563
26323
  operationId: postMembershipInvitationsByTokenAccept
25564
26324
  parameters:
25565
26325
  - $ref: "#/components/parameters/XCorrelationId"
@@ -25688,9 +26448,22 @@ paths:
25688
26448
  status: 409
25689
26449
  title: INVALID_SOURCE_STATE
25690
26450
  type: urn:gala:problem:invalid-source-state
26451
+ PLAN_REQUIRED:
26452
+ summary: PLAN_REQUIRED
26453
+ value:
26454
+ code: PLAN_REQUIRED
26455
+ correlationId: 018f0000-0000-7000-8000-000000000001
26456
+ detail: The organization's plan allows no more collaborators. See the operation contract.
26457
+ errors: []
26458
+ retryable: false
26459
+ schemaId: urn:gala:schema:problem:2.0.0
26460
+ schemaVersion: 2.0.0
26461
+ status: 409
26462
+ title: PLAN_REQUIRED
26463
+ type: urn:gala:problem:plan-required
25691
26464
  schema:
25692
26465
  $ref: "#/components/schemas/Problem"
25693
- description: INVALID_SOURCE_STATE
26466
+ description: INVALID_SOURCE_STATE, PLAN_REQUIRED
25694
26467
  headers:
25695
26468
  Cache-Control:
25696
26469
  $ref: "#/components/headers/CacheControlNoStore"
@@ -25698,6 +26471,7 @@ paths:
25698
26471
  $ref: "#/components/headers/XCorrelationId"
25699
26472
  x-gala-problem-codes:
25700
26473
  - INVALID_SOURCE_STATE
26474
+ - PLAN_REQUIRED
25701
26475
  "422":
25702
26476
  content:
25703
26477
  application/problem+json:
@@ -25743,6 +26517,7 @@ paths:
25743
26517
  x-gala-reachable-problems:
25744
26518
  - AUTHENTICATION_REQUIRED
25745
26519
  - INVALID_SOURCE_STATE
26520
+ - PLAN_REQUIRED
25746
26521
  - REQUEST_FIELD_UNKNOWN
25747
26522
  - VALIDATION_FAILED
25748
26523
  x-gala-replay-identity: invitation-capability
@@ -26886,6 +27661,13 @@ paths:
26886
27661
  the invitation, never a verified identity and never an authorization
26887
27662
  input. Hand the link only to the person it is meant for, and revoke and
26888
27663
  re-invite if it goes astray (LOCAL-34 G6).
27664
+
27665
+ Every organization may invite, on any plan (SCHEMA-3.30.0). A personal
27666
+ organization becomes collaborative with its first invitation. The plan
27667
+ limits how many collaborators the organization may have: active members
27668
+ other than owners plus invitations still `PENDING` (`GET
27669
+ .../plan` shows the count). An invitation past the limit is `409
27670
+ PLAN_REQUIRED`, and the detail names the limit.
26889
27671
  operationId: postOrganizationsByOrganizationIdMembershipInvitations
26890
27672
  parameters:
26891
27673
  - $ref: "#/components/parameters/XCorrelationId"
@@ -27101,9 +27883,22 @@ paths:
27101
27883
  status: 409
27102
27884
  title: INVALID_SOURCE_STATE
27103
27885
  type: urn:gala:problem:invalid-source-state
27886
+ PLAN_REQUIRED:
27887
+ summary: PLAN_REQUIRED
27888
+ value:
27889
+ code: PLAN_REQUIRED
27890
+ correlationId: 018f0000-0000-7000-8000-000000000001
27891
+ detail: The organization's plan allows no more collaborators. See the operation contract.
27892
+ errors: []
27893
+ retryable: false
27894
+ schemaId: urn:gala:schema:problem:2.0.0
27895
+ schemaVersion: 2.0.0
27896
+ status: 409
27897
+ title: PLAN_REQUIRED
27898
+ type: urn:gala:problem:plan-required
27104
27899
  schema:
27105
27900
  $ref: "#/components/schemas/Problem"
27106
- description: COMMAND_REPLAY_CONFLICT, INVALID_SOURCE_STATE
27901
+ description: COMMAND_REPLAY_CONFLICT, INVALID_SOURCE_STATE, PLAN_REQUIRED
27107
27902
  headers:
27108
27903
  Cache-Control:
27109
27904
  $ref: "#/components/headers/CacheControlNoStore"
@@ -27112,6 +27907,7 @@ paths:
27112
27907
  x-gala-problem-codes:
27113
27908
  - COMMAND_REPLAY_CONFLICT
27114
27909
  - INVALID_SOURCE_STATE
27910
+ - PLAN_REQUIRED
27115
27911
  "422":
27116
27912
  content:
27117
27913
  application/problem+json:
@@ -27158,6 +27954,7 @@ paths:
27158
27954
  - AUTHORIZATION_DENIED
27159
27955
  - COMMAND_REPLAY_CONFLICT
27160
27956
  - INVALID_SOURCE_STATE
27957
+ - PLAN_REQUIRED
27161
27958
  - REAUTH_REQUIRED
27162
27959
  - REQUEST_FIELD_UNKNOWN
27163
27960
  - RESOURCE_NOT_FOUND
@@ -31091,11 +31888,19 @@ paths:
31091
31888
  - NONE
31092
31889
  x-gala-success-category: protocol
31093
31890
  x-gala-tenant-scope: ORGANIZATION_PATH
31094
- /v2/organizations/{organizationId}/publication-imports:
31891
+ /v2/organizations/{organizationId}/plan:
31095
31892
  get:
31096
31893
  description: |
31097
- The organization's repository imports, newest first.
31098
- operationId: getOrganizationsByOrganizationIdPublicationImports
31894
+ Needs `organization.view`, so any member of the organization may read it.
31895
+ The organization's plan tier, how many collaborators it may have and how
31896
+ many it has, and what the plan includes: a `name.galascribe.com`
31897
+ address, one included domain and Galascribe hosting. `collaborators.limit`
31898
+ is null when the plan has no limit; `collaborators.used` counts the active
31899
+ members other than owners plus the invitations still `PENDING`.
31900
+ `galascribeAddressZone` is the zone Galascribe addresses are created in and
31901
+ is absent when Galascribe addresses are not configured, so a client hides
31902
+ the option.
31903
+ operationId: getOrganizationsByOrganizationIdPlan
31099
31904
  parameters:
31100
31905
  - $ref: "#/components/parameters/XCorrelationId"
31101
31906
  - example: 018f0000-0000-7000-8000-000000000001
@@ -31106,8 +31911,6 @@ paths:
31106
31911
  format: uuid
31107
31912
  pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
31108
31913
  type: string
31109
- - $ref: "#/components/parameters/Cursor"
31110
- - $ref: "#/components/parameters/Limit"
31111
31914
  responses:
31112
31915
  "200":
31113
31916
  content:
@@ -31116,60 +31919,159 @@ paths:
31116
31919
  nominal:
31117
31920
  summary: Nominal successful response
31118
31921
  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
31922
+ collaborators:
31923
+ limit: null
31924
+ used: 2
31925
+ entitlements:
31926
+ galascribeAddress: true
31927
+ galascribeHosting: true
31928
+ includedDomain: false
31929
+ galascribeAddressZone: galascribe.com
31930
+ tier: PRO
31138
31931
  schema:
31139
- $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPublicationImportsResponse"
31140
- description: list repository imports succeeded
31932
+ $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPlanResponse"
31933
+ description: read an organization's plan succeeded
31141
31934
  headers:
31142
31935
  Cache-Control:
31143
31936
  $ref: "#/components/headers/CacheControlNoStore"
31144
31937
  X-Correlation-Id:
31145
31938
  $ref: "#/components/headers/XCorrelationId"
31146
31939
  "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
31940
+ $ref: "#/components/responses/ValidationFailed"
31941
+ "401":
31942
+ content:
31943
+ application/problem+json:
31944
+ examples:
31945
+ AUTHENTICATION_REQUIRED:
31946
+ summary: AUTHENTICATION_REQUIRED
31947
+ value:
31948
+ code: AUTHENTICATION_REQUIRED
31949
+ correlationId: 018f0000-0000-7000-8000-000000000001
31950
+ detail: See the operation contract.
31951
+ errors: []
31952
+ retryable: false
31953
+ schemaId: urn:gala:schema:problem:2.0.0
31954
+ schemaVersion: 2.0.0
31955
+ status: 401
31956
+ title: AUTHENTICATION_REQUIRED
31957
+ type: urn:gala:problem:authentication-required
31958
+ schema:
31959
+ $ref: "#/components/schemas/Problem"
31960
+ description: AUTHENTICATION_REQUIRED
31961
+ headers:
31962
+ Cache-Control:
31963
+ $ref: "#/components/headers/CacheControlNoStore"
31964
+ X-Correlation-Id:
31965
+ $ref: "#/components/headers/XCorrelationId"
31966
+ x-gala-problem-codes:
31967
+ - AUTHENTICATION_REQUIRED
31968
+ "403":
31969
+ $ref: "#/components/responses/AuthorizationDenied"
31970
+ "404":
31971
+ $ref: "#/components/responses/ResourceNotFound"
31972
+ security:
31973
+ - browserSession: []
31974
+ summary: read an organization's plan
31975
+ tags:
31976
+ - organizations
31977
+ x-gala-activation-gate: MVP
31978
+ x-gala-activation-guards:
31979
+ - NONE
31980
+ x-gala-capability-key: organization.view
31981
+ x-gala-concurrency: authorization-epoch
31982
+ x-gala-conditional-capabilities: []
31983
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
31984
+ x-gala-nullability: required-and-nullable-are-explicit
31985
+ x-gala-purpose: read an organization's plan
31986
+ x-gala-reachable-problems:
31987
+ - AUTHENTICATION_REQUIRED
31988
+ - AUTHORIZATION_DENIED
31989
+ - RESOURCE_NOT_FOUND
31990
+ - VALIDATION_FAILED
31991
+ x-gala-replay-identity: safe-query
31992
+ x-gala-state-guards:
31993
+ - NONE
31994
+ x-gala-success-category: query
31995
+ x-gala-tenant-scope: ORGANIZATION_PATH
31996
+ /v2/organizations/{organizationId}/publication-imports:
31997
+ get:
31998
+ description: |
31999
+ The organization's repository imports, newest first.
32000
+ operationId: getOrganizationsByOrganizationIdPublicationImports
32001
+ parameters:
32002
+ - $ref: "#/components/parameters/XCorrelationId"
32003
+ - example: 018f0000-0000-7000-8000-000000000001
32004
+ in: path
32005
+ name: organizationId
32006
+ required: true
32007
+ schema:
32008
+ format: uuid
32009
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
32010
+ type: string
32011
+ - $ref: "#/components/parameters/Cursor"
32012
+ - $ref: "#/components/parameters/Limit"
32013
+ responses:
32014
+ "200":
32015
+ content:
32016
+ application/json:
32017
+ examples:
32018
+ nominal:
32019
+ summary: Nominal successful response
32020
+ value:
32021
+ hasMore: false
32022
+ items:
32023
+ - findings:
32024
+ - code: V1_SYNTAX_UNSUPPORTED
32025
+ detail: A gallery block is kept as text.
32026
+ path: content/posts/trip/index.en.md
32027
+ severity: WARNING
32028
+ importId: 018f0000-0000-7000-8000-000000000001
32029
+ layout: GALA_V1
32030
+ operationId: 018f0000-0000-7000-8000-000000000002
32031
+ repository:
32032
+ defaultBranch: main
32033
+ fullName: rathnastest/g11
32034
+ private: false
32035
+ state: READY
32036
+ suggested:
32037
+ name: Priya's notes
32038
+ slug: priyas-notes
32039
+ version: 2
32040
+ schema:
32041
+ $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPublicationImportsResponse"
32042
+ description: list repository imports succeeded
32043
+ headers:
32044
+ Cache-Control:
32045
+ $ref: "#/components/headers/CacheControlNoStore"
32046
+ X-Correlation-Id:
32047
+ $ref: "#/components/headers/XCorrelationId"
32048
+ "400":
32049
+ content:
32050
+ application/problem+json:
32051
+ examples:
32052
+ VALIDATION_FAILED:
32053
+ summary: VALIDATION_FAILED
32054
+ value:
32055
+ code: VALIDATION_FAILED
32056
+ correlationId: 018f0000-0000-7000-8000-000000000001
32057
+ detail: See the operation contract.
32058
+ errors: []
32059
+ retryable: false
32060
+ schemaId: urn:gala:schema:problem:2.0.0
32061
+ schemaVersion: 2.0.0
32062
+ status: 400
32063
+ title: VALIDATION_FAILED
32064
+ type: urn:gala:problem:validation-failed
32065
+ schema:
32066
+ $ref: "#/components/schemas/Problem"
32067
+ description: VALIDATION_FAILED
32068
+ headers:
32069
+ Cache-Control:
32070
+ $ref: "#/components/headers/CacheControlNoStore"
32071
+ X-Correlation-Id:
32072
+ $ref: "#/components/headers/XCorrelationId"
32073
+ x-gala-problem-codes:
32074
+ - VALIDATION_FAILED
31173
32075
  "401":
31174
32076
  content:
31175
32077
  application/problem+json:
@@ -35759,45 +36661,341 @@ paths:
35759
36661
  - NONE
35760
36662
  x-gala-success-category: query
35761
36663
  x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
35762
- /v2/organizations/{organizationId}/publications/{publicationId}/changes:publish:
36664
+ /v2/organizations/{organizationId}/publications/{publicationId}/assistance-requests:
36665
+ get:
36666
+ description: |
36667
+ Needs `publication.view`. The requests this site has made to the Galascribe
36668
+ team (`AssistanceRequest`), newest first, open and closed. At most 100.
36669
+ operationId: getOrganizationsByOrganizationIdPublicationsByPublicationIdAssistanceRequests
36670
+ parameters:
36671
+ - $ref: "#/components/parameters/XCorrelationId"
36672
+ - example: 018f0000-0000-7000-8000-000000000001
36673
+ in: path
36674
+ name: organizationId
36675
+ required: true
36676
+ schema:
36677
+ format: uuid
36678
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
36679
+ type: string
36680
+ - example: 018f0000-0000-7000-8000-000000000001
36681
+ in: path
36682
+ name: publicationId
36683
+ required: true
36684
+ schema:
36685
+ format: uuid
36686
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
36687
+ type: string
36688
+ responses:
36689
+ "200":
36690
+ content:
36691
+ application/json:
36692
+ examples:
36693
+ nominal:
36694
+ summary: Nominal successful response
36695
+ value:
36696
+ items:
36697
+ - createdAt: "2026-11-02T09:00:00.000Z"
36698
+ findingCodes:
36699
+ - LARGE_FILE
36700
+ kind: GALASCRIBE_HOSTING
36701
+ requestId: 018f0000-0000-7000-8000-000000000001
36702
+ state: OPEN
36703
+ schema:
36704
+ $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPublicationsByPublicationIdAssistanceRequestsResponse"
36705
+ description: list a site's requests for help succeeded
36706
+ headers:
36707
+ Cache-Control:
36708
+ $ref: "#/components/headers/CacheControlNoStore"
36709
+ X-Correlation-Id:
36710
+ $ref: "#/components/headers/XCorrelationId"
36711
+ "400":
36712
+ $ref: "#/components/responses/ValidationFailed"
36713
+ "401":
36714
+ content:
36715
+ application/problem+json:
36716
+ examples:
36717
+ AUTHENTICATION_REQUIRED:
36718
+ summary: AUTHENTICATION_REQUIRED
36719
+ value:
36720
+ code: AUTHENTICATION_REQUIRED
36721
+ correlationId: 018f0000-0000-7000-8000-000000000001
36722
+ detail: See the operation contract.
36723
+ errors: []
36724
+ retryable: false
36725
+ schemaId: urn:gala:schema:problem:2.0.0
36726
+ schemaVersion: 2.0.0
36727
+ status: 401
36728
+ title: AUTHENTICATION_REQUIRED
36729
+ type: urn:gala:problem:authentication-required
36730
+ schema:
36731
+ $ref: "#/components/schemas/Problem"
36732
+ description: AUTHENTICATION_REQUIRED
36733
+ headers:
36734
+ Cache-Control:
36735
+ $ref: "#/components/headers/CacheControlNoStore"
36736
+ X-Correlation-Id:
36737
+ $ref: "#/components/headers/XCorrelationId"
36738
+ x-gala-problem-codes:
36739
+ - AUTHENTICATION_REQUIRED
36740
+ "403":
36741
+ $ref: "#/components/responses/AuthorizationDenied"
36742
+ "404":
36743
+ $ref: "#/components/responses/ResourceNotFound"
36744
+ security:
36745
+ - browserSession: []
36746
+ summary: list a site's requests for help
36747
+ tags:
36748
+ - organizations
36749
+ x-gala-activation-gate: MVP
36750
+ x-gala-activation-guards:
36751
+ - NONE
36752
+ x-gala-capability-key: publication.view
36753
+ x-gala-concurrency: authorization-and-publication-epochs
36754
+ x-gala-conditional-capabilities: []
36755
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
36756
+ x-gala-nullability: required-and-nullable-are-explicit
36757
+ x-gala-purpose: list a site's requests for help
36758
+ x-gala-reachable-problems:
36759
+ - AUTHENTICATION_REQUIRED
36760
+ - AUTHORIZATION_DENIED
36761
+ - RESOURCE_NOT_FOUND
36762
+ - VALIDATION_FAILED
36763
+ x-gala-replay-identity: safe-query
36764
+ x-gala-state-guards:
36765
+ - NONE
36766
+ x-gala-success-category: query
36767
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
35763
36768
  post:
35764
36769
  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
36770
+ Needs `publication.settings.manage`. Paid plans only: `409 PLAN_REQUIRED`
36771
+ on the Free plan. Asks the Galascribe team to do something by hand for the
36772
+ site: `GALASCRIBE_HOSTING` (host what GitHub does not allow, with the
36773
+ `findingCodes` of the hosting check), `DOMAIN_REGISTRATION` (register the
36774
+ included domain `domainName` for the author) or `DOMAIN_MOVE` (move the
36775
+ domain `domainName` to the author's own account). The request is `OPEN`
36776
+ until an operator closes it. When a request of the same `kind` is already
36777
+ `OPEN` for the site, that request is returned with `200` and nothing new
36778
+ is created.
36779
+ operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdAssistanceRequests
36780
+ parameters:
36781
+ - $ref: "#/components/parameters/XCorrelationId"
36782
+ - example: 018f0000-0000-7000-8000-000000000001
36783
+ in: path
36784
+ name: organizationId
36785
+ required: true
36786
+ schema:
36787
+ format: uuid
36788
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
36789
+ type: string
36790
+ - example: 018f0000-0000-7000-8000-000000000001
36791
+ in: path
36792
+ name: publicationId
36793
+ required: true
36794
+ schema:
36795
+ format: uuid
36796
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
36797
+ type: string
36798
+ - $ref: "#/components/parameters/IdempotencyKey"
36799
+ - $ref: "#/components/parameters/XCsrfToken"
36800
+ requestBody:
36801
+ content:
36802
+ application/json:
36803
+ examples:
36804
+ nominal:
36805
+ summary: Nominal valid request
36806
+ value:
36807
+ findingCodes:
36808
+ - LARGE_FILE
36809
+ kind: GALASCRIBE_HOSTING
36810
+ note: The tour video is 60 MB.
36811
+ schema:
36812
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdAssistanceRequestsRequest"
36813
+ required: true
36814
+ responses:
36815
+ "200":
36816
+ content:
36817
+ application/json:
36818
+ examples:
36819
+ nominal:
36820
+ summary: The request of this kind that is already open
36821
+ value:
36822
+ createdAt: "2026-11-02T09:00:00.000Z"
36823
+ findingCodes:
36824
+ - LARGE_FILE
36825
+ kind: GALASCRIBE_HOSTING
36826
+ requestId: 018f0000-0000-7000-8000-000000000001
36827
+ state: OPEN
36828
+ schema:
36829
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdAssistanceRequestsResponse"
36830
+ description: a request of the same kind is already open for the site
36831
+ headers:
36832
+ Cache-Control:
36833
+ $ref: "#/components/headers/CacheControlNoStore"
36834
+ X-Correlation-Id:
36835
+ $ref: "#/components/headers/XCorrelationId"
36836
+ "201":
36837
+ content:
36838
+ application/json:
36839
+ examples:
36840
+ nominal:
36841
+ summary: Nominal successful response
36842
+ value:
36843
+ createdAt: "2026-11-02T09:00:00.000Z"
36844
+ findingCodes:
36845
+ - LARGE_FILE
36846
+ kind: GALASCRIBE_HOSTING
36847
+ requestId: 018f0000-0000-7000-8000-000000000001
36848
+ state: OPEN
36849
+ schema:
36850
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdAssistanceRequestsResponse"
36851
+ description: ask Galascribe for help with a site succeeded
36852
+ headers:
36853
+ Cache-Control:
36854
+ $ref: "#/components/headers/CacheControlNoStore"
36855
+ Location:
36856
+ $ref: "#/components/headers/Location"
36857
+ X-Correlation-Id:
36858
+ $ref: "#/components/headers/XCorrelationId"
36859
+ "400":
36860
+ $ref: "#/components/responses/RequestInvalid"
36861
+ "401":
36862
+ content:
36863
+ application/problem+json:
36864
+ examples:
36865
+ AUTHENTICATION_REQUIRED:
36866
+ summary: AUTHENTICATION_REQUIRED
36867
+ value:
36868
+ code: AUTHENTICATION_REQUIRED
36869
+ correlationId: 018f0000-0000-7000-8000-000000000001
36870
+ detail: See the operation contract.
36871
+ errors: []
36872
+ retryable: false
36873
+ schemaId: urn:gala:schema:problem:2.0.0
36874
+ schemaVersion: 2.0.0
36875
+ status: 401
36876
+ title: AUTHENTICATION_REQUIRED
36877
+ type: urn:gala:problem:authentication-required
36878
+ schema:
36879
+ $ref: "#/components/schemas/Problem"
36880
+ description: AUTHENTICATION_REQUIRED
36881
+ headers:
36882
+ Cache-Control:
36883
+ $ref: "#/components/headers/CacheControlNoStore"
36884
+ X-Correlation-Id:
36885
+ $ref: "#/components/headers/XCorrelationId"
36886
+ x-gala-problem-codes:
36887
+ - AUTHENTICATION_REQUIRED
36888
+ "403":
36889
+ $ref: "#/components/responses/AuthorizationDenied"
36890
+ "404":
36891
+ $ref: "#/components/responses/ResourceNotFound"
36892
+ "409":
36893
+ content:
36894
+ application/problem+json:
36895
+ examples:
36896
+ COMMAND_REPLAY_CONFLICT:
36897
+ summary: COMMAND_REPLAY_CONFLICT
36898
+ value:
36899
+ code: COMMAND_REPLAY_CONFLICT
36900
+ correlationId: 018f0000-0000-7000-8000-000000000001
36901
+ detail: See the operation contract.
36902
+ errors: []
36903
+ retryable: false
36904
+ schemaId: urn:gala:schema:problem:2.0.0
36905
+ schemaVersion: 2.0.0
36906
+ status: 409
36907
+ title: COMMAND_REPLAY_CONFLICT
36908
+ type: urn:gala:problem:command-replay-conflict
36909
+ PLAN_REQUIRED:
36910
+ summary: PLAN_REQUIRED
36911
+ value:
36912
+ code: PLAN_REQUIRED
36913
+ correlationId: 018f0000-0000-7000-8000-000000000001
36914
+ detail: The organization's plan does not include asking Galascribe for help. See the operation contract.
36915
+ errors: []
36916
+ retryable: false
36917
+ schemaId: urn:gala:schema:problem:2.0.0
36918
+ schemaVersion: 2.0.0
36919
+ status: 409
36920
+ title: PLAN_REQUIRED
36921
+ type: urn:gala:problem:plan-required
36922
+ schema:
36923
+ $ref: "#/components/schemas/Problem"
36924
+ description: COMMAND_REPLAY_CONFLICT, PLAN_REQUIRED
36925
+ headers:
36926
+ Cache-Control:
36927
+ $ref: "#/components/headers/CacheControlNoStore"
36928
+ X-Correlation-Id:
36929
+ $ref: "#/components/headers/XCorrelationId"
36930
+ x-gala-problem-codes:
36931
+ - COMMAND_REPLAY_CONFLICT
36932
+ - PLAN_REQUIRED
36933
+ security:
36934
+ - browserSession: []
36935
+ summary: ask Galascribe for help with a site
36936
+ tags:
36937
+ - organizations
36938
+ x-gala-activation-gate: MVP
36939
+ x-gala-activation-guards:
36940
+ - NONE
36941
+ x-gala-capability-key: publication.settings.manage
36942
+ x-gala-concurrency: none
36943
+ x-gala-conditional-capabilities: []
36944
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
36945
+ x-gala-nullability: required-and-nullable-are-explicit
36946
+ x-gala-purpose: ask Galascribe for help with a site
36947
+ x-gala-reachable-problems:
36948
+ - AUTHENTICATION_REQUIRED
36949
+ - AUTHORIZATION_DENIED
36950
+ - COMMAND_REPLAY_CONFLICT
36951
+ - PLAN_REQUIRED
36952
+ - REQUEST_FIELD_UNKNOWN
36953
+ - RESOURCE_NOT_FOUND
36954
+ - VALIDATION_FAILED
36955
+ x-gala-replay-identity: idempotency-key
36956
+ x-gala-state-guards:
36957
+ - NONE
36958
+ x-gala-success-category: create
36959
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
36960
+ /v2/organizations/{organizationId}/publications/{publicationId}/changes:publish:
36961
+ post:
36962
+ description: |
36963
+ Publishes the named repository changes together. For each change, in order:
36964
+
36965
+ 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`.
36966
+ 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>`.
36967
+ 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>`.
36968
+
36969
+ 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.
36970
+
36971
+ SCHEMA-3.3.0 scheduling: with `scheduledFor` the request is validated
36972
+ exactly as an immediate publish (changes publishable, review state,
36973
+ repository set up, binding active, no publish in flight) and nothing is
36974
+ merged now; the named changes are merged and deployed at `scheduledFor`,
36975
+ after the same checks run again. `scheduledFor` must be at least 5
36976
+ minutes and at most 366 days ahead, else `422 VALIDATION_FAILED` pointed
36977
+ at `/scheduledFor`. One schedule per publication: `409 SCHEDULE_EXISTS`
36978
+ while another is pending (its `publishId` is in the problem `detail` and
36979
+ in the site read's `schedule`). `409 CANONICAL_BASE_MISMATCH` when the
36980
+ merged head's `gala/publication.json` `canonicalBase` is not the address
36981
+ the site is served at (the active custom domain, else the github.io
36982
+ address); the problem `detail` names the expected value.
36983
+
36984
+ SCHEMA-3.17.0: that problem also carries the optional members
36985
+ `expectedBase` (the address the site is served at, an https URL),
36986
+ `profileBase` (the base the profile carries now, as written),
36987
+ `domainState` (the custom domain's state that decided the expected
36988
+ base, absent without a domain) and `remedy` (one sentence for the
36989
+ author), so a client names both addresses and renders the `remedy`
36990
+ without parsing `detail`. The server first includes the pending "Site
36991
+ address" change in the publish, or proposes one inside the request, and
36992
+ returns the problem only when it cannot. `409 INVALID_SOURCE_STATE`
36993
+ with `errors[].code DOMAIN_NOT_READY` is returned while
36994
+ a custom domain is part-way through its switch and no address can be
36995
+ verified (after the Pages CNAME is set and before the certificate
36996
+ serves); it resolves on its own, and the domain read's `nextStep` says
36997
+ what is being waited on.
36998
+ operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdChangesPublish
35801
36999
  parameters:
35802
37000
  - $ref: "#/components/parameters/XCorrelationId"
35803
37001
  - example: 018f0000-0000-7000-8000-000000000001
@@ -40753,12 +41951,12 @@ paths:
40753
41951
  - PublicationDestination:UNSET|SET
40754
41952
  x-gala-success-category: update
40755
41953
  x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
40756
- /v2/organizations/{organizationId}/publications/{publicationId}/domains:
41954
+ /v2/organizations/{organizationId}/publications/{publicationId}/domain-registrations:
40757
41955
  get:
40758
41956
  description: |
40759
- The publication's custom domain bindings, current first (at most one is
40760
- not `DETACHED` or `EXPIRED`).
40761
- operationId: getOrganizationsByOrganizationIdPublicationsByPublicationIdDomains
41957
+ Needs `publication.view`. The registrations made for this site, newest
41958
+ first (`DomainRegistration`). At most 20.
41959
+ operationId: getOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrations
40762
41960
  parameters:
40763
41961
  - $ref: "#/components/parameters/XCorrelationId"
40764
41962
  - example: 018f0000-0000-7000-8000-000000000001
@@ -40786,71 +41984,656 @@ paths:
40786
41984
  summary: Nominal successful response
40787
41985
  value:
40788
41986
  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
41987
+ - createdAt: "2026-11-02T09:00:00.000Z"
41988
+ domainName: mayawrites.com
41989
+ registrationId: 018f0000-0000-7000-8000-000000000001
41990
+ state: REGISTERING
41991
+ updatedAt: "2026-11-02T09:00:00.000Z"
40819
41992
  schema:
40820
- $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsResponse"
40821
- description: list the custom domains of a publication succeeded
41993
+ $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsResponse"
41994
+ description: list the domain registrations of a site succeeded
40822
41995
  headers:
40823
41996
  Cache-Control:
40824
41997
  $ref: "#/components/headers/CacheControlNoStore"
40825
41998
  X-Correlation-Id:
40826
41999
  $ref: "#/components/headers/XCorrelationId"
40827
42000
  "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
42001
+ $ref: "#/components/responses/ValidationFailed"
42002
+ "401":
42003
+ content:
42004
+ application/problem+json:
42005
+ examples:
42006
+ AUTHENTICATION_REQUIRED:
42007
+ summary: AUTHENTICATION_REQUIRED
42008
+ value:
42009
+ code: AUTHENTICATION_REQUIRED
42010
+ correlationId: 018f0000-0000-7000-8000-000000000001
42011
+ detail: See the operation contract.
42012
+ errors: []
42013
+ retryable: false
42014
+ schemaId: urn:gala:schema:problem:2.0.0
42015
+ schemaVersion: 2.0.0
42016
+ status: 401
42017
+ title: AUTHENTICATION_REQUIRED
42018
+ type: urn:gala:problem:authentication-required
42019
+ schema:
42020
+ $ref: "#/components/schemas/Problem"
42021
+ description: AUTHENTICATION_REQUIRED
42022
+ headers:
42023
+ Cache-Control:
42024
+ $ref: "#/components/headers/CacheControlNoStore"
42025
+ X-Correlation-Id:
42026
+ $ref: "#/components/headers/XCorrelationId"
42027
+ x-gala-problem-codes:
42028
+ - AUTHENTICATION_REQUIRED
42029
+ "403":
42030
+ $ref: "#/components/responses/AuthorizationDenied"
42031
+ "404":
42032
+ $ref: "#/components/responses/ResourceNotFound"
42033
+ security:
42034
+ - browserSession: []
42035
+ summary: list the domain registrations of a site
42036
+ tags:
42037
+ - domains
42038
+ x-gala-activation-gate: MVP
42039
+ x-gala-activation-guards:
42040
+ - NONE
42041
+ x-gala-capability-key: publication.view
42042
+ x-gala-concurrency: publication-and-destination-epochs
42043
+ x-gala-conditional-capabilities: []
42044
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
42045
+ x-gala-nullability: required-and-nullable-are-explicit
42046
+ x-gala-purpose: list the domain registrations of a site
42047
+ x-gala-reachable-problems:
42048
+ - AUTHENTICATION_REQUIRED
42049
+ - AUTHORIZATION_DENIED
42050
+ - RESOURCE_NOT_FOUND
42051
+ - VALIDATION_FAILED
42052
+ x-gala-replay-identity: safe-query
42053
+ x-gala-state-guards:
42054
+ - NONE
42055
+ x-gala-success-category: query
42056
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
42057
+ post:
42058
+ description: |
42059
+ Needs `publication.settings.manage`. Registers `domainName` for the
42060
+ organization as its one included domain and attaches it to this site.
42061
+ Galascribe re-checks the name, registers it with `registrant` as the
42062
+ domain's owner, then writes the DNS records and attaches the domain, so the
42063
+ person adds no records. The answer is `202` with a `DomainRegistration`
42064
+ that moves through its `state` while the work runs; read it again to follow
42065
+ it. `registrant` is sent to the registrar and is never stored, logged or
42066
+ returned. `409 PLAN_REQUIRED` when the plan has no included domain;
42067
+ `409 INVALID_SOURCE_STATE` when the organization already used its included
42068
+ domain; `422 VALIDATION_FAILED` for a name or registrant field that is not
42069
+ valid; `503 CAPABILITY_UNAVAILABLE` when registration is not set up.
42070
+ operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrations
42071
+ parameters:
42072
+ - $ref: "#/components/parameters/XCorrelationId"
42073
+ - example: 018f0000-0000-7000-8000-000000000001
42074
+ in: path
42075
+ name: organizationId
42076
+ required: true
42077
+ schema:
42078
+ format: uuid
42079
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
42080
+ type: string
42081
+ - example: 018f0000-0000-7000-8000-000000000001
42082
+ in: path
42083
+ name: publicationId
42084
+ required: true
42085
+ schema:
42086
+ format: uuid
42087
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
42088
+ type: string
42089
+ - $ref: "#/components/parameters/IdempotencyKey"
42090
+ - $ref: "#/components/parameters/XCsrfToken"
42091
+ requestBody:
42092
+ content:
42093
+ application/json:
42094
+ examples:
42095
+ nominal:
42096
+ summary: Nominal valid request
42097
+ value:
42098
+ domainName: mayawrites.com
42099
+ registrant:
42100
+ address:
42101
+ city: Portland
42102
+ countryCode: US
42103
+ postalCode: "97201"
42104
+ region: OR
42105
+ street: 12 Example Street
42106
+ email: maya@example.com
42107
+ name: Maya Example
42108
+ phone: "+1.5555555555"
42109
+ schema:
42110
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsRequest"
42111
+ required: true
42112
+ responses:
42113
+ "202":
42114
+ content:
42115
+ application/json:
42116
+ examples:
42117
+ nominal:
42118
+ summary: Nominal successful response
42119
+ value:
42120
+ createdAt: "2026-11-02T09:00:00.000Z"
42121
+ domainName: mayawrites.com
42122
+ registrationId: 018f0000-0000-7000-8000-000000000001
42123
+ state: REGISTERING
42124
+ updatedAt: "2026-11-02T09:00:00.000Z"
42125
+ schema:
42126
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsResponse"
42127
+ description: register the included domain succeeded
42128
+ headers:
42129
+ Cache-Control:
42130
+ $ref: "#/components/headers/CacheControlNoStore"
42131
+ X-Correlation-Id:
42132
+ $ref: "#/components/headers/XCorrelationId"
42133
+ "400":
42134
+ $ref: "#/components/responses/RequestInvalid"
42135
+ "401":
42136
+ content:
42137
+ application/problem+json:
42138
+ examples:
42139
+ AUTHENTICATION_REQUIRED:
42140
+ summary: AUTHENTICATION_REQUIRED
42141
+ value:
42142
+ code: AUTHENTICATION_REQUIRED
42143
+ correlationId: 018f0000-0000-7000-8000-000000000001
42144
+ detail: See the operation contract.
42145
+ errors: []
42146
+ retryable: false
42147
+ schemaId: urn:gala:schema:problem:2.0.0
42148
+ schemaVersion: 2.0.0
42149
+ status: 401
42150
+ title: AUTHENTICATION_REQUIRED
42151
+ type: urn:gala:problem:authentication-required
42152
+ schema:
42153
+ $ref: "#/components/schemas/Problem"
42154
+ description: AUTHENTICATION_REQUIRED
42155
+ headers:
42156
+ Cache-Control:
42157
+ $ref: "#/components/headers/CacheControlNoStore"
42158
+ X-Correlation-Id:
42159
+ $ref: "#/components/headers/XCorrelationId"
42160
+ x-gala-problem-codes:
42161
+ - AUTHENTICATION_REQUIRED
42162
+ "403":
42163
+ $ref: "#/components/responses/AuthorizationDenied"
42164
+ "404":
42165
+ $ref: "#/components/responses/ResourceNotFound"
42166
+ "409":
42167
+ content:
42168
+ application/problem+json:
42169
+ examples:
42170
+ COMMAND_REPLAY_CONFLICT:
42171
+ summary: COMMAND_REPLAY_CONFLICT
42172
+ value:
42173
+ code: COMMAND_REPLAY_CONFLICT
42174
+ correlationId: 018f0000-0000-7000-8000-000000000001
42175
+ detail: See the operation contract.
42176
+ errors: []
42177
+ retryable: false
42178
+ schemaId: urn:gala:schema:problem:2.0.0
42179
+ schemaVersion: 2.0.0
42180
+ status: 409
42181
+ title: COMMAND_REPLAY_CONFLICT
42182
+ type: urn:gala:problem:command-replay-conflict
42183
+ INVALID_SOURCE_STATE:
42184
+ summary: INVALID_SOURCE_STATE
42185
+ value:
42186
+ code: INVALID_SOURCE_STATE
42187
+ correlationId: 018f0000-0000-7000-8000-000000000001
42188
+ detail: See the operation contract.
42189
+ errors: []
42190
+ retryable: false
42191
+ schemaId: urn:gala:schema:problem:2.0.0
42192
+ schemaVersion: 2.0.0
42193
+ status: 409
42194
+ title: INVALID_SOURCE_STATE
42195
+ type: urn:gala:problem:invalid-source-state
42196
+ PLAN_REQUIRED:
42197
+ summary: PLAN_REQUIRED
42198
+ value:
42199
+ code: PLAN_REQUIRED
42200
+ correlationId: 018f0000-0000-7000-8000-000000000001
42201
+ detail: The organization's plan does not include a domain. See the operation contract.
42202
+ errors: []
42203
+ retryable: false
42204
+ schemaId: urn:gala:schema:problem:2.0.0
42205
+ schemaVersion: 2.0.0
42206
+ status: 409
42207
+ title: PLAN_REQUIRED
42208
+ type: urn:gala:problem:plan-required
42209
+ schema:
42210
+ $ref: "#/components/schemas/Problem"
42211
+ description: COMMAND_REPLAY_CONFLICT, INVALID_SOURCE_STATE, PLAN_REQUIRED
42212
+ headers:
42213
+ Cache-Control:
42214
+ $ref: "#/components/headers/CacheControlNoStore"
42215
+ X-Correlation-Id:
42216
+ $ref: "#/components/headers/XCorrelationId"
42217
+ x-gala-problem-codes:
42218
+ - COMMAND_REPLAY_CONFLICT
42219
+ - INVALID_SOURCE_STATE
42220
+ - PLAN_REQUIRED
42221
+ "422":
42222
+ content:
42223
+ application/problem+json:
42224
+ examples:
42225
+ VALIDATION_FAILED:
42226
+ summary: VALIDATION_FAILED
42227
+ value:
42228
+ code: VALIDATION_FAILED
42229
+ correlationId: 018f0000-0000-7000-8000-000000000001
42230
+ detail: See the operation contract.
42231
+ errors: []
42232
+ retryable: false
42233
+ schemaId: urn:gala:schema:problem:2.0.0
42234
+ schemaVersion: 2.0.0
42235
+ status: 422
42236
+ title: VALIDATION_FAILED
42237
+ type: urn:gala:problem:validation-failed
42238
+ schema:
42239
+ $ref: "#/components/schemas/Problem"
42240
+ description: VALIDATION_FAILED
42241
+ headers:
42242
+ Cache-Control:
42243
+ $ref: "#/components/headers/CacheControlNoStore"
42244
+ X-Correlation-Id:
42245
+ $ref: "#/components/headers/XCorrelationId"
42246
+ x-gala-problem-codes:
42247
+ - VALIDATION_FAILED
42248
+ "503":
42249
+ content:
42250
+ application/problem+json:
42251
+ examples:
42252
+ CAPABILITY_UNAVAILABLE:
42253
+ summary: CAPABILITY_UNAVAILABLE
42254
+ value:
42255
+ code: CAPABILITY_UNAVAILABLE
42256
+ correlationId: 018f0000-0000-7000-8000-000000000001
42257
+ detail: See the operation contract.
42258
+ errors: []
42259
+ retryable: false
42260
+ schemaId: urn:gala:schema:problem:2.0.0
42261
+ schemaVersion: 2.0.0
42262
+ status: 503
42263
+ title: CAPABILITY_UNAVAILABLE
42264
+ type: urn:gala:problem:capability-unavailable
42265
+ schema:
42266
+ $ref: "#/components/schemas/Problem"
42267
+ description: CAPABILITY_UNAVAILABLE
42268
+ headers:
42269
+ Cache-Control:
42270
+ $ref: "#/components/headers/CacheControlNoStore"
42271
+ X-Correlation-Id:
42272
+ $ref: "#/components/headers/XCorrelationId"
42273
+ x-gala-problem-codes:
42274
+ - CAPABILITY_UNAVAILABLE
42275
+ security:
42276
+ - browserSession: []
42277
+ summary: register the included domain
42278
+ tags:
42279
+ - domains
42280
+ x-gala-activation-gate: MVP
42281
+ x-gala-activation-guards:
42282
+ - DOMAIN_REGISTRATION_ENABLED
42283
+ x-gala-capability-key: publication.settings.manage
42284
+ x-gala-concurrency: organization-version
42285
+ x-gala-conditional-capabilities: []
42286
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
42287
+ x-gala-nullability: required-and-nullable-are-explicit
42288
+ x-gala-purpose: register the included domain
42289
+ x-gala-reachable-problems:
42290
+ - AUTHENTICATION_REQUIRED
42291
+ - AUTHORIZATION_DENIED
42292
+ - CAPABILITY_UNAVAILABLE
42293
+ - COMMAND_REPLAY_CONFLICT
42294
+ - INVALID_SOURCE_STATE
42295
+ - PLAN_REQUIRED
42296
+ - REQUEST_FIELD_UNKNOWN
42297
+ - RESOURCE_NOT_FOUND
42298
+ - VALIDATION_FAILED
42299
+ x-gala-replay-identity: idempotency-key
42300
+ x-gala-state-guards:
42301
+ - Organization:INCLUDED_DOMAIN_UNUSED
42302
+ x-gala-success-category: async
42303
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
42304
+ /v2/organizations/{organizationId}/publications/{publicationId}/domain-registrations/{registrationId}:
42305
+ get:
42306
+ description: |
42307
+ Needs `publication.view`. One registration made for this site. `state`
42308
+ follows the work: `REQUESTED`, `REGISTERING`, `REGISTERED` (bought, records
42309
+ not yet written) and `ATTACHED` (the site uses it; `domainId` names the
42310
+ binding), or `ACTION_REQUIRED` and `FAILED` (`failure` says what happened and
42311
+ the person may ask Galascribe for help).
42312
+ operationId: getOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsByRegistrationId
42313
+ parameters:
42314
+ - $ref: "#/components/parameters/XCorrelationId"
42315
+ - example: 018f0000-0000-7000-8000-000000000001
42316
+ in: path
42317
+ name: organizationId
42318
+ required: true
42319
+ schema:
42320
+ format: uuid
42321
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
42322
+ type: string
42323
+ - example: 018f0000-0000-7000-8000-000000000001
42324
+ in: path
42325
+ name: publicationId
42326
+ required: true
42327
+ schema:
42328
+ format: uuid
42329
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
42330
+ type: string
42331
+ - example: 018f0000-0000-7000-8000-000000000001
42332
+ in: path
42333
+ name: registrationId
42334
+ required: true
42335
+ schema:
42336
+ format: uuid
42337
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
42338
+ type: string
42339
+ responses:
42340
+ "200":
42341
+ content:
42342
+ application/json:
42343
+ examples:
42344
+ nominal:
42345
+ summary: Nominal successful response
42346
+ value:
42347
+ createdAt: "2026-11-02T09:00:00.000Z"
42348
+ domainId: 018f0000-0000-7000-8000-000000000001
42349
+ domainName: mayawrites.com
42350
+ registrationId: 018f0000-0000-7000-8000-000000000001
42351
+ state: ATTACHED
42352
+ updatedAt: "2026-11-02T09:00:00.000Z"
42353
+ schema:
42354
+ $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsByRegistrationIdResponse"
42355
+ description: read a domain registration succeeded
42356
+ headers:
42357
+ Cache-Control:
42358
+ $ref: "#/components/headers/CacheControlNoStore"
42359
+ X-Correlation-Id:
42360
+ $ref: "#/components/headers/XCorrelationId"
42361
+ "400":
42362
+ $ref: "#/components/responses/ValidationFailed"
42363
+ "401":
42364
+ content:
42365
+ application/problem+json:
42366
+ examples:
42367
+ AUTHENTICATION_REQUIRED:
42368
+ summary: AUTHENTICATION_REQUIRED
42369
+ value:
42370
+ code: AUTHENTICATION_REQUIRED
42371
+ correlationId: 018f0000-0000-7000-8000-000000000001
42372
+ detail: See the operation contract.
42373
+ errors: []
42374
+ retryable: false
42375
+ schemaId: urn:gala:schema:problem:2.0.0
42376
+ schemaVersion: 2.0.0
42377
+ status: 401
42378
+ title: AUTHENTICATION_REQUIRED
42379
+ type: urn:gala:problem:authentication-required
42380
+ schema:
42381
+ $ref: "#/components/schemas/Problem"
42382
+ description: AUTHENTICATION_REQUIRED
42383
+ headers:
42384
+ Cache-Control:
42385
+ $ref: "#/components/headers/CacheControlNoStore"
42386
+ X-Correlation-Id:
42387
+ $ref: "#/components/headers/XCorrelationId"
42388
+ x-gala-problem-codes:
42389
+ - AUTHENTICATION_REQUIRED
42390
+ "403":
42391
+ $ref: "#/components/responses/AuthorizationDenied"
42392
+ "404":
42393
+ $ref: "#/components/responses/ResourceNotFound"
42394
+ security:
42395
+ - browserSession: []
42396
+ summary: read a domain registration
42397
+ tags:
42398
+ - domains
42399
+ x-gala-activation-gate: MVP
42400
+ x-gala-activation-guards:
42401
+ - NONE
42402
+ x-gala-capability-key: publication.view
42403
+ x-gala-concurrency: publication-and-destination-epochs
42404
+ x-gala-conditional-capabilities: []
42405
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
42406
+ x-gala-nullability: required-and-nullable-are-explicit
42407
+ x-gala-purpose: read a domain registration
42408
+ x-gala-reachable-problems:
42409
+ - AUTHENTICATION_REQUIRED
42410
+ - AUTHORIZATION_DENIED
42411
+ - RESOURCE_NOT_FOUND
42412
+ - VALIDATION_FAILED
42413
+ x-gala-replay-identity: safe-query
42414
+ x-gala-state-guards:
42415
+ - NONE
42416
+ x-gala-success-category: query
42417
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
42418
+ /v2/organizations/{organizationId}/publications/{publicationId}/domain-registrations:check:
42419
+ post:
42420
+ description: |
42421
+ Needs `publication.settings.manage`. Asks whether `name` can be registered
42422
+ for the organization as its included domain, without registering it. Always
42423
+ `200`: `registrable` is true, or `reason` says why not. `UNAVAILABLE`:
42424
+ already registered. `EXTENSION_NOT_SUPPORTED`: Galascribe cannot register
42425
+ that ending. `PREMIUM`: a premium name, which the included domain does
42426
+ not cover. `OVER_PRICE_CAP`: its first-year price is above what the
42427
+ included domain covers. `INVALID_NAME`: not a usable domain name.
42428
+ `PLAN_REQUIRED`: the plan has no included domain. `ALREADY_USED`: the
42429
+ organization already used its included domain. `NOT_CONFIGURED`:
42430
+ registration is not set up on this deployment. The response carries no
42431
+ price: the domain is included in the plan.
42432
+ operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsCheck
42433
+ parameters:
42434
+ - $ref: "#/components/parameters/XCorrelationId"
42435
+ - example: 018f0000-0000-7000-8000-000000000001
42436
+ in: path
42437
+ name: organizationId
42438
+ required: true
42439
+ schema:
42440
+ format: uuid
42441
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
42442
+ type: string
42443
+ - example: 018f0000-0000-7000-8000-000000000001
42444
+ in: path
42445
+ name: publicationId
42446
+ required: true
42447
+ schema:
42448
+ format: uuid
42449
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
42450
+ type: string
42451
+ - $ref: "#/components/parameters/XCsrfToken"
42452
+ requestBody:
42453
+ content:
42454
+ application/json:
42455
+ examples:
42456
+ nominal:
42457
+ summary: Nominal valid request
42458
+ value:
42459
+ name: mayawrites.com
42460
+ schema:
42461
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsCheckRequest"
42462
+ required: true
42463
+ responses:
42464
+ "200":
42465
+ content:
42466
+ application/json:
42467
+ examples:
42468
+ nominal:
42469
+ summary: Nominal successful response
42470
+ value:
42471
+ name: mayawrites.com
42472
+ registrable: true
42473
+ schema:
42474
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainRegistrationsCheckResponse"
42475
+ description: check a domain name for registration succeeded
42476
+ headers:
42477
+ Cache-Control:
42478
+ $ref: "#/components/headers/CacheControlNoStore"
42479
+ X-Correlation-Id:
42480
+ $ref: "#/components/headers/XCorrelationId"
42481
+ "400":
42482
+ $ref: "#/components/responses/RequestInvalid"
42483
+ "401":
42484
+ content:
42485
+ application/problem+json:
42486
+ examples:
42487
+ AUTHENTICATION_REQUIRED:
42488
+ summary: AUTHENTICATION_REQUIRED
42489
+ value:
42490
+ code: AUTHENTICATION_REQUIRED
42491
+ correlationId: 018f0000-0000-7000-8000-000000000001
42492
+ detail: See the operation contract.
42493
+ errors: []
42494
+ retryable: false
42495
+ schemaId: urn:gala:schema:problem:2.0.0
42496
+ schemaVersion: 2.0.0
42497
+ status: 401
42498
+ title: AUTHENTICATION_REQUIRED
42499
+ type: urn:gala:problem:authentication-required
42500
+ schema:
42501
+ $ref: "#/components/schemas/Problem"
42502
+ description: AUTHENTICATION_REQUIRED
42503
+ headers:
42504
+ Cache-Control:
42505
+ $ref: "#/components/headers/CacheControlNoStore"
42506
+ X-Correlation-Id:
42507
+ $ref: "#/components/headers/XCorrelationId"
42508
+ x-gala-problem-codes:
42509
+ - AUTHENTICATION_REQUIRED
42510
+ "403":
42511
+ $ref: "#/components/responses/AuthorizationDenied"
42512
+ "404":
42513
+ $ref: "#/components/responses/ResourceNotFound"
42514
+ security:
42515
+ - browserSession: []
42516
+ summary: check a domain name for registration
42517
+ tags:
42518
+ - domains
42519
+ x-gala-activation-gate: MVP
42520
+ x-gala-activation-guards:
42521
+ - NONE
42522
+ x-gala-capability-key: publication.settings.manage
42523
+ x-gala-concurrency: none
42524
+ x-gala-conditional-capabilities: []
42525
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
42526
+ x-gala-nullability: required-and-nullable-are-explicit
42527
+ x-gala-purpose: check a domain name for registration
42528
+ x-gala-reachable-problems:
42529
+ - AUTHENTICATION_REQUIRED
42530
+ - AUTHORIZATION_DENIED
42531
+ - REQUEST_FIELD_UNKNOWN
42532
+ - RESOURCE_NOT_FOUND
42533
+ - VALIDATION_FAILED
42534
+ x-gala-replay-identity: safe-query
42535
+ x-gala-state-guards:
42536
+ - NONE
42537
+ x-gala-success-category: protocol
42538
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
42539
+ /v2/organizations/{organizationId}/publications/{publicationId}/domains:
42540
+ get:
42541
+ description: |
42542
+ The publication's custom domain bindings, current first (at most one is
42543
+ not `DETACHED` or `EXPIRED`).
42544
+ operationId: getOrganizationsByOrganizationIdPublicationsByPublicationIdDomains
42545
+ parameters:
42546
+ - $ref: "#/components/parameters/XCorrelationId"
42547
+ - example: 018f0000-0000-7000-8000-000000000001
42548
+ in: path
42549
+ name: organizationId
42550
+ required: true
42551
+ schema:
42552
+ format: uuid
42553
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
42554
+ type: string
42555
+ - example: 018f0000-0000-7000-8000-000000000001
42556
+ in: path
42557
+ name: publicationId
42558
+ required: true
42559
+ schema:
42560
+ format: uuid
42561
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
42562
+ type: string
42563
+ responses:
42564
+ "200":
42565
+ content:
42566
+ application/json:
42567
+ examples:
42568
+ nominal:
42569
+ summary: Nominal successful response
42570
+ value:
42571
+ items:
42572
+ - canonicalBase:
42573
+ current: https://rathnastest.github.io/g11/
42574
+ published: false
42575
+ target: https://blog.maya.dev/
42576
+ certificate:
42577
+ state: NONE
42578
+ createdAt: "2026-10-09T12:00:00.000Z"
42579
+ dns:
42580
+ observed:
42581
+ addresses: []
42582
+ pointsToGithub: false
42583
+ resolves: false
42584
+ records:
42585
+ - name: blog
42586
+ type: CNAME
42587
+ value: rathnastest.github.io
42588
+ domainId: 018f0000-0000-7000-8000-000000000001
42589
+ expiresAt: "2026-10-16T12:00:00.000Z"
42590
+ hostname: blog.maya.dev
42591
+ kind: SUBDOMAIN
42592
+ nextStep:
42593
+ code: ADD_DNS_RECORDS
42594
+ detail: Add the CNAME record at your registrar.
42595
+ routing:
42596
+ httpsEnforced: false
42597
+ probeOk: false
42598
+ servedByPages: false
42599
+ state: OWNERSHIP_PENDING
42600
+ updatedAt: "2026-10-09T12:00:00.000Z"
42601
+ version: 0
42602
+ schema:
42603
+ $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsResponse"
42604
+ description: list the custom domains of a publication succeeded
42605
+ headers:
42606
+ Cache-Control:
42607
+ $ref: "#/components/headers/CacheControlNoStore"
42608
+ X-Correlation-Id:
42609
+ $ref: "#/components/headers/XCorrelationId"
42610
+ "400":
42611
+ content:
42612
+ application/problem+json:
42613
+ examples:
42614
+ VALIDATION_FAILED:
42615
+ summary: VALIDATION_FAILED
42616
+ value:
42617
+ code: VALIDATION_FAILED
42618
+ correlationId: 018f0000-0000-7000-8000-000000000001
42619
+ detail: See the operation contract.
42620
+ errors: []
42621
+ retryable: false
42622
+ schemaId: urn:gala:schema:problem:2.0.0
42623
+ schemaVersion: 2.0.0
42624
+ status: 400
42625
+ title: VALIDATION_FAILED
42626
+ type: urn:gala:problem:validation-failed
42627
+ schema:
42628
+ $ref: "#/components/schemas/Problem"
42629
+ description: VALIDATION_FAILED
42630
+ headers:
42631
+ Cache-Control:
42632
+ $ref: "#/components/headers/CacheControlNoStore"
42633
+ X-Correlation-Id:
42634
+ $ref: "#/components/headers/XCorrelationId"
42635
+ x-gala-problem-codes:
42636
+ - VALIDATION_FAILED
40854
42637
  "401":
40855
42638
  content:
40856
42639
  application/problem+json:
@@ -43397,6 +45180,389 @@ paths:
43397
45180
  - NONE
43398
45181
  x-gala-success-category: update
43399
45182
  x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
45183
+ /v2/organizations/{organizationId}/publications/{publicationId}/domains:check-galascribe-address:
45184
+ post:
45185
+ description: |
45186
+ Needs `publication.settings.manage`. Asks whether `label` can become this
45187
+ site's `label.galascribe.com` address, without reserving it. Always
45188
+ `200`: `available` is true, or `reason` says why not. `INVALID`: not a
45189
+ usable label (3 to 63 lowercase letters, digits and hyphens, not starting
45190
+ or ending with a hyphen). `RESERVED`: a name Galascribe keeps for itself.
45191
+ `TAKEN`: another site has it or something already exists at that name.
45192
+ `PLAN_REQUIRED`: the organization's plan has no Galascribe address.
45193
+ `NOT_CONFIGURED`: Galascribe addresses are not set up on this deployment.
45194
+ `ALREADY_HAS_DOMAIN`: the site already has a domain that is not detached.
45195
+ `hostname` is the full address when the label is well formed.
45196
+ operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsCheckGalascribeAddress
45197
+ parameters:
45198
+ - $ref: "#/components/parameters/XCorrelationId"
45199
+ - example: 018f0000-0000-7000-8000-000000000001
45200
+ in: path
45201
+ name: organizationId
45202
+ required: true
45203
+ schema:
45204
+ format: uuid
45205
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
45206
+ type: string
45207
+ - example: 018f0000-0000-7000-8000-000000000001
45208
+ in: path
45209
+ name: publicationId
45210
+ required: true
45211
+ schema:
45212
+ format: uuid
45213
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
45214
+ type: string
45215
+ - $ref: "#/components/parameters/XCsrfToken"
45216
+ requestBody:
45217
+ content:
45218
+ application/json:
45219
+ examples:
45220
+ nominal:
45221
+ summary: Nominal valid request
45222
+ value:
45223
+ label: maya
45224
+ schema:
45225
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsCheckGalascribeAddressRequest"
45226
+ required: true
45227
+ responses:
45228
+ "200":
45229
+ content:
45230
+ application/json:
45231
+ examples:
45232
+ nominal:
45233
+ summary: Nominal successful response
45234
+ value:
45235
+ available: true
45236
+ hostname: maya.galascribe.com
45237
+ label: maya
45238
+ schema:
45239
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsCheckGalascribeAddressResponse"
45240
+ description: check a Galascribe address succeeded
45241
+ headers:
45242
+ Cache-Control:
45243
+ $ref: "#/components/headers/CacheControlNoStore"
45244
+ X-Correlation-Id:
45245
+ $ref: "#/components/headers/XCorrelationId"
45246
+ "400":
45247
+ $ref: "#/components/responses/RequestInvalid"
45248
+ "401":
45249
+ content:
45250
+ application/problem+json:
45251
+ examples:
45252
+ AUTHENTICATION_REQUIRED:
45253
+ summary: AUTHENTICATION_REQUIRED
45254
+ value:
45255
+ code: AUTHENTICATION_REQUIRED
45256
+ correlationId: 018f0000-0000-7000-8000-000000000001
45257
+ detail: See the operation contract.
45258
+ errors: []
45259
+ retryable: false
45260
+ schemaId: urn:gala:schema:problem:2.0.0
45261
+ schemaVersion: 2.0.0
45262
+ status: 401
45263
+ title: AUTHENTICATION_REQUIRED
45264
+ type: urn:gala:problem:authentication-required
45265
+ schema:
45266
+ $ref: "#/components/schemas/Problem"
45267
+ description: AUTHENTICATION_REQUIRED
45268
+ headers:
45269
+ Cache-Control:
45270
+ $ref: "#/components/headers/CacheControlNoStore"
45271
+ X-Correlation-Id:
45272
+ $ref: "#/components/headers/XCorrelationId"
45273
+ x-gala-problem-codes:
45274
+ - AUTHENTICATION_REQUIRED
45275
+ "403":
45276
+ $ref: "#/components/responses/AuthorizationDenied"
45277
+ "404":
45278
+ $ref: "#/components/responses/ResourceNotFound"
45279
+ security:
45280
+ - browserSession: []
45281
+ summary: check a Galascribe address
45282
+ tags:
45283
+ - domains
45284
+ x-gala-activation-gate: MVP
45285
+ x-gala-activation-guards:
45286
+ - NONE
45287
+ x-gala-capability-key: publication.settings.manage
45288
+ x-gala-concurrency: none
45289
+ x-gala-conditional-capabilities: []
45290
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
45291
+ x-gala-nullability: required-and-nullable-are-explicit
45292
+ x-gala-purpose: check a Galascribe address
45293
+ x-gala-reachable-problems:
45294
+ - AUTHENTICATION_REQUIRED
45295
+ - AUTHORIZATION_DENIED
45296
+ - REQUEST_FIELD_UNKNOWN
45297
+ - RESOURCE_NOT_FOUND
45298
+ - VALIDATION_FAILED
45299
+ x-gala-replay-identity: safe-query
45300
+ x-gala-state-guards:
45301
+ - NONE
45302
+ x-gala-success-category: protocol
45303
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
45304
+ /v2/organizations/{organizationId}/publications/{publicationId}/domains:claim-galascribe-address:
45305
+ post:
45306
+ description: |
45307
+ Needs `publication.settings.manage`. Makes `label.galascribe.com` this
45308
+ site's custom domain. Galascribe owns the DNS records, so the returned
45309
+ `DomainBinding` carries `galascribeManaged` and the person is never asked
45310
+ to add records; the binding then follows the usual domain steps (Pages
45311
+ domain, certificate, base move). `409 PLAN_REQUIRED` when the plan has no
45312
+ Galascribe address; `409 INVALID_SOURCE_STATE` when the site already has a
45313
+ domain that is not detached; `422 VALIDATION_FAILED` pointed at `/label`
45314
+ when the label is `INVALID`, `RESERVED` or `TAKEN` (the reasons of the check
45315
+ read, which tells a client which one); `503 CAPABILITY_UNAVAILABLE` when
45316
+ Galascribe addresses are not configured.
45317
+ operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsClaimGalascribeAddress
45318
+ parameters:
45319
+ - $ref: "#/components/parameters/XCorrelationId"
45320
+ - example: 018f0000-0000-7000-8000-000000000001
45321
+ in: path
45322
+ name: organizationId
45323
+ required: true
45324
+ schema:
45325
+ format: uuid
45326
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
45327
+ type: string
45328
+ - example: 018f0000-0000-7000-8000-000000000001
45329
+ in: path
45330
+ name: publicationId
45331
+ required: true
45332
+ schema:
45333
+ format: uuid
45334
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
45335
+ type: string
45336
+ - $ref: "#/components/parameters/IdempotencyKey"
45337
+ - $ref: "#/components/parameters/XCsrfToken"
45338
+ requestBody:
45339
+ content:
45340
+ application/json:
45341
+ examples:
45342
+ nominal:
45343
+ summary: Nominal valid request
45344
+ value:
45345
+ label: maya
45346
+ schema:
45347
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsClaimGalascribeAddressRequest"
45348
+ required: true
45349
+ responses:
45350
+ "201":
45351
+ content:
45352
+ application/json:
45353
+ examples:
45354
+ nominal:
45355
+ summary: Nominal successful response
45356
+ value:
45357
+ canonicalBase:
45358
+ current: https://rathnastest.github.io/g11/
45359
+ published: false
45360
+ target: https://maya.galascribe.com/
45361
+ certificate:
45362
+ state: NONE
45363
+ createdAt: "2026-11-02T09:00:00.000Z"
45364
+ dns:
45365
+ observed:
45366
+ addresses: []
45367
+ pointsToGithub: false
45368
+ resolves: false
45369
+ records: []
45370
+ domainId: 018f0000-0000-7000-8000-000000000001
45371
+ galascribeManaged:
45372
+ kind: GALASCRIBE_ADDRESS
45373
+ hostname: maya.galascribe.com
45374
+ kind: SUBDOMAIN
45375
+ nextStep:
45376
+ code: WAIT_FOR_DNS
45377
+ detail: Galascribe is setting this up.
45378
+ routing:
45379
+ httpsEnforced: false
45380
+ probeOk: false
45381
+ servedByPages: false
45382
+ state: OWNERSHIP_PENDING
45383
+ updatedAt: "2026-11-02T09:00:00.000Z"
45384
+ version: 0
45385
+ schema:
45386
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsClaimGalascribeAddressResponse"
45387
+ description: claim a Galascribe address succeeded
45388
+ headers:
45389
+ Cache-Control:
45390
+ $ref: "#/components/headers/CacheControlNoStore"
45391
+ Location:
45392
+ $ref: "#/components/headers/Location"
45393
+ X-Correlation-Id:
45394
+ $ref: "#/components/headers/XCorrelationId"
45395
+ "400":
45396
+ $ref: "#/components/responses/RequestInvalid"
45397
+ "401":
45398
+ content:
45399
+ application/problem+json:
45400
+ examples:
45401
+ AUTHENTICATION_REQUIRED:
45402
+ summary: AUTHENTICATION_REQUIRED
45403
+ value:
45404
+ code: AUTHENTICATION_REQUIRED
45405
+ correlationId: 018f0000-0000-7000-8000-000000000001
45406
+ detail: See the operation contract.
45407
+ errors: []
45408
+ retryable: false
45409
+ schemaId: urn:gala:schema:problem:2.0.0
45410
+ schemaVersion: 2.0.0
45411
+ status: 401
45412
+ title: AUTHENTICATION_REQUIRED
45413
+ type: urn:gala:problem:authentication-required
45414
+ schema:
45415
+ $ref: "#/components/schemas/Problem"
45416
+ description: AUTHENTICATION_REQUIRED
45417
+ headers:
45418
+ Cache-Control:
45419
+ $ref: "#/components/headers/CacheControlNoStore"
45420
+ X-Correlation-Id:
45421
+ $ref: "#/components/headers/XCorrelationId"
45422
+ x-gala-problem-codes:
45423
+ - AUTHENTICATION_REQUIRED
45424
+ "403":
45425
+ $ref: "#/components/responses/AuthorizationDenied"
45426
+ "404":
45427
+ $ref: "#/components/responses/ResourceNotFound"
45428
+ "409":
45429
+ content:
45430
+ application/problem+json:
45431
+ examples:
45432
+ COMMAND_REPLAY_CONFLICT:
45433
+ summary: COMMAND_REPLAY_CONFLICT
45434
+ value:
45435
+ code: COMMAND_REPLAY_CONFLICT
45436
+ correlationId: 018f0000-0000-7000-8000-000000000001
45437
+ detail: See the operation contract.
45438
+ errors: []
45439
+ retryable: false
45440
+ schemaId: urn:gala:schema:problem:2.0.0
45441
+ schemaVersion: 2.0.0
45442
+ status: 409
45443
+ title: COMMAND_REPLAY_CONFLICT
45444
+ type: urn:gala:problem:command-replay-conflict
45445
+ INVALID_SOURCE_STATE:
45446
+ summary: INVALID_SOURCE_STATE
45447
+ value:
45448
+ code: INVALID_SOURCE_STATE
45449
+ correlationId: 018f0000-0000-7000-8000-000000000001
45450
+ detail: See the operation contract.
45451
+ errors: []
45452
+ retryable: false
45453
+ schemaId: urn:gala:schema:problem:2.0.0
45454
+ schemaVersion: 2.0.0
45455
+ status: 409
45456
+ title: INVALID_SOURCE_STATE
45457
+ type: urn:gala:problem:invalid-source-state
45458
+ PLAN_REQUIRED:
45459
+ summary: PLAN_REQUIRED
45460
+ value:
45461
+ code: PLAN_REQUIRED
45462
+ correlationId: 018f0000-0000-7000-8000-000000000001
45463
+ detail: The organization's plan does not include a Galascribe address. See the operation contract.
45464
+ errors: []
45465
+ retryable: false
45466
+ schemaId: urn:gala:schema:problem:2.0.0
45467
+ schemaVersion: 2.0.0
45468
+ status: 409
45469
+ title: PLAN_REQUIRED
45470
+ type: urn:gala:problem:plan-required
45471
+ schema:
45472
+ $ref: "#/components/schemas/Problem"
45473
+ description: COMMAND_REPLAY_CONFLICT, INVALID_SOURCE_STATE, PLAN_REQUIRED
45474
+ headers:
45475
+ Cache-Control:
45476
+ $ref: "#/components/headers/CacheControlNoStore"
45477
+ X-Correlation-Id:
45478
+ $ref: "#/components/headers/XCorrelationId"
45479
+ x-gala-problem-codes:
45480
+ - COMMAND_REPLAY_CONFLICT
45481
+ - INVALID_SOURCE_STATE
45482
+ - PLAN_REQUIRED
45483
+ "422":
45484
+ content:
45485
+ application/problem+json:
45486
+ examples:
45487
+ VALIDATION_FAILED:
45488
+ summary: VALIDATION_FAILED
45489
+ value:
45490
+ code: VALIDATION_FAILED
45491
+ correlationId: 018f0000-0000-7000-8000-000000000001
45492
+ detail: That address is reserved. Choose another. See the operation contract.
45493
+ errors: []
45494
+ retryable: false
45495
+ schemaId: urn:gala:schema:problem:2.0.0
45496
+ schemaVersion: 2.0.0
45497
+ status: 422
45498
+ title: VALIDATION_FAILED
45499
+ type: urn:gala:problem:validation-failed
45500
+ schema:
45501
+ $ref: "#/components/schemas/Problem"
45502
+ description: VALIDATION_FAILED
45503
+ headers:
45504
+ Cache-Control:
45505
+ $ref: "#/components/headers/CacheControlNoStore"
45506
+ X-Correlation-Id:
45507
+ $ref: "#/components/headers/XCorrelationId"
45508
+ x-gala-problem-codes:
45509
+ - VALIDATION_FAILED
45510
+ "503":
45511
+ content:
45512
+ application/problem+json:
45513
+ examples:
45514
+ CAPABILITY_UNAVAILABLE:
45515
+ summary: CAPABILITY_UNAVAILABLE
45516
+ value:
45517
+ code: CAPABILITY_UNAVAILABLE
45518
+ correlationId: 018f0000-0000-7000-8000-000000000001
45519
+ detail: See the operation contract.
45520
+ errors: []
45521
+ retryable: false
45522
+ schemaId: urn:gala:schema:problem:2.0.0
45523
+ schemaVersion: 2.0.0
45524
+ status: 503
45525
+ title: CAPABILITY_UNAVAILABLE
45526
+ type: urn:gala:problem:capability-unavailable
45527
+ schema:
45528
+ $ref: "#/components/schemas/Problem"
45529
+ description: CAPABILITY_UNAVAILABLE
45530
+ headers:
45531
+ Cache-Control:
45532
+ $ref: "#/components/headers/CacheControlNoStore"
45533
+ X-Correlation-Id:
45534
+ $ref: "#/components/headers/XCorrelationId"
45535
+ x-gala-problem-codes:
45536
+ - CAPABILITY_UNAVAILABLE
45537
+ security:
45538
+ - browserSession: []
45539
+ summary: claim a Galascribe address
45540
+ tags:
45541
+ - domains
45542
+ x-gala-activation-gate: MVP
45543
+ x-gala-activation-guards:
45544
+ - GALASCRIBE_ADDRESS_ZONE_CONFIGURED
45545
+ x-gala-capability-key: publication.settings.manage
45546
+ x-gala-concurrency: binding-epoch
45547
+ x-gala-conditional-capabilities: []
45548
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
45549
+ x-gala-nullability: required-and-nullable-are-explicit
45550
+ x-gala-purpose: claim a Galascribe address
45551
+ x-gala-reachable-problems:
45552
+ - AUTHENTICATION_REQUIRED
45553
+ - AUTHORIZATION_DENIED
45554
+ - CAPABILITY_UNAVAILABLE
45555
+ - COMMAND_REPLAY_CONFLICT
45556
+ - INVALID_SOURCE_STATE
45557
+ - PLAN_REQUIRED
45558
+ - REQUEST_FIELD_UNKNOWN
45559
+ - RESOURCE_NOT_FOUND
45560
+ - VALIDATION_FAILED
45561
+ x-gala-replay-identity: idempotency-key
45562
+ x-gala-state-guards:
45563
+ - PublicationDomain:NONE -> OWNERSHIP_PENDING
45564
+ x-gala-success-category: create
45565
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
43400
45566
  /v2/organizations/{organizationId}/publications/{publicationId}/followers:
43401
45567
  get:
43402
45568
  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 +58403,199 @@ paths:
56237
58403
  - NONE
56238
58404
  x-gala-success-category: query
56239
58405
  x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
58406
+ /v2/organizations/{organizationId}/publications/{publicationId}/site/hosting-check:
58407
+ get:
58408
+ description: |
58409
+ Needs `publication.view`. What the site's repository contains that GitHub
58410
+ Pages limits or does not allow, as a `SiteHostingCheck`, computed for the
58411
+ default branch's current commit (`revision`) from the repository's file
58412
+ tree and a bounded scan of its pages. It is advice and never blocks
58413
+ publishing: a `LIMIT` finding is something GitHub will refuse or stop
58414
+ serving, a `WARNING` is a risk. `offers` is empty when there is no
58415
+ finding, `UPGRADE` on the Free plan and `REQUEST_GALASCRIBE_HOSTING` on a
58416
+ paid plan. The response carries a strong `ETag` and honours
58417
+ `If-None-Match` with `304` and no body; `Cache-Control` is `private,
58418
+ no-cache`, so a browser stores the body and revalidates it on every use.
58419
+ operationId: getOrganizationsByOrganizationIdPublicationsByPublicationIdSiteHostingCheck
58420
+ parameters:
58421
+ - $ref: "#/components/parameters/XCorrelationId"
58422
+ - example: 018f0000-0000-7000-8000-000000000001
58423
+ in: path
58424
+ name: organizationId
58425
+ required: true
58426
+ schema:
58427
+ format: uuid
58428
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
58429
+ type: string
58430
+ - example: 018f0000-0000-7000-8000-000000000001
58431
+ in: path
58432
+ name: publicationId
58433
+ required: true
58434
+ schema:
58435
+ format: uuid
58436
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
58437
+ type: string
58438
+ - description: A previously returned `ETag`; a match answers `304`.
58439
+ example: '"1"'
58440
+ in: header
58441
+ name: If-None-Match
58442
+ required: false
58443
+ schema:
58444
+ maxLength: 256
58445
+ type: string
58446
+ responses:
58447
+ "200":
58448
+ content:
58449
+ application/json:
58450
+ examples:
58451
+ nominal:
58452
+ summary: Nominal successful response
58453
+ value:
58454
+ checkedAt: "2026-11-02T09:00:00.000Z"
58455
+ findings:
58456
+ - bytes: 62914560
58457
+ code: LARGE_FILE
58458
+ items:
58459
+ - bytes: 62914560
58460
+ path: media/launch-tour.mp4
58461
+ limitBytes: 52428800
58462
+ pathCount: 1
58463
+ severity: WARNING
58464
+ - code: COMMERCE_PAGE
58465
+ items:
58466
+ - path: pages/shop.md
58467
+ title: Shop
58468
+ pathCount: 1
58469
+ severity: WARNING
58470
+ signals:
58471
+ - CHECKOUT_LINK
58472
+ - SHOP_WORDS
58473
+ host: GITHUB_PAGES
58474
+ limits:
58475
+ directoryEntries: 3000
58476
+ fileMaxBytes: 104857600
58477
+ fileWarningBytes: 52428800
58478
+ mediaWarningBytes: 524288000
58479
+ siteBytes: 1073741824
58480
+ offers:
58481
+ - UPGRADE
58482
+ planTier: FREE
58483
+ revision: sha1:0000000000000000000000000000000000000000
58484
+ totals:
58485
+ files: 142
58486
+ mediaBytes: 83886080
58487
+ mediaFiles: 12
58488
+ siteBytes: 125829120
58489
+ schema:
58490
+ $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPublicationsByPublicationIdSiteHostingCheckResponse"
58491
+ description: read a site's hosting check succeeded
58492
+ headers:
58493
+ Cache-Control:
58494
+ $ref: "#/components/headers/CacheControlPrivateNoCache"
58495
+ ETag:
58496
+ description: Strong validator of this response body.
58497
+ required: true
58498
+ schema:
58499
+ maxLength: 256
58500
+ type: string
58501
+ X-Correlation-Id:
58502
+ $ref: "#/components/headers/XCorrelationId"
58503
+ "304":
58504
+ description: the caller's `If-None-Match` still matches; no body
58505
+ headers:
58506
+ ETag:
58507
+ description: Strong validator of this response body.
58508
+ required: true
58509
+ schema:
58510
+ maxLength: 256
58511
+ type: string
58512
+ X-Correlation-Id:
58513
+ $ref: "#/components/headers/XCorrelationId"
58514
+ "400":
58515
+ $ref: "#/components/responses/ValidationFailed"
58516
+ "401":
58517
+ content:
58518
+ application/problem+json:
58519
+ examples:
58520
+ AUTHENTICATION_REQUIRED:
58521
+ summary: AUTHENTICATION_REQUIRED
58522
+ value:
58523
+ code: AUTHENTICATION_REQUIRED
58524
+ correlationId: 018f0000-0000-7000-8000-000000000001
58525
+ detail: See the operation contract.
58526
+ errors: []
58527
+ retryable: false
58528
+ schemaId: urn:gala:schema:problem:2.0.0
58529
+ schemaVersion: 2.0.0
58530
+ status: 401
58531
+ title: AUTHENTICATION_REQUIRED
58532
+ type: urn:gala:problem:authentication-required
58533
+ schema:
58534
+ $ref: "#/components/schemas/Problem"
58535
+ description: AUTHENTICATION_REQUIRED
58536
+ headers:
58537
+ Cache-Control:
58538
+ $ref: "#/components/headers/CacheControlNoStore"
58539
+ X-Correlation-Id:
58540
+ $ref: "#/components/headers/XCorrelationId"
58541
+ x-gala-problem-codes:
58542
+ - AUTHENTICATION_REQUIRED
58543
+ "403":
58544
+ $ref: "#/components/responses/AuthorizationDenied"
58545
+ "404":
58546
+ $ref: "#/components/responses/ResourceNotFound"
58547
+ "503":
58548
+ content:
58549
+ application/problem+json:
58550
+ examples:
58551
+ DEPENDENCY_UNAVAILABLE:
58552
+ summary: DEPENDENCY_UNAVAILABLE
58553
+ value:
58554
+ code: DEPENDENCY_UNAVAILABLE
58555
+ correlationId: 018f0000-0000-7000-8000-000000000001
58556
+ detail: See the operation contract.
58557
+ errors: []
58558
+ retryable: true
58559
+ schemaId: urn:gala:schema:problem:2.0.0
58560
+ schemaVersion: 2.0.0
58561
+ status: 503
58562
+ title: DEPENDENCY_UNAVAILABLE
58563
+ type: urn:gala:problem:dependency-unavailable
58564
+ schema:
58565
+ $ref: "#/components/schemas/Problem"
58566
+ description: DEPENDENCY_UNAVAILABLE
58567
+ headers:
58568
+ Cache-Control:
58569
+ $ref: "#/components/headers/CacheControlNoStore"
58570
+ X-Correlation-Id:
58571
+ $ref: "#/components/headers/XCorrelationId"
58572
+ x-gala-problem-codes:
58573
+ - DEPENDENCY_UNAVAILABLE
58574
+ security:
58575
+ - browserSession: []
58576
+ summary: read a site's hosting check
58577
+ tags:
58578
+ - organizations
58579
+ x-gala-activation-gate: MVP
58580
+ x-gala-activation-guards:
58581
+ - NONE
58582
+ x-gala-capability-key: publication.view
58583
+ x-gala-concurrency: authorization-and-publication-epochs
58584
+ x-gala-conditional-capabilities: []
58585
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
58586
+ x-gala-nullability: required-and-nullable-are-explicit
58587
+ x-gala-purpose: read a site's hosting check
58588
+ x-gala-reachable-problems:
58589
+ - AUTHENTICATION_REQUIRED
58590
+ - AUTHORIZATION_DENIED
58591
+ - DEPENDENCY_UNAVAILABLE
58592
+ - RESOURCE_NOT_FOUND
58593
+ - VALIDATION_FAILED
58594
+ x-gala-replay-identity: safe-query
58595
+ x-gala-state-guards:
58596
+ - NONE
58597
+ x-gala-success-category: query
58598
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
56240
58599
  /v2/organizations/{organizationId}/publications/{publicationId}/site:publish-update:
56241
58600
  post:
56242
58601
  description: |
@@ -60400,6 +62759,168 @@ paths:
60400
62759
  - NONE
60401
62760
  x-gala-success-category: update
60402
62761
  x-gala-tenant-scope: NONE
62762
+ /v2/platform/assistance-requests:
62763
+ get:
62764
+ description: |
62765
+ Operators only, with recent authentication. Keyset-paged requests that
62766
+ authors made for help with their sites, newest first. `state` limits the
62767
+ list to `OPEN` or `CLOSED` requests. Each item names the organization and
62768
+ site, the GitHub login that asked and the optional note.
62769
+ operationId: getPlatformAssistanceRequests
62770
+ parameters:
62771
+ - $ref: "#/components/parameters/XCorrelationId"
62772
+ - description: Which requests to list. Absent lists both.
62773
+ example: OPEN
62774
+ in: query
62775
+ name: state
62776
+ required: false
62777
+ schema:
62778
+ enum:
62779
+ - OPEN
62780
+ - CLOSED
62781
+ type: string
62782
+ - $ref: "#/components/parameters/Cursor"
62783
+ - $ref: "#/components/parameters/Limit"
62784
+ responses:
62785
+ "200":
62786
+ content:
62787
+ application/json:
62788
+ examples:
62789
+ nominal:
62790
+ summary: Nominal successful response
62791
+ value:
62792
+ hasMore: false
62793
+ items:
62794
+ - createdAt: "2026-11-02T09:00:00.000Z"
62795
+ findingCodes:
62796
+ - LARGE_FILE
62797
+ kind: GALASCRIBE_HOSTING
62798
+ note: The tour video is 60 MB.
62799
+ organizationId: 018f0000-0000-7000-8000-000000000001
62800
+ organizationName: Maya Studio
62801
+ publicationId: 018f0000-0000-7000-8000-000000000001
62802
+ publicationName: Maya Writes
62803
+ requestId: 018f0000-0000-7000-8000-000000000001
62804
+ requestedByLogin: maya
62805
+ state: OPEN
62806
+ schema:
62807
+ $ref: "#/components/schemas/GetPlatformAssistanceRequestsResponse"
62808
+ description: list assistance requests succeeded
62809
+ headers:
62810
+ Cache-Control:
62811
+ $ref: "#/components/headers/CacheControlNoStore"
62812
+ X-Correlation-Id:
62813
+ $ref: "#/components/headers/XCorrelationId"
62814
+ "400":
62815
+ $ref: "#/components/responses/ValidationFailed"
62816
+ "401":
62817
+ $ref: "#/components/responses/PlatformAuthenticationRequired"
62818
+ "403":
62819
+ $ref: "#/components/responses/AuthorizationDenied"
62820
+ security:
62821
+ - browserSession: []
62822
+ summary: list assistance requests
62823
+ tags:
62824
+ - platform
62825
+ x-gala-activation-gate: MVP
62826
+ x-gala-activation-guards:
62827
+ - NONE
62828
+ x-gala-capability-key: platform.users.view
62829
+ x-gala-concurrency: none
62830
+ x-gala-conditional-capabilities: []
62831
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
62832
+ x-gala-nullability: required-and-nullable-are-explicit
62833
+ x-gala-purpose: list assistance requests
62834
+ x-gala-reachable-problems:
62835
+ - AUTHENTICATION_REQUIRED
62836
+ - AUTHORIZATION_DENIED
62837
+ - REAUTH_REQUIRED
62838
+ - VALIDATION_FAILED
62839
+ x-gala-replay-identity: safe-query
62840
+ x-gala-state-guards:
62841
+ - NONE
62842
+ x-gala-success-category: query
62843
+ x-gala-tenant-scope: NONE
62844
+ /v2/platform/assistance-requests/{requestId}:close:
62845
+ post:
62846
+ description: |
62847
+ Operators only, with recent authentication. Marks the request `CLOSED`
62848
+ once the operator has done the work, and returns it. Closing a request that
62849
+ is already closed returns it unchanged.
62850
+ operationId: postPlatformAssistanceRequestsByRequestIdClose
62851
+ parameters:
62852
+ - $ref: "#/components/parameters/XCorrelationId"
62853
+ - example: 018f0000-0000-7000-8000-000000000001
62854
+ in: path
62855
+ name: requestId
62856
+ required: true
62857
+ schema:
62858
+ format: uuid
62859
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
62860
+ type: string
62861
+ - $ref: "#/components/parameters/XCsrfToken"
62862
+ responses:
62863
+ "200":
62864
+ content:
62865
+ application/json:
62866
+ examples:
62867
+ nominal:
62868
+ summary: Nominal successful response
62869
+ value:
62870
+ closedAt: "2026-11-02T09:00:00.000Z"
62871
+ createdAt: "2026-11-02T09:00:00.000Z"
62872
+ findingCodes:
62873
+ - LARGE_FILE
62874
+ kind: GALASCRIBE_HOSTING
62875
+ note: The tour video is 60 MB.
62876
+ organizationId: 018f0000-0000-7000-8000-000000000001
62877
+ organizationName: Maya Studio
62878
+ publicationId: 018f0000-0000-7000-8000-000000000001
62879
+ publicationName: Maya Writes
62880
+ requestId: 018f0000-0000-7000-8000-000000000001
62881
+ requestedByLogin: maya
62882
+ state: CLOSED
62883
+ schema:
62884
+ $ref: "#/components/schemas/PostPlatformAssistanceRequestsByRequestIdCloseResponse"
62885
+ description: close an assistance request succeeded
62886
+ headers:
62887
+ Cache-Control:
62888
+ $ref: "#/components/headers/CacheControlNoStore"
62889
+ X-Correlation-Id:
62890
+ $ref: "#/components/headers/XCorrelationId"
62891
+ "400":
62892
+ $ref: "#/components/responses/ValidationFailed"
62893
+ "401":
62894
+ $ref: "#/components/responses/PlatformAuthenticationRequired"
62895
+ "403":
62896
+ $ref: "#/components/responses/AuthorizationDenied"
62897
+ "404":
62898
+ $ref: "#/components/responses/ResourceNotFound"
62899
+ security:
62900
+ - browserSession: []
62901
+ summary: close an assistance request
62902
+ tags:
62903
+ - platform
62904
+ x-gala-activation-gate: MVP
62905
+ x-gala-activation-guards:
62906
+ - NONE
62907
+ x-gala-capability-key: platform.users.contact
62908
+ x-gala-concurrency: none
62909
+ x-gala-conditional-capabilities: []
62910
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
62911
+ x-gala-nullability: required-and-nullable-are-explicit
62912
+ x-gala-purpose: close an assistance request
62913
+ x-gala-reachable-problems:
62914
+ - AUTHENTICATION_REQUIRED
62915
+ - AUTHORIZATION_DENIED
62916
+ - REAUTH_REQUIRED
62917
+ - RESOURCE_NOT_FOUND
62918
+ - VALIDATION_FAILED
62919
+ x-gala-replay-identity: natural-idempotent-state
62920
+ x-gala-state-guards:
62921
+ - NONE
62922
+ x-gala-success-category: protocol
62923
+ x-gala-tenant-scope: NONE
60403
62924
  /v2/platform/audit-events:
60404
62925
  get:
60405
62926
  description: |
@@ -61879,7 +64400,9 @@ paths:
61879
64400
  its sites may turn on Listen, the audio version of posts). Defaults of
61880
64401
  the first release: FREE 50 and no contact form, PRO 500 and a contact
61881
64402
  form, BUSINESS 2000 and a contact form. Listen defaults: FREE no, PRO
61882
- and BUSINESS yes.
64403
+ and BUSINESS yes. `collaboratorLimit` (SCHEMA-3.30.0) is the most
64404
+ collaborators an organization on the plan may have, 0 meaning no limit:
64405
+ FREE 1, PRO and BUSINESS no limit.
61883
64406
  operationId: getPlatformPlans
61884
64407
  parameters:
61885
64408
  - $ref: "#/components/parameters/XCorrelationId"
@@ -61893,17 +64416,20 @@ paths:
61893
64416
  value:
61894
64417
  effectiveAt: "2026-10-10T00:00:04.000Z"
61895
64418
  items:
61896
- - contactForm: false
64419
+ - collaboratorLimit: 1
64420
+ contactForm: false
61897
64421
  listen: false
61898
64422
  newsletterSubscriberLimit: 50
61899
64423
  planKey: FREE
61900
64424
  publicationLimit: 1
61901
- - contactForm: true
64425
+ - collaboratorLimit: 0
64426
+ contactForm: true
61902
64427
  listen: true
61903
64428
  newsletterSubscriberLimit: 500
61904
64429
  planKey: PRO
61905
64430
  publicationLimit: 10
61906
- - contactForm: true
64431
+ - collaboratorLimit: 0
64432
+ contactForm: true
61907
64433
  listen: true
61908
64434
  newsletterSubscriberLimit: 2000
61909
64435
  planKey: BUSINESS
@@ -61953,8 +64479,8 @@ paths:
61953
64479
  Operators only, with recent authentication. Atomically replaces the
61954
64480
  complete publication-capacity release, changing the named plan's limits
61955
64481
  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 <=
64482
+ `newsletterSubscriberLimit`, `contactForm`, `listen` and
64483
+ `collaboratorLimit` are optional: absent keeps the plan's current value. The invariant FREE <= PRO <=
61958
64484
  BUSINESS is enforced on `publicationLimit` only. `reason` is a
61959
64485
  non-sensitive operator reason code recorded in the audit event.
61960
64486
  operationId: putPlatformPlansByPlanKey
@@ -61991,17 +64517,20 @@ paths:
61991
64517
  value:
61992
64518
  effectiveAt: "2026-10-10T12:00:00.000Z"
61993
64519
  items:
61994
- - contactForm: false
64520
+ - collaboratorLimit: 1
64521
+ contactForm: false
61995
64522
  listen: false
61996
64523
  newsletterSubscriberLimit: 50
61997
64524
  planKey: FREE
61998
64525
  publicationLimit: 1
61999
- - contactForm: true
64526
+ - collaboratorLimit: 0
64527
+ contactForm: true
62000
64528
  listen: true
62001
64529
  newsletterSubscriberLimit: 500
62002
64530
  planKey: PRO
62003
64531
  publicationLimit: 12
62004
- - contactForm: true
64532
+ - collaboratorLimit: 0
64533
+ contactForm: true
62005
64534
  listen: true
62006
64535
  newsletterSubscriberLimit: 2000
62007
64536
  planKey: BUSINESS
@@ -63424,7 +65953,7 @@ paths:
63424
65953
  required: false
63425
65954
  schema:
63426
65955
  $ref: "#/components/schemas/PlatformPersonState"
63427
- - description: Case-insensitive match against person id, display name, or login.
65956
+ - description: Case-insensitive match against person id, display name, or login. A search containing "@" also matches a person whose contact email on file equals it exactly (case-insensitive).
63428
65957
  example: ada
63429
65958
  in: query
63430
65959
  name: search
@@ -63445,7 +65974,8 @@ paths:
63445
65974
  value:
63446
65975
  hasMore: false
63447
65976
  items:
63448
- - contactEmailOnFile: true
65977
+ - contactEmail: ada@example.com
65978
+ contactEmailOnFile: true
63449
65979
  createdAt: "2026-09-01T12:00:00.000Z"
63450
65980
  displayName: Ada Reader
63451
65981
  lastSignInAt: "2026-10-10T11:30:00.000Z"