@rathnasgala2/schemas 3.13.0 → 3.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1441,6 +1441,27 @@ components:
1441
1441
  - GOOGLE
1442
1442
  - DESCRIPTION_CODE
1443
1443
  type: string
1444
+ CreatorClaimProof:
1445
+ additionalProperties: false
1446
+ description: What a claimant must show before accepting. `YOUTUBE_CHANNEL` needs the claimant to prove they control the channel (`channelId`, and `handle` when it is known); `LINK_ONLY` needs nothing beyond the link itself, so anyone who holds a `LINK_ONLY` link and signs in can claim the site.
1447
+ properties:
1448
+ channelId:
1449
+ $ref: "#/components/schemas/YoutubeChannelId"
1450
+ handle:
1451
+ maxLength: 31
1452
+ minLength: 4
1453
+ pattern: ^@[A-Za-z0-9._-]{3,30}$
1454
+ type: string
1455
+ kind:
1456
+ $ref: "#/components/schemas/CreatorClaimProofKind"
1457
+ required:
1458
+ - kind
1459
+ type: object
1460
+ CreatorClaimProofKind:
1461
+ enum:
1462
+ - YOUTUBE_CHANNEL
1463
+ - LINK_ONLY
1464
+ type: string
1444
1465
  CreatorClaimState:
1445
1466
  enum:
1446
1467
  - OPEN
@@ -2146,6 +2167,7 @@ components:
2146
2167
  properties:
2147
2168
  channel:
2148
2169
  additionalProperties: false
2170
+ description: Present only when `proof.kind` is `YOUTUBE_CHANNEL`.
2149
2171
  properties:
2150
2172
  handle:
2151
2173
  maxLength: 31
@@ -2165,19 +2187,22 @@ components:
2165
2187
  pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
2166
2188
  type: string
2167
2189
  methods:
2190
+ description: The ways to prove the channel is the caller's; empty when `proof.kind` is `LINK_ONLY`, which has nothing to prove.
2168
2191
  items:
2169
2192
  $ref: "#/components/schemas/CreatorClaimMethod"
2170
2193
  maxItems: 2
2171
- minItems: 1
2194
+ minItems: 0
2172
2195
  type: array
2173
2196
  uniqueItems: true
2174
2197
  organizationId:
2175
- description: Present only when `state` is `CLAIMED` and the caller is the person who claimed it.
2198
+ description: Present only when `state` is `CLAIMED` and the caller is the person who claimed it, or when the caller already owns the site (the owner who issued the link, reading it).
2176
2199
  format: uuid
2177
2200
  pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
2178
2201
  type: string
2202
+ proof:
2203
+ $ref: "#/components/schemas/CreatorClaimProof"
2179
2204
  publicationId:
2180
- description: Present only when `state` is `CLAIMED` and the caller is the person who claimed it.
2205
+ description: Present only when `state` is `CLAIMED` and the caller is the person who claimed it, or when the caller already owns the site (the owner who issued the link, reading it).
2181
2206
  format: uuid
2182
2207
  pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
2183
2208
  type: string
@@ -2202,7 +2227,6 @@ components:
2202
2227
  required:
2203
2228
  - claimId
2204
2229
  - state
2205
- - channel
2206
2230
  - site
2207
2231
  - methods
2208
2232
  type: object
@@ -3128,6 +3152,18 @@ components:
3128
3152
  - periodEndsAt
3129
3153
  - editionKinds
3130
3154
  type: object
3155
+ GetOrganizationsByOrganizationIdPublicationsByPublicationIdHandoverClaimsResponse:
3156
+ additionalProperties: false
3157
+ properties:
3158
+ items:
3159
+ description: Newest first, every state; at most the 50 most recent.
3160
+ items:
3161
+ $ref: "#/components/schemas/HandoverClaim"
3162
+ maxItems: 50
3163
+ type: array
3164
+ required:
3165
+ - items
3166
+ type: object
3131
3167
  GetOrganizationsByOrganizationIdPublicationsByPublicationIdHandoverResponse:
3132
3168
  additionalProperties: false
3133
3169
  properties:
@@ -4818,6 +4854,59 @@ components:
4818
4854
  - PRIVATE
4819
4855
  - PUBLIC
4820
4856
  type: string
4857
+ HandoverClaim:
4858
+ additionalProperties: false
4859
+ description: One claim link that hands a site to whoever accepts it. Demo-site claims appear here too, with proof `YOUTUBE_CHANNEL`.
4860
+ properties:
4861
+ claimId:
4862
+ format: uuid
4863
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
4864
+ type: string
4865
+ claimUrl:
4866
+ description: Present only while `state` is `OPEN`, so the owner can copy the link again; absent in every other state. It is also absent on an `OPEN` claim issued before 3.14.0 whose token the API does not hold sealed, until the owner re-issues the claim with `replace`. The link is a bearer secret, so anyone who holds it can open the claim page.
4867
+ format: uri
4868
+ maxLength: 2048
4869
+ pattern: ^https://[^\s]+$
4870
+ type: string
4871
+ claimedAt:
4872
+ $ref: "#/components/schemas/PortableProblemRfc3339"
4873
+ claimedBy:
4874
+ additionalProperties: false
4875
+ description: Present only when `state` is `CLAIMED`.
4876
+ properties:
4877
+ displayName:
4878
+ maxLength: 200
4879
+ minLength: 1
4880
+ type: string
4881
+ login:
4882
+ description: "GitHub login grammar: letters, digits and single hyphens, not starting or ending with a hyphen. Absent when the claimant has no linked GitHub login."
4883
+ maxLength: 39
4884
+ minLength: 1
4885
+ pattern: ^[A-Za-z0-9](?:-?[A-Za-z0-9]){0,38}$
4886
+ type: string
4887
+ required:
4888
+ - displayName
4889
+ type: object
4890
+ createdAt:
4891
+ $ref: "#/components/schemas/PortableProblemRfc3339"
4892
+ expiresAt:
4893
+ $ref: "#/components/schemas/PortableProblemRfc3339"
4894
+ proof:
4895
+ $ref: "#/components/schemas/CreatorClaimProof"
4896
+ state:
4897
+ $ref: "#/components/schemas/CreatorClaimState"
4898
+ version:
4899
+ format: int64
4900
+ minimum: 0
4901
+ type: integer
4902
+ required:
4903
+ - claimId
4904
+ - state
4905
+ - createdAt
4906
+ - expiresAt
4907
+ - proof
4908
+ - version
4909
+ type: object
4821
4910
  HandoverState:
4822
4911
  enum:
4823
4912
  - NOT_STARTED
@@ -14672,6 +14761,30 @@ components:
14672
14761
  - $ref: "#/components/schemas/DomainBinding"
14673
14762
  PostOrganizationsByOrganizationIdPublicationsByPublicationIdHandoverCancelResponse:
14674
14763
  $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPublicationsByPublicationIdHandoverResponse"
14764
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdHandoverClaimsByClaimIdRevokeResponse:
14765
+ $ref: "#/components/schemas/HandoverClaim"
14766
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdHandoverClaimsRequest:
14767
+ additionalProperties: false
14768
+ properties:
14769
+ channelId:
14770
+ $ref: "#/components/schemas/YoutubeChannelId"
14771
+ expiresInDays:
14772
+ default: 30
14773
+ description: Days until the link expires; at most 365.
14774
+ maximum: 365
14775
+ minimum: 1
14776
+ type: integer
14777
+ proof:
14778
+ $ref: "#/components/schemas/CreatorClaimProofKind"
14779
+ replace:
14780
+ default: false
14781
+ description: Set to revoke the site's OPEN claim and issue this one in its place. Without it, an OPEN claim answers `409 INVALID_SOURCE_STATE`.
14782
+ type: boolean
14783
+ required:
14784
+ - proof
14785
+ type: object
14786
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdHandoverClaimsResponse:
14787
+ $ref: "#/components/schemas/HandoverClaim"
14675
14788
  PostOrganizationsByOrganizationIdPublicationsByPublicationIdHandoverRequest:
14676
14789
  additionalProperties: false
14677
14790
  properties:
@@ -15645,7 +15758,7 @@ components:
15645
15758
  additionalProperties: false
15646
15759
  properties:
15647
15760
  claimUrl:
15648
- description: "Present only in the response that issued the claim link, or re-issued it while the claim is still OPEN. Save it then: it is never shown again."
15761
+ description: Present only in the response that issued the claim link, or re-issued it while the claim is still OPEN. While the claim is OPEN the site owner can read the link again from `GET .../handover-claims`; once it is VERIFIED or CLAIMED it is gone.
15649
15762
  format: uri
15650
15763
  maxLength: 2048
15651
15764
  pattern: ^https://[^\s]+$
@@ -20006,7 +20119,7 @@ paths:
20006
20119
  /v2/claims/{token}:
20007
20120
  get:
20008
20121
  description: |
20009
- Needs a signed-in session; signed out is `401 AUTHENTICATION_REQUIRED` and reveals nothing. Returns the channel and site the link offers and the ways to prove the channel is the caller's. `404 CLAIM_NOT_FOUND` for an unknown or revoked link, `410 CLAIM_EXPIRED` once the demo is past its archive date. Rate limited per caller (`429 RATE_LIMITED`).
20122
+ Needs a signed-in session; signed out is `401 AUTHENTICATION_REQUIRED` and reveals nothing. Returns the site the link offers, what the claimant must show (`proof`) and the ways to show it. For `proof.kind` `YOUTUBE_CHANNEL` the response carries the `channel` and the `methods` that prove it is the caller's. For `LINK_ONLY` there is no channel and `methods` is empty: the caller goes straight to `POST /v2/claims/{token}:accept` after signing in. A response without `proof` is a `YOUTUBE_CHANNEL` claim. `organizationId` and `publicationId` are also returned to the person who issued the link (the site owner reading their own link), who owns the site; accepting it is refused with `409 INVALID_SOURCE_STATE`. `404 CLAIM_NOT_FOUND` for an unknown or revoked link, `410 CLAIM_EXPIRED` once the claim is past its expiry (a demo site's archive date, or the `expiresAt` the site owner chose). Rate limited per caller (`429 RATE_LIMITED`).
20010
20123
  operationId: getClaimsByToken
20011
20124
  parameters:
20012
20125
  - $ref: "#/components/parameters/XCorrelationId"
@@ -20035,6 +20148,10 @@ paths:
20035
20148
  methods:
20036
20149
  - GOOGLE
20037
20150
  - DESCRIPTION_CODE
20151
+ proof:
20152
+ channelId: UCabcdefghijklmnopqrstuv
20153
+ handle: "@mayacooks"
20154
+ kind: YOUTUBE_CHANNEL
20038
20155
  site:
20039
20156
  name: Maya Cooks
20040
20157
  url: https://rathnasdemo.github.io/maya-cooks/
@@ -20242,7 +20359,7 @@ paths:
20242
20359
  /v2/claims/{token}/description-code:
20243
20360
  post:
20244
20361
  description: |
20245
- Needs a signed-in session. Issues a one-time code to put in the YouTube channel description, valid 24 hours; a new request replaces an unexpired code issued to the same person. `404 CLAIM_NOT_FOUND`, `410 CLAIM_EXPIRED`, `409 CLAIM_ALREADY_CLAIMED`, and `409 CLAIM_CODE_PENDING` when a description code issued to another person for this claim is still pending: it expires at the time in the problem detail, so verify with Google instead, or try again after it expires. Rate limited (`429 RATE_LIMITED`).
20362
+ Needs a signed-in session. Issues a one-time code to put in the YouTube channel description, valid 24 hours; a new request replaces an unexpired code issued to the same person. `404 CLAIM_NOT_FOUND`, `410 CLAIM_EXPIRED`, `409 CLAIM_ALREADY_CLAIMED`, and `409 CLAIM_CODE_PENDING` when a description code issued to another person for this claim is still pending: it expires at the time in the problem detail, so verify with Google instead, or try again after it expires. A `LINK_ONLY` claim has no channel to prove, so this answers `400 VALIDATION_FAILED` for one. Rate limited (`429 RATE_LIMITED`).
20246
20363
  operationId: postClaimsByTokenDescriptionCode
20247
20364
  parameters:
20248
20365
  - $ref: "#/components/parameters/XCorrelationId"
@@ -20513,7 +20630,7 @@ paths:
20513
20630
  /v2/claims/{token}/description-code:check:
20514
20631
  post:
20515
20632
  description: |
20516
- Needs a signed-in session. Reads the channel description through the YouTube Data API and, when it contains the issued code, marks the claim verified for this person and spends the code. A code that is not there yet is `200` with `verified: false` and a `reason`, not a problem. `503 DEPENDENCY_UNAVAILABLE` when YouTube cannot be reached. Rate limited (`429 RATE_LIMITED`).
20633
+ Needs a signed-in session. Reads the channel description through the YouTube Data API and, when it contains the issued code, marks the claim verified for this person and spends the code. A code that is not there yet is `200` with `verified: false` and a `reason`, not a problem. `503 DEPENDENCY_UNAVAILABLE` when YouTube cannot be reached. A `LINK_ONLY` claim has no channel to prove, so this answers `400 VALIDATION_FAILED` for one. Rate limited (`429 RATE_LIMITED`).
20517
20634
  operationId: postClaimsByTokenDescriptionCodeCheck
20518
20635
  parameters:
20519
20636
  - $ref: "#/components/parameters/XCorrelationId"
@@ -20797,7 +20914,7 @@ paths:
20797
20914
  /v2/claims/{token}/google:start:
20798
20915
  post:
20799
20916
  description: |
20800
- Needs a signed-in session. Returns the Google authorize URL for one single-use, PKCE-protected transaction bound to this session; the callback is `GET /v2/callbacks/google/claim`. `404 CLAIM_NOT_FOUND`, `410 CLAIM_EXPIRED`, `409 CLAIM_ALREADY_CLAIMED` when the site was taken. Rate limited (`429 RATE_LIMITED`).
20917
+ Needs a signed-in session. Returns the Google authorize URL for one single-use, PKCE-protected transaction bound to this session; the callback is `GET /v2/callbacks/google/claim`. `404 CLAIM_NOT_FOUND`, `410 CLAIM_EXPIRED`, `409 CLAIM_ALREADY_CLAIMED` when the site was taken. A `LINK_ONLY` claim has no channel to prove, so this answers `400 VALIDATION_FAILED` for one. Rate limited (`429 RATE_LIMITED`).
20801
20918
  operationId: postClaimsByTokenGoogleStart
20802
20919
  parameters:
20803
20920
  - $ref: "#/components/parameters/XCorrelationId"
@@ -21052,7 +21169,7 @@ paths:
21052
21169
  /v2/claims/{token}:accept:
21053
21170
  post:
21054
21171
  description: |
21055
- Needs recent authentication. Requires the claim to be verified by this same person (`409 CLAIM_NOT_VERIFIED` otherwise), then makes the caller the owner of the demo organisation. Repeating the call after success returns the same organisation. `409 CLAIM_ALREADY_CLAIMED` when another person claimed it; `410 CLAIM_EXPIRED`. An API key is always refused.
21172
+ Needs recent authentication. For a `YOUTUBE_CHANNEL` claim it requires the claim to be verified by this same person (`409 CLAIM_NOT_VERIFIED` otherwise); a `LINK_ONLY` claim has nothing to verify and is accepted from `OPEN`. Then it makes the caller the owner of the site's organisation, which hands the site over. Repeating the call after success returns the same organisation. `409 INVALID_SOURCE_STATE` when the caller is the person who issued the claim or already owns the site: nobody can claim their own site. `409 CLAIM_ALREADY_CLAIMED` when another person claimed it; `410 CLAIM_EXPIRED`. An API key is always refused.
21056
21173
  operationId: postClaimsByTokenAccept
21057
21174
  parameters:
21058
21175
  - $ref: "#/components/parameters/XCorrelationId"
@@ -21237,9 +21354,22 @@ paths:
21237
21354
  status: 409
21238
21355
  title: CLAIM_NOT_VERIFIED
21239
21356
  type: urn:gala:problem:claim-not-verified
21357
+ INVALID_SOURCE_STATE:
21358
+ summary: INVALID_SOURCE_STATE
21359
+ value:
21360
+ code: INVALID_SOURCE_STATE
21361
+ correlationId: 018f0000-0000-7000-8000-000000000001
21362
+ detail: See the operation contract.
21363
+ errors: []
21364
+ retryable: false
21365
+ schemaId: urn:gala:schema:problem:2.0.0
21366
+ schemaVersion: 2.0.0
21367
+ status: 409
21368
+ title: INVALID_SOURCE_STATE
21369
+ type: urn:gala:problem:invalid-source-state
21240
21370
  schema:
21241
21371
  $ref: "#/components/schemas/Problem"
21242
- description: CLAIM_ALREADY_CLAIMED, CLAIM_NOT_VERIFIED
21372
+ description: CLAIM_ALREADY_CLAIMED, CLAIM_NOT_VERIFIED, INVALID_SOURCE_STATE
21243
21373
  headers:
21244
21374
  Cache-Control:
21245
21375
  $ref: "#/components/headers/CacheControlNoStore"
@@ -21248,6 +21378,7 @@ paths:
21248
21378
  x-gala-problem-codes:
21249
21379
  - CLAIM_ALREADY_CLAIMED
21250
21380
  - CLAIM_NOT_VERIFIED
21381
+ - INVALID_SOURCE_STATE
21251
21382
  "410":
21252
21383
  content:
21253
21384
  application/problem+json:
@@ -21327,12 +21458,14 @@ paths:
21327
21458
  - CLAIM_EXPIRED
21328
21459
  - CLAIM_NOT_FOUND
21329
21460
  - CLAIM_NOT_VERIFIED
21461
+ - INVALID_SOURCE_STATE
21330
21462
  - RATE_LIMITED
21331
21463
  - REAUTH_REQUIRED
21332
21464
  - VALIDATION_FAILED
21333
21465
  x-gala-replay-identity: natural-idempotent-state
21334
21466
  x-gala-state-guards:
21335
- - NONE
21467
+ - CreatorClaim:OPEN -> CLAIMED
21468
+ - CreatorClaim:VERIFIED -> CLAIMED
21336
21469
  x-gala-success-category: protocol
21337
21470
  x-gala-tenant-scope: NONE
21338
21471
  /v2/github/app:
@@ -38402,21 +38535,762 @@ paths:
38402
38535
  - RESOURCE_NOT_FOUND
38403
38536
  security:
38404
38537
  - browserSession: []
38405
- summary: read the Prism generation policy
38538
+ summary: read the Prism generation policy
38539
+ tags:
38540
+ - prism
38541
+ x-gala-activation-gate: MVP
38542
+ x-gala-activation-guards:
38543
+ - NONE
38544
+ x-gala-capability-key: publication.source.write
38545
+ x-gala-concurrency: authorization-and-publication-epochs
38546
+ x-gala-conditional-capabilities: []
38547
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
38548
+ x-gala-nullability: required-and-nullable-are-explicit
38549
+ x-gala-purpose: read the Prism generation policy
38550
+ x-gala-reachable-problems:
38551
+ - AUTHENTICATION_REQUIRED
38552
+ - AUTHORIZATION_DENIED
38553
+ - RESOURCE_NOT_FOUND
38554
+ - VALIDATION_FAILED
38555
+ x-gala-replay-identity: safe-query
38556
+ x-gala-state-guards:
38557
+ - NONE
38558
+ x-gala-success-category: query
38559
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
38560
+ /v2/organizations/{organizationId}/publications/{publicationId}/handover:
38561
+ get:
38562
+ description: |
38563
+ The organisation owner, with recent authentication; an API key is always refused. Reports the handover of a demo site into the creator's own GitHub account: its state, the target, whether the Galascribe App is installed on the target, each step and the address the site will have. `200` with `state: NOT_STARTED` (empty `steps`, `version` 0, no `target`, `appInstalledOnTarget` or `siteUrlAfter`) for a demo publication (one with a demo-site record) that has no handover yet; `200` with the latest handover otherwise, including `DONE`, `FAILED` and `CANCELLED`; `404 RESOURCE_NOT_FOUND` only for a publication that is not a demo publication.
38564
+ operationId: getOrganizationsByOrganizationIdPublicationsByPublicationIdHandover
38565
+ parameters:
38566
+ - $ref: "#/components/parameters/XCorrelationId"
38567
+ - example: 018f0000-0000-7000-8000-000000000001
38568
+ in: path
38569
+ name: organizationId
38570
+ required: true
38571
+ schema:
38572
+ format: uuid
38573
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
38574
+ type: string
38575
+ - example: 018f0000-0000-7000-8000-000000000001
38576
+ in: path
38577
+ name: publicationId
38578
+ required: true
38579
+ schema:
38580
+ format: uuid
38581
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
38582
+ type: string
38583
+ responses:
38584
+ "200":
38585
+ content:
38586
+ application/json:
38587
+ examples:
38588
+ nominal:
38589
+ summary: Nominal successful response
38590
+ value:
38591
+ appInstalledOnTarget: true
38592
+ siteUrlAfter: https://creator-org.github.io/maya-cooks/
38593
+ state: TRANSFER_STARTED
38594
+ steps:
38595
+ - name: FINALIZE_CHANGE
38596
+ state: DONE
38597
+ - name: TRANSFER
38598
+ state: RUNNING
38599
+ - name: RELINK
38600
+ state: PENDING
38601
+ - name: PAGES
38602
+ state: PENDING
38603
+ - name: PUBLISH
38604
+ state: PENDING
38605
+ target:
38606
+ kind: ORGANIZATION
38607
+ ownerLogin: creator-org
38608
+ version: 1
38609
+ notStarted:
38610
+ summary: Demo publication with no handover yet
38611
+ value:
38612
+ state: NOT_STARTED
38613
+ steps: []
38614
+ version: 0
38615
+ schema:
38616
+ $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPublicationsByPublicationIdHandoverResponse"
38617
+ description: read publication handover succeeded
38618
+ headers:
38619
+ Cache-Control:
38620
+ $ref: "#/components/headers/CacheControlNoStore"
38621
+ X-Correlation-Id:
38622
+ $ref: "#/components/headers/XCorrelationId"
38623
+ "400":
38624
+ content:
38625
+ application/problem+json:
38626
+ examples:
38627
+ VALIDATION_FAILED:
38628
+ summary: VALIDATION_FAILED
38629
+ value:
38630
+ code: VALIDATION_FAILED
38631
+ correlationId: 018f0000-0000-7000-8000-000000000001
38632
+ detail: See the operation contract.
38633
+ errors: []
38634
+ retryable: false
38635
+ schemaId: urn:gala:schema:problem:2.0.0
38636
+ schemaVersion: 2.0.0
38637
+ status: 400
38638
+ title: VALIDATION_FAILED
38639
+ type: urn:gala:problem:validation-failed
38640
+ schema:
38641
+ $ref: "#/components/schemas/Problem"
38642
+ description: VALIDATION_FAILED
38643
+ headers:
38644
+ Cache-Control:
38645
+ $ref: "#/components/headers/CacheControlNoStore"
38646
+ X-Correlation-Id:
38647
+ $ref: "#/components/headers/XCorrelationId"
38648
+ x-gala-problem-codes:
38649
+ - VALIDATION_FAILED
38650
+ "401":
38651
+ content:
38652
+ application/problem+json:
38653
+ examples:
38654
+ AUTHENTICATION_REQUIRED:
38655
+ summary: AUTHENTICATION_REQUIRED
38656
+ value:
38657
+ code: AUTHENTICATION_REQUIRED
38658
+ correlationId: 018f0000-0000-7000-8000-000000000001
38659
+ detail: See the operation contract.
38660
+ errors: []
38661
+ retryable: false
38662
+ schemaId: urn:gala:schema:problem:2.0.0
38663
+ schemaVersion: 2.0.0
38664
+ status: 401
38665
+ title: AUTHENTICATION_REQUIRED
38666
+ type: urn:gala:problem:authentication-required
38667
+ REAUTH_REQUIRED:
38668
+ summary: REAUTH_REQUIRED
38669
+ value:
38670
+ code: REAUTH_REQUIRED
38671
+ correlationId: 018f0000-0000-7000-8000-000000000001
38672
+ detail: See the operation contract.
38673
+ errors: []
38674
+ retryable: false
38675
+ schemaId: urn:gala:schema:problem:2.0.0
38676
+ schemaVersion: 2.0.0
38677
+ status: 401
38678
+ title: REAUTH_REQUIRED
38679
+ type: urn:gala:problem:reauth-required
38680
+ schema:
38681
+ $ref: "#/components/schemas/Problem"
38682
+ description: AUTHENTICATION_REQUIRED, REAUTH_REQUIRED
38683
+ headers:
38684
+ Cache-Control:
38685
+ $ref: "#/components/headers/CacheControlNoStore"
38686
+ X-Correlation-Id:
38687
+ $ref: "#/components/headers/XCorrelationId"
38688
+ x-gala-problem-codes:
38689
+ - AUTHENTICATION_REQUIRED
38690
+ - REAUTH_REQUIRED
38691
+ "403":
38692
+ content:
38693
+ application/problem+json:
38694
+ examples:
38695
+ AUTHORIZATION_DENIED:
38696
+ summary: AUTHORIZATION_DENIED
38697
+ value:
38698
+ code: AUTHORIZATION_DENIED
38699
+ correlationId: 018f0000-0000-7000-8000-000000000001
38700
+ detail: See the operation contract.
38701
+ errors: []
38702
+ retryable: false
38703
+ schemaId: urn:gala:schema:problem:2.0.0
38704
+ schemaVersion: 2.0.0
38705
+ status: 403
38706
+ title: AUTHORIZATION_DENIED
38707
+ type: urn:gala:problem:authorization-denied
38708
+ schema:
38709
+ $ref: "#/components/schemas/Problem"
38710
+ description: AUTHORIZATION_DENIED
38711
+ headers:
38712
+ Cache-Control:
38713
+ $ref: "#/components/headers/CacheControlNoStore"
38714
+ X-Correlation-Id:
38715
+ $ref: "#/components/headers/XCorrelationId"
38716
+ x-gala-problem-codes:
38717
+ - AUTHORIZATION_DENIED
38718
+ "404":
38719
+ content:
38720
+ application/problem+json:
38721
+ examples:
38722
+ RESOURCE_NOT_FOUND:
38723
+ summary: RESOURCE_NOT_FOUND
38724
+ value:
38725
+ code: RESOURCE_NOT_FOUND
38726
+ correlationId: 018f0000-0000-7000-8000-000000000001
38727
+ detail: See the operation contract.
38728
+ errors: []
38729
+ retryable: false
38730
+ schemaId: urn:gala:schema:problem:2.0.0
38731
+ schemaVersion: 2.0.0
38732
+ status: 404
38733
+ title: RESOURCE_NOT_FOUND
38734
+ type: urn:gala:problem:resource-not-found
38735
+ schema:
38736
+ $ref: "#/components/schemas/Problem"
38737
+ description: RESOURCE_NOT_FOUND
38738
+ headers:
38739
+ Cache-Control:
38740
+ $ref: "#/components/headers/CacheControlNoStore"
38741
+ X-Correlation-Id:
38742
+ $ref: "#/components/headers/XCorrelationId"
38743
+ x-gala-problem-codes:
38744
+ - RESOURCE_NOT_FOUND
38745
+ security:
38746
+ - browserSession: []
38747
+ summary: read publication handover
38748
+ tags:
38749
+ - organizations
38750
+ x-gala-action-grant: none
38751
+ x-gala-activation-gate: MVP
38752
+ x-gala-activation-guards:
38753
+ - NONE
38754
+ x-gala-assurance-class: RECENT_AUTHENTICATION
38755
+ x-gala-capability-key: publication.handover.manage
38756
+ x-gala-concurrency: none
38757
+ x-gala-conditional-capabilities: []
38758
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
38759
+ x-gala-nullability: required-and-nullable-are-explicit
38760
+ x-gala-purpose: read publication handover
38761
+ x-gala-reachable-problems:
38762
+ - AUTHENTICATION_REQUIRED
38763
+ - AUTHORIZATION_DENIED
38764
+ - REAUTH_REQUIRED
38765
+ - RESOURCE_NOT_FOUND
38766
+ - VALIDATION_FAILED
38767
+ x-gala-replay-identity: safe-query
38768
+ x-gala-state-guards:
38769
+ - NONE
38770
+ x-gala-success-category: query
38771
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
38772
+ post:
38773
+ description: |
38774
+ The organisation owner, with recent authentication; an API key is always refused. Moves a demo site's repository into `targetOwnerLogin` (a person or an organisation where the Galascribe App is installed): plans and confirms the finalize change in the caller's session, then starts the GitHub transfer. `202` accepts; `GET` reports progress. `409 HANDOVER_EXISTS` while one is live, `409 HANDOVER_TARGET_NOT_INSTALLED` when the App is not installed on the target, `503 DEPENDENCY_UNAVAILABLE` when GitHub cannot be reached. `404 RESOURCE_NOT_FOUND` when the publication is not a demo site. The response never carries `state: NOT_STARTED`.
38775
+ operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdHandover
38776
+ parameters:
38777
+ - $ref: "#/components/parameters/XCorrelationId"
38778
+ - example: 018f0000-0000-7000-8000-000000000001
38779
+ in: path
38780
+ name: organizationId
38781
+ required: true
38782
+ schema:
38783
+ format: uuid
38784
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
38785
+ type: string
38786
+ - example: 018f0000-0000-7000-8000-000000000001
38787
+ in: path
38788
+ name: publicationId
38789
+ required: true
38790
+ schema:
38791
+ format: uuid
38792
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
38793
+ type: string
38794
+ - $ref: "#/components/parameters/IdempotencyKey"
38795
+ - $ref: "#/components/parameters/XCsrfToken"
38796
+ requestBody:
38797
+ content:
38798
+ application/json:
38799
+ examples:
38800
+ nominal:
38801
+ summary: Nominal valid request
38802
+ value:
38803
+ targetOwnerLogin: creator-org
38804
+ schema:
38805
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdHandoverRequest"
38806
+ required: true
38807
+ responses:
38808
+ "202":
38809
+ content:
38810
+ application/json:
38811
+ examples:
38812
+ nominal:
38813
+ summary: Nominal successful response
38814
+ value:
38815
+ appInstalledOnTarget: true
38816
+ siteUrlAfter: https://creator-org.github.io/maya-cooks/
38817
+ state: REQUESTED
38818
+ steps:
38819
+ - name: FINALIZE_CHANGE
38820
+ state: DONE
38821
+ - name: TRANSFER
38822
+ state: RUNNING
38823
+ - name: RELINK
38824
+ state: PENDING
38825
+ - name: PAGES
38826
+ state: PENDING
38827
+ - name: PUBLISH
38828
+ state: PENDING
38829
+ target:
38830
+ kind: ORGANIZATION
38831
+ ownerLogin: creator-org
38832
+ version: 1
38833
+ schema:
38834
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdHandoverResponse"
38835
+ description: start publication handover succeeded
38836
+ headers:
38837
+ Cache-Control:
38838
+ $ref: "#/components/headers/CacheControlNoStore"
38839
+ X-Correlation-Id:
38840
+ $ref: "#/components/headers/XCorrelationId"
38841
+ "400":
38842
+ content:
38843
+ application/problem+json:
38844
+ examples:
38845
+ REQUEST_FIELD_UNKNOWN:
38846
+ summary: REQUEST_FIELD_UNKNOWN
38847
+ value:
38848
+ code: REQUEST_FIELD_UNKNOWN
38849
+ correlationId: 018f0000-0000-7000-8000-000000000001
38850
+ detail: See the operation contract.
38851
+ errors: []
38852
+ retryable: false
38853
+ schemaId: urn:gala:schema:problem:2.0.0
38854
+ schemaVersion: 2.0.0
38855
+ status: 400
38856
+ title: REQUEST_FIELD_UNKNOWN
38857
+ type: urn:gala:problem:request-field-unknown
38858
+ VALIDATION_FAILED:
38859
+ summary: VALIDATION_FAILED
38860
+ value:
38861
+ code: VALIDATION_FAILED
38862
+ correlationId: 018f0000-0000-7000-8000-000000000001
38863
+ detail: See the operation contract.
38864
+ errors: []
38865
+ retryable: false
38866
+ schemaId: urn:gala:schema:problem:2.0.0
38867
+ schemaVersion: 2.0.0
38868
+ status: 400
38869
+ title: VALIDATION_FAILED
38870
+ type: urn:gala:problem:validation-failed
38871
+ schema:
38872
+ $ref: "#/components/schemas/Problem"
38873
+ description: REQUEST_FIELD_UNKNOWN, VALIDATION_FAILED
38874
+ headers:
38875
+ Cache-Control:
38876
+ $ref: "#/components/headers/CacheControlNoStore"
38877
+ X-Correlation-Id:
38878
+ $ref: "#/components/headers/XCorrelationId"
38879
+ x-gala-problem-codes:
38880
+ - REQUEST_FIELD_UNKNOWN
38881
+ - VALIDATION_FAILED
38882
+ "401":
38883
+ content:
38884
+ application/problem+json:
38885
+ examples:
38886
+ AUTHENTICATION_REQUIRED:
38887
+ summary: AUTHENTICATION_REQUIRED
38888
+ value:
38889
+ code: AUTHENTICATION_REQUIRED
38890
+ correlationId: 018f0000-0000-7000-8000-000000000001
38891
+ detail: See the operation contract.
38892
+ errors: []
38893
+ retryable: false
38894
+ schemaId: urn:gala:schema:problem:2.0.0
38895
+ schemaVersion: 2.0.0
38896
+ status: 401
38897
+ title: AUTHENTICATION_REQUIRED
38898
+ type: urn:gala:problem:authentication-required
38899
+ REAUTH_REQUIRED:
38900
+ summary: REAUTH_REQUIRED
38901
+ value:
38902
+ code: REAUTH_REQUIRED
38903
+ correlationId: 018f0000-0000-7000-8000-000000000001
38904
+ detail: See the operation contract.
38905
+ errors: []
38906
+ retryable: false
38907
+ schemaId: urn:gala:schema:problem:2.0.0
38908
+ schemaVersion: 2.0.0
38909
+ status: 401
38910
+ title: REAUTH_REQUIRED
38911
+ type: urn:gala:problem:reauth-required
38912
+ schema:
38913
+ $ref: "#/components/schemas/Problem"
38914
+ description: AUTHENTICATION_REQUIRED, REAUTH_REQUIRED
38915
+ headers:
38916
+ Cache-Control:
38917
+ $ref: "#/components/headers/CacheControlNoStore"
38918
+ X-Correlation-Id:
38919
+ $ref: "#/components/headers/XCorrelationId"
38920
+ x-gala-problem-codes:
38921
+ - AUTHENTICATION_REQUIRED
38922
+ - REAUTH_REQUIRED
38923
+ "403":
38924
+ content:
38925
+ application/problem+json:
38926
+ examples:
38927
+ AUTHORIZATION_DENIED:
38928
+ summary: AUTHORIZATION_DENIED
38929
+ value:
38930
+ code: AUTHORIZATION_DENIED
38931
+ correlationId: 018f0000-0000-7000-8000-000000000001
38932
+ detail: See the operation contract.
38933
+ errors: []
38934
+ retryable: false
38935
+ schemaId: urn:gala:schema:problem:2.0.0
38936
+ schemaVersion: 2.0.0
38937
+ status: 403
38938
+ title: AUTHORIZATION_DENIED
38939
+ type: urn:gala:problem:authorization-denied
38940
+ schema:
38941
+ $ref: "#/components/schemas/Problem"
38942
+ description: AUTHORIZATION_DENIED
38943
+ headers:
38944
+ Cache-Control:
38945
+ $ref: "#/components/headers/CacheControlNoStore"
38946
+ X-Correlation-Id:
38947
+ $ref: "#/components/headers/XCorrelationId"
38948
+ x-gala-problem-codes:
38949
+ - AUTHORIZATION_DENIED
38950
+ "404":
38951
+ content:
38952
+ application/problem+json:
38953
+ examples:
38954
+ RESOURCE_NOT_FOUND:
38955
+ summary: RESOURCE_NOT_FOUND
38956
+ value:
38957
+ code: RESOURCE_NOT_FOUND
38958
+ correlationId: 018f0000-0000-7000-8000-000000000001
38959
+ detail: See the operation contract.
38960
+ errors: []
38961
+ retryable: false
38962
+ schemaId: urn:gala:schema:problem:2.0.0
38963
+ schemaVersion: 2.0.0
38964
+ status: 404
38965
+ title: RESOURCE_NOT_FOUND
38966
+ type: urn:gala:problem:resource-not-found
38967
+ schema:
38968
+ $ref: "#/components/schemas/Problem"
38969
+ description: RESOURCE_NOT_FOUND
38970
+ headers:
38971
+ Cache-Control:
38972
+ $ref: "#/components/headers/CacheControlNoStore"
38973
+ X-Correlation-Id:
38974
+ $ref: "#/components/headers/XCorrelationId"
38975
+ x-gala-problem-codes:
38976
+ - RESOURCE_NOT_FOUND
38977
+ "409":
38978
+ content:
38979
+ application/problem+json:
38980
+ examples:
38981
+ COMMAND_REPLAY_CONFLICT:
38982
+ summary: COMMAND_REPLAY_CONFLICT
38983
+ value:
38984
+ code: COMMAND_REPLAY_CONFLICT
38985
+ correlationId: 018f0000-0000-7000-8000-000000000001
38986
+ detail: See the operation contract.
38987
+ errors: []
38988
+ retryable: false
38989
+ schemaId: urn:gala:schema:problem:2.0.0
38990
+ schemaVersion: 2.0.0
38991
+ status: 409
38992
+ title: COMMAND_REPLAY_CONFLICT
38993
+ type: urn:gala:problem:command-replay-conflict
38994
+ HANDOVER_EXISTS:
38995
+ summary: HANDOVER_EXISTS
38996
+ value:
38997
+ code: HANDOVER_EXISTS
38998
+ correlationId: 018f0000-0000-7000-8000-000000000001
38999
+ detail: See the operation contract.
39000
+ errors: []
39001
+ retryable: false
39002
+ schemaId: urn:gala:schema:problem:2.0.0
39003
+ schemaVersion: 2.0.0
39004
+ status: 409
39005
+ title: HANDOVER_EXISTS
39006
+ type: urn:gala:problem:handover-exists
39007
+ HANDOVER_TARGET_NOT_INSTALLED:
39008
+ summary: HANDOVER_TARGET_NOT_INSTALLED
39009
+ value:
39010
+ code: HANDOVER_TARGET_NOT_INSTALLED
39011
+ correlationId: 018f0000-0000-7000-8000-000000000001
39012
+ detail: See the operation contract.
39013
+ errors: []
39014
+ retryable: false
39015
+ schemaId: urn:gala:schema:problem:2.0.0
39016
+ schemaVersion: 2.0.0
39017
+ status: 409
39018
+ title: HANDOVER_TARGET_NOT_INSTALLED
39019
+ type: urn:gala:problem:handover-target-not-installed
39020
+ schema:
39021
+ $ref: "#/components/schemas/Problem"
39022
+ description: COMMAND_REPLAY_CONFLICT, HANDOVER_EXISTS, HANDOVER_TARGET_NOT_INSTALLED
39023
+ headers:
39024
+ Cache-Control:
39025
+ $ref: "#/components/headers/CacheControlNoStore"
39026
+ X-Correlation-Id:
39027
+ $ref: "#/components/headers/XCorrelationId"
39028
+ x-gala-problem-codes:
39029
+ - COMMAND_REPLAY_CONFLICT
39030
+ - HANDOVER_EXISTS
39031
+ - HANDOVER_TARGET_NOT_INSTALLED
39032
+ "503":
39033
+ content:
39034
+ application/problem+json:
39035
+ examples:
39036
+ DEPENDENCY_UNAVAILABLE:
39037
+ summary: DEPENDENCY_UNAVAILABLE
39038
+ value:
39039
+ code: DEPENDENCY_UNAVAILABLE
39040
+ correlationId: 018f0000-0000-7000-8000-000000000001
39041
+ detail: See the operation contract.
39042
+ errors: []
39043
+ retryable: true
39044
+ schemaId: urn:gala:schema:problem:2.0.0
39045
+ schemaVersion: 2.0.0
39046
+ status: 503
39047
+ title: DEPENDENCY_UNAVAILABLE
39048
+ type: urn:gala:problem:dependency-unavailable
39049
+ schema:
39050
+ $ref: "#/components/schemas/Problem"
39051
+ description: DEPENDENCY_UNAVAILABLE
39052
+ headers:
39053
+ Cache-Control:
39054
+ $ref: "#/components/headers/CacheControlNoStore"
39055
+ X-Correlation-Id:
39056
+ $ref: "#/components/headers/XCorrelationId"
39057
+ x-gala-problem-codes:
39058
+ - DEPENDENCY_UNAVAILABLE
39059
+ security:
39060
+ - browserSession: []
39061
+ summary: start publication handover
39062
+ tags:
39063
+ - organizations
39064
+ x-gala-action-grant: none
39065
+ x-gala-activation-gate: MVP
39066
+ x-gala-activation-guards:
39067
+ - NONE
39068
+ x-gala-assurance-class: RECENT_AUTHENTICATION
39069
+ x-gala-capability-key: publication.handover.manage
39070
+ x-gala-concurrency: none
39071
+ x-gala-conditional-capabilities: []
39072
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
39073
+ x-gala-nullability: required-and-nullable-are-explicit
39074
+ x-gala-purpose: start publication handover
39075
+ x-gala-reachable-problems:
39076
+ - AUTHENTICATION_REQUIRED
39077
+ - AUTHORIZATION_DENIED
39078
+ - COMMAND_REPLAY_CONFLICT
39079
+ - DEPENDENCY_UNAVAILABLE
39080
+ - HANDOVER_EXISTS
39081
+ - HANDOVER_TARGET_NOT_INSTALLED
39082
+ - REAUTH_REQUIRED
39083
+ - REQUEST_FIELD_UNKNOWN
39084
+ - RESOURCE_NOT_FOUND
39085
+ - VALIDATION_FAILED
39086
+ x-gala-replay-identity: idempotency-key
39087
+ x-gala-state-guards:
39088
+ - NONE
39089
+ x-gala-success-category: async
39090
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
39091
+ /v2/organizations/{organizationId}/publications/{publicationId}/handover-claims:
39092
+ get:
39093
+ description: |
39094
+ The organisation owner, with recent authentication; an API key is always refused. Lists the claim links that hand this site to whoever accepts them, newest first and in every state (`OPEN`, `VERIFIED`, `CLAIMED`, `EXPIRED`, `REVOKED`), at most the 50 most recent. `claimUrl` is present only on an `OPEN` claim whose token the API holds sealed, so the owner can copy it again; it is a bearer secret and is never returned for any other state. A claim issued before 3.14.0 may have no `claimUrl` until the owner re-issues it with `replace`. `claimedBy` is present only on a `CLAIMED` claim. A claim past `expiresAt` reads `EXPIRED`. Demo sites are owned by the operator's organisation until claimed, so the operator finds a demo site's claim link here, in that site's Settings. `404 RESOURCE_NOT_FOUND` for a publication that is not in the organisation.
39095
+ operationId: getOrganizationsByOrganizationIdPublicationsByPublicationIdHandoverClaims
39096
+ parameters:
39097
+ - $ref: "#/components/parameters/XCorrelationId"
39098
+ - example: 018f0000-0000-7000-8000-000000000001
39099
+ in: path
39100
+ name: organizationId
39101
+ required: true
39102
+ schema:
39103
+ format: uuid
39104
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
39105
+ type: string
39106
+ - example: 018f0000-0000-7000-8000-000000000001
39107
+ in: path
39108
+ name: publicationId
39109
+ required: true
39110
+ schema:
39111
+ format: uuid
39112
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
39113
+ type: string
39114
+ responses:
39115
+ "200":
39116
+ content:
39117
+ application/json:
39118
+ examples:
39119
+ nominal:
39120
+ summary: Nominal successful response
39121
+ value:
39122
+ items:
39123
+ - claimId: 018f0000-0000-7000-8000-000000000001
39124
+ claimUrl: https://app.galascribe.com/claim/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQ
39125
+ createdAt: "2026-10-17T12:00:00.000Z"
39126
+ expiresAt: "2026-11-16T12:00:00.000Z"
39127
+ proof:
39128
+ kind: LINK_ONLY
39129
+ state: OPEN
39130
+ version: 0
39131
+ - claimId: 018f0000-0000-7000-8000-000000000002
39132
+ claimedAt: "2026-10-20T09:30:00.000Z"
39133
+ claimedBy:
39134
+ displayName: Maya Cooks
39135
+ login: mayacooks
39136
+ createdAt: "2026-10-15T12:00:00.000Z"
39137
+ expiresAt: "2026-11-14T12:00:00.000Z"
39138
+ proof:
39139
+ channelId: UCabcdefghijklmnopqrstuv
39140
+ handle: "@mayacooks"
39141
+ kind: YOUTUBE_CHANNEL
39142
+ state: CLAIMED
39143
+ version: 2
39144
+ schema:
39145
+ $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPublicationsByPublicationIdHandoverClaimsResponse"
39146
+ description: list site handover claims succeeded
39147
+ headers:
39148
+ Cache-Control:
39149
+ $ref: "#/components/headers/CacheControlNoStore"
39150
+ X-Correlation-Id:
39151
+ $ref: "#/components/headers/XCorrelationId"
39152
+ "400":
39153
+ content:
39154
+ application/problem+json:
39155
+ examples:
39156
+ VALIDATION_FAILED:
39157
+ summary: VALIDATION_FAILED
39158
+ value:
39159
+ code: VALIDATION_FAILED
39160
+ correlationId: 018f0000-0000-7000-8000-000000000001
39161
+ detail: See the operation contract.
39162
+ errors: []
39163
+ retryable: false
39164
+ schemaId: urn:gala:schema:problem:2.0.0
39165
+ schemaVersion: 2.0.0
39166
+ status: 400
39167
+ title: VALIDATION_FAILED
39168
+ type: urn:gala:problem:validation-failed
39169
+ schema:
39170
+ $ref: "#/components/schemas/Problem"
39171
+ description: VALIDATION_FAILED
39172
+ headers:
39173
+ Cache-Control:
39174
+ $ref: "#/components/headers/CacheControlNoStore"
39175
+ X-Correlation-Id:
39176
+ $ref: "#/components/headers/XCorrelationId"
39177
+ x-gala-problem-codes:
39178
+ - VALIDATION_FAILED
39179
+ "401":
39180
+ content:
39181
+ application/problem+json:
39182
+ examples:
39183
+ AUTHENTICATION_REQUIRED:
39184
+ summary: AUTHENTICATION_REQUIRED
39185
+ value:
39186
+ code: AUTHENTICATION_REQUIRED
39187
+ correlationId: 018f0000-0000-7000-8000-000000000001
39188
+ detail: See the operation contract.
39189
+ errors: []
39190
+ retryable: false
39191
+ schemaId: urn:gala:schema:problem:2.0.0
39192
+ schemaVersion: 2.0.0
39193
+ status: 401
39194
+ title: AUTHENTICATION_REQUIRED
39195
+ type: urn:gala:problem:authentication-required
39196
+ REAUTH_REQUIRED:
39197
+ summary: REAUTH_REQUIRED
39198
+ value:
39199
+ code: REAUTH_REQUIRED
39200
+ correlationId: 018f0000-0000-7000-8000-000000000001
39201
+ detail: See the operation contract.
39202
+ errors: []
39203
+ retryable: false
39204
+ schemaId: urn:gala:schema:problem:2.0.0
39205
+ schemaVersion: 2.0.0
39206
+ status: 401
39207
+ title: REAUTH_REQUIRED
39208
+ type: urn:gala:problem:reauth-required
39209
+ schema:
39210
+ $ref: "#/components/schemas/Problem"
39211
+ description: AUTHENTICATION_REQUIRED, REAUTH_REQUIRED
39212
+ headers:
39213
+ Cache-Control:
39214
+ $ref: "#/components/headers/CacheControlNoStore"
39215
+ X-Correlation-Id:
39216
+ $ref: "#/components/headers/XCorrelationId"
39217
+ x-gala-problem-codes:
39218
+ - AUTHENTICATION_REQUIRED
39219
+ - REAUTH_REQUIRED
39220
+ "403":
39221
+ content:
39222
+ application/problem+json:
39223
+ examples:
39224
+ AUTHORIZATION_DENIED:
39225
+ summary: AUTHORIZATION_DENIED
39226
+ value:
39227
+ code: AUTHORIZATION_DENIED
39228
+ correlationId: 018f0000-0000-7000-8000-000000000001
39229
+ detail: See the operation contract.
39230
+ errors: []
39231
+ retryable: false
39232
+ schemaId: urn:gala:schema:problem:2.0.0
39233
+ schemaVersion: 2.0.0
39234
+ status: 403
39235
+ title: AUTHORIZATION_DENIED
39236
+ type: urn:gala:problem:authorization-denied
39237
+ schema:
39238
+ $ref: "#/components/schemas/Problem"
39239
+ description: AUTHORIZATION_DENIED
39240
+ headers:
39241
+ Cache-Control:
39242
+ $ref: "#/components/headers/CacheControlNoStore"
39243
+ X-Correlation-Id:
39244
+ $ref: "#/components/headers/XCorrelationId"
39245
+ x-gala-problem-codes:
39246
+ - AUTHORIZATION_DENIED
39247
+ "404":
39248
+ content:
39249
+ application/problem+json:
39250
+ examples:
39251
+ RESOURCE_NOT_FOUND:
39252
+ summary: RESOURCE_NOT_FOUND
39253
+ value:
39254
+ code: RESOURCE_NOT_FOUND
39255
+ correlationId: 018f0000-0000-7000-8000-000000000001
39256
+ detail: See the operation contract.
39257
+ errors: []
39258
+ retryable: false
39259
+ schemaId: urn:gala:schema:problem:2.0.0
39260
+ schemaVersion: 2.0.0
39261
+ status: 404
39262
+ title: RESOURCE_NOT_FOUND
39263
+ type: urn:gala:problem:resource-not-found
39264
+ schema:
39265
+ $ref: "#/components/schemas/Problem"
39266
+ description: RESOURCE_NOT_FOUND
39267
+ headers:
39268
+ Cache-Control:
39269
+ $ref: "#/components/headers/CacheControlNoStore"
39270
+ X-Correlation-Id:
39271
+ $ref: "#/components/headers/XCorrelationId"
39272
+ x-gala-problem-codes:
39273
+ - RESOURCE_NOT_FOUND
39274
+ security:
39275
+ - browserSession: []
39276
+ summary: list site handover claims
38406
39277
  tags:
38407
- - prism
39278
+ - organizations
39279
+ x-gala-action-grant: none
38408
39280
  x-gala-activation-gate: MVP
38409
39281
  x-gala-activation-guards:
38410
39282
  - NONE
38411
- x-gala-capability-key: publication.source.write
38412
- x-gala-concurrency: authorization-and-publication-epochs
39283
+ x-gala-assurance-class: RECENT_AUTHENTICATION
39284
+ x-gala-capability-key: publication.handover.manage
39285
+ x-gala-concurrency: none
38413
39286
  x-gala-conditional-capabilities: []
38414
39287
  x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
38415
39288
  x-gala-nullability: required-and-nullable-are-explicit
38416
- x-gala-purpose: read the Prism generation policy
39289
+ x-gala-purpose: list site handover claims
38417
39290
  x-gala-reachable-problems:
38418
39291
  - AUTHENTICATION_REQUIRED
38419
39292
  - AUTHORIZATION_DENIED
39293
+ - REAUTH_REQUIRED
38420
39294
  - RESOURCE_NOT_FOUND
38421
39295
  - VALIDATION_FAILED
38422
39296
  x-gala-replay-identity: safe-query
@@ -38424,11 +39298,10 @@ paths:
38424
39298
  - NONE
38425
39299
  x-gala-success-category: query
38426
39300
  x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
38427
- /v2/organizations/{organizationId}/publications/{publicationId}/handover:
38428
- get:
39301
+ post:
38429
39302
  description: |
38430
- The organisation owner, with recent authentication; an API key is always refused. Reports the handover of a demo site into the creator's own GitHub account: its state, the target, whether the Galascribe App is installed on the target, each step and the address the site will have. `200` with `state: NOT_STARTED` (empty `steps`, `version` 0, no `target`, `appInstalledOnTarget` or `siteUrlAfter`) for a demo publication (one with a demo-site record) that has no handover yet; `200` with the latest handover otherwise, including `DONE`, `FAILED` and `CANCELLED`; `404 RESOURCE_NOT_FOUND` only for a publication that is not a demo publication.
38431
- operationId: getOrganizationsByOrganizationIdPublicationsByPublicationIdHandover
39303
+ The organisation owner, with recent authentication; an API key is always refused. Issues a claim link that hands this site to whoever signs in and accepts it, and returns the claim with its `claimUrl`. `proof` is `LINK_ONLY` (anyone who holds the link and signs in can claim the site, so share it only with the person you mean; it expires and can be revoked) or `YOUTUBE_CHANNEL` (the claimant must also prove they control the channel in `channelId`, which is required for that proof and refused with `LINK_ONLY`: `400 VALIDATION_FAILED`). `expiresInDays` defaults to 30 and is at most 365. A site holds one `OPEN` claim at a time: while one exists the call answers `409 INVALID_SOURCE_STATE` unless `replace` is `true`, which revokes the `OPEN` claim and issues this one in the same transaction, so the old link stops working. A `VERIFIED` claim is never replaced (`409 INVALID_SOURCE_STATE`); revoke it first. A `CLAIMED` claim never blocks a new one, because ownership can chain. `409 INVALID_SOURCE_STATE` also for a site whose organisation is not a single-person organisation, since only a single-person organisation can be handed over. `409 HANDOVER_EXISTS` while a repository move (`/handover`) is live. `404 RESOURCE_NOT_FOUND` for a publication that is not in the organisation. `Idempotency-Key` is the issue identity: repeating it returns the same claim and `claimUrl`.
39304
+ operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdHandoverClaims
38432
39305
  parameters:
38433
39306
  - $ref: "#/components/parameters/XCorrelationId"
38434
39307
  - example: 018f0000-0000-7000-8000-000000000001
@@ -38447,50 +39320,68 @@ paths:
38447
39320
  format: uuid
38448
39321
  pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
38449
39322
  type: string
39323
+ - $ref: "#/components/parameters/IdempotencyKey"
39324
+ - $ref: "#/components/parameters/XCsrfToken"
39325
+ requestBody:
39326
+ content:
39327
+ application/json:
39328
+ examples:
39329
+ nominal:
39330
+ summary: Nominal valid request
39331
+ value:
39332
+ expiresInDays: 30
39333
+ proof: LINK_ONLY
39334
+ youtubeChannel:
39335
+ summary: Proof that the claimant controls a YouTube channel
39336
+ value:
39337
+ channelId: UCabcdefghijklmnopqrstuv
39338
+ proof: YOUTUBE_CHANNEL
39339
+ schema:
39340
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdHandoverClaimsRequest"
39341
+ required: true
38450
39342
  responses:
38451
- "200":
39343
+ "201":
38452
39344
  content:
38453
39345
  application/json:
38454
39346
  examples:
38455
39347
  nominal:
38456
39348
  summary: Nominal successful response
38457
39349
  value:
38458
- appInstalledOnTarget: true
38459
- siteUrlAfter: https://creator-org.github.io/maya-cooks/
38460
- state: TRANSFER_STARTED
38461
- steps:
38462
- - name: FINALIZE_CHANGE
38463
- state: DONE
38464
- - name: TRANSFER
38465
- state: RUNNING
38466
- - name: RELINK
38467
- state: PENDING
38468
- - name: PAGES
38469
- state: PENDING
38470
- - name: PUBLISH
38471
- state: PENDING
38472
- target:
38473
- kind: ORGANIZATION
38474
- ownerLogin: creator-org
38475
- version: 1
38476
- notStarted:
38477
- summary: Demo publication with no handover yet
38478
- value:
38479
- state: NOT_STARTED
38480
- steps: []
39350
+ claimId: 018f0000-0000-7000-8000-000000000001
39351
+ claimUrl: https://app.galascribe.com/claim/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQ
39352
+ createdAt: "2026-10-17T12:00:00.000Z"
39353
+ expiresAt: "2026-11-16T12:00:00.000Z"
39354
+ proof:
39355
+ kind: LINK_ONLY
39356
+ state: OPEN
38481
39357
  version: 0
38482
39358
  schema:
38483
- $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPublicationsByPublicationIdHandoverResponse"
38484
- description: read publication handover succeeded
39359
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdHandoverClaimsResponse"
39360
+ description: issue site handover claim succeeded
38485
39361
  headers:
38486
39362
  Cache-Control:
38487
39363
  $ref: "#/components/headers/CacheControlNoStore"
39364
+ Location:
39365
+ $ref: "#/components/headers/Location"
38488
39366
  X-Correlation-Id:
38489
39367
  $ref: "#/components/headers/XCorrelationId"
38490
39368
  "400":
38491
39369
  content:
38492
39370
  application/problem+json:
38493
39371
  examples:
39372
+ REQUEST_FIELD_UNKNOWN:
39373
+ summary: REQUEST_FIELD_UNKNOWN
39374
+ value:
39375
+ code: REQUEST_FIELD_UNKNOWN
39376
+ correlationId: 018f0000-0000-7000-8000-000000000001
39377
+ detail: See the operation contract.
39378
+ errors: []
39379
+ retryable: false
39380
+ schemaId: urn:gala:schema:problem:2.0.0
39381
+ schemaVersion: 2.0.0
39382
+ status: 400
39383
+ title: REQUEST_FIELD_UNKNOWN
39384
+ type: urn:gala:problem:request-field-unknown
38494
39385
  VALIDATION_FAILED:
38495
39386
  summary: VALIDATION_FAILED
38496
39387
  value:
@@ -38506,13 +39397,14 @@ paths:
38506
39397
  type: urn:gala:problem:validation-failed
38507
39398
  schema:
38508
39399
  $ref: "#/components/schemas/Problem"
38509
- description: VALIDATION_FAILED
39400
+ description: REQUEST_FIELD_UNKNOWN, VALIDATION_FAILED
38510
39401
  headers:
38511
39402
  Cache-Control:
38512
39403
  $ref: "#/components/headers/CacheControlNoStore"
38513
39404
  X-Correlation-Id:
38514
39405
  $ref: "#/components/headers/XCorrelationId"
38515
39406
  x-gala-problem-codes:
39407
+ - REQUEST_FIELD_UNKNOWN
38516
39408
  - VALIDATION_FAILED
38517
39409
  "401":
38518
39410
  content:
@@ -38609,9 +39501,64 @@ paths:
38609
39501
  $ref: "#/components/headers/XCorrelationId"
38610
39502
  x-gala-problem-codes:
38611
39503
  - RESOURCE_NOT_FOUND
39504
+ "409":
39505
+ content:
39506
+ application/problem+json:
39507
+ examples:
39508
+ COMMAND_REPLAY_CONFLICT:
39509
+ summary: COMMAND_REPLAY_CONFLICT
39510
+ value:
39511
+ code: COMMAND_REPLAY_CONFLICT
39512
+ correlationId: 018f0000-0000-7000-8000-000000000001
39513
+ detail: See the operation contract.
39514
+ errors: []
39515
+ retryable: false
39516
+ schemaId: urn:gala:schema:problem:2.0.0
39517
+ schemaVersion: 2.0.0
39518
+ status: 409
39519
+ title: COMMAND_REPLAY_CONFLICT
39520
+ type: urn:gala:problem:command-replay-conflict
39521
+ HANDOVER_EXISTS:
39522
+ summary: HANDOVER_EXISTS
39523
+ value:
39524
+ code: HANDOVER_EXISTS
39525
+ correlationId: 018f0000-0000-7000-8000-000000000001
39526
+ detail: See the operation contract.
39527
+ errors: []
39528
+ retryable: false
39529
+ schemaId: urn:gala:schema:problem:2.0.0
39530
+ schemaVersion: 2.0.0
39531
+ status: 409
39532
+ title: HANDOVER_EXISTS
39533
+ type: urn:gala:problem:handover-exists
39534
+ INVALID_SOURCE_STATE:
39535
+ summary: INVALID_SOURCE_STATE
39536
+ value:
39537
+ code: INVALID_SOURCE_STATE
39538
+ correlationId: 018f0000-0000-7000-8000-000000000001
39539
+ detail: See the operation contract.
39540
+ errors: []
39541
+ retryable: false
39542
+ schemaId: urn:gala:schema:problem:2.0.0
39543
+ schemaVersion: 2.0.0
39544
+ status: 409
39545
+ title: INVALID_SOURCE_STATE
39546
+ type: urn:gala:problem:invalid-source-state
39547
+ schema:
39548
+ $ref: "#/components/schemas/Problem"
39549
+ description: COMMAND_REPLAY_CONFLICT, HANDOVER_EXISTS, INVALID_SOURCE_STATE
39550
+ headers:
39551
+ Cache-Control:
39552
+ $ref: "#/components/headers/CacheControlNoStore"
39553
+ X-Correlation-Id:
39554
+ $ref: "#/components/headers/XCorrelationId"
39555
+ x-gala-problem-codes:
39556
+ - COMMAND_REPLAY_CONFLICT
39557
+ - HANDOVER_EXISTS
39558
+ - INVALID_SOURCE_STATE
38612
39559
  security:
38613
39560
  - browserSession: []
38614
- summary: read publication handover
39561
+ summary: issue site handover claim
38615
39562
  tags:
38616
39563
  - organizations
38617
39564
  x-gala-action-grant: none
@@ -38624,22 +39571,30 @@ paths:
38624
39571
  x-gala-conditional-capabilities: []
38625
39572
  x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
38626
39573
  x-gala-nullability: required-and-nullable-are-explicit
38627
- x-gala-purpose: read publication handover
39574
+ x-gala-purpose: issue site handover claim
38628
39575
  x-gala-reachable-problems:
38629
39576
  - AUTHENTICATION_REQUIRED
38630
39577
  - AUTHORIZATION_DENIED
39578
+ - COMMAND_REPLAY_CONFLICT
39579
+ - HANDOVER_EXISTS
39580
+ - INVALID_SOURCE_STATE
38631
39581
  - REAUTH_REQUIRED
39582
+ - REQUEST_FIELD_UNKNOWN
38632
39583
  - RESOURCE_NOT_FOUND
38633
39584
  - VALIDATION_FAILED
38634
- x-gala-replay-identity: safe-query
39585
+ x-gala-replay-identity: idempotency-key
38635
39586
  x-gala-state-guards:
38636
- - NONE
38637
- x-gala-success-category: query
39587
+ - Publication:ACTIVE
39588
+ - Organization:SINGLE
39589
+ - CreatorClaim:no VERIFIED claim
39590
+ - CreatorClaim:OPEN -> REVOKED when replace is true, otherwise no OPEN claim
39591
+ x-gala-success-category: create
38638
39592
  x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
39593
+ /v2/organizations/{organizationId}/publications/{publicationId}/handover-claims/{claimId}:revoke:
38639
39594
  post:
38640
39595
  description: |
38641
- The organisation owner, with recent authentication; an API key is always refused. Moves a demo site's repository into `targetOwnerLogin` (a person or an organisation where the Galascribe App is installed): plans and confirms the finalize change in the caller's session, then starts the GitHub transfer. `202` accepts; `GET` reports progress. `409 HANDOVER_EXISTS` while one is live, `409 HANDOVER_TARGET_NOT_INSTALLED` when the App is not installed on the target, `503 DEPENDENCY_UNAVAILABLE` when GitHub cannot be reached. `404 RESOURCE_NOT_FOUND` when the publication is not a demo site. The response never carries `state: NOT_STARTED`.
38642
- operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdHandover
39596
+ The organisation owner, with recent authentication; an API key is always refused. Revokes an `OPEN` or `VERIFIED` claim: its link stops working at once (`GET /v2/claims/{token}` answers `404 CLAIM_NOT_FOUND`) and any verification a claimant completed is discarded. Revoking a `REVOKED` claim returns it unchanged. `409 CLAIM_ALREADY_CLAIMED` once the site has been claimed, `410 CLAIM_EXPIRED` once the claim has expired, `404 RESOURCE_NOT_FOUND` for a claim that is not this site's.
39597
+ operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdHandoverClaimsByClaimIdRevoke
38643
39598
  parameters:
38644
39599
  - $ref: "#/components/parameters/XCorrelationId"
38645
39600
  - example: 018f0000-0000-7000-8000-000000000001
@@ -38658,70 +39613,45 @@ paths:
38658
39613
  format: uuid
38659
39614
  pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
38660
39615
  type: string
39616
+ - example: 018f0000-0000-7000-8000-000000000001
39617
+ in: path
39618
+ name: claimId
39619
+ required: true
39620
+ schema:
39621
+ format: uuid
39622
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
39623
+ type: string
38661
39624
  - $ref: "#/components/parameters/IdempotencyKey"
38662
39625
  - $ref: "#/components/parameters/XCsrfToken"
38663
- requestBody:
38664
- content:
38665
- application/json:
38666
- examples:
38667
- nominal:
38668
- summary: Nominal valid request
38669
- value:
38670
- targetOwnerLogin: creator-org
38671
- schema:
38672
- $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdHandoverRequest"
38673
- required: true
38674
39626
  responses:
38675
- "202":
39627
+ "200":
38676
39628
  content:
38677
39629
  application/json:
38678
39630
  examples:
38679
39631
  nominal:
38680
39632
  summary: Nominal successful response
38681
39633
  value:
38682
- appInstalledOnTarget: true
38683
- siteUrlAfter: https://creator-org.github.io/maya-cooks/
38684
- state: REQUESTED
38685
- steps:
38686
- - name: FINALIZE_CHANGE
38687
- state: DONE
38688
- - name: TRANSFER
38689
- state: RUNNING
38690
- - name: RELINK
38691
- state: PENDING
38692
- - name: PAGES
38693
- state: PENDING
38694
- - name: PUBLISH
38695
- state: PENDING
38696
- target:
38697
- kind: ORGANIZATION
38698
- ownerLogin: creator-org
39634
+ claimId: 018f0000-0000-7000-8000-000000000001
39635
+ createdAt: "2026-10-17T12:00:00.000Z"
39636
+ expiresAt: "2026-11-16T12:00:00.000Z"
39637
+ proof:
39638
+ kind: LINK_ONLY
39639
+ state: REVOKED
38699
39640
  version: 1
38700
39641
  schema:
38701
- $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdHandoverResponse"
38702
- description: start publication handover succeeded
39642
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdHandoverClaimsByClaimIdRevokeResponse"
39643
+ description: revoke site handover claim succeeded
38703
39644
  headers:
38704
39645
  Cache-Control:
38705
39646
  $ref: "#/components/headers/CacheControlNoStore"
39647
+ ETag:
39648
+ $ref: "#/components/headers/ETag"
38706
39649
  X-Correlation-Id:
38707
39650
  $ref: "#/components/headers/XCorrelationId"
38708
39651
  "400":
38709
39652
  content:
38710
39653
  application/problem+json:
38711
39654
  examples:
38712
- REQUEST_FIELD_UNKNOWN:
38713
- summary: REQUEST_FIELD_UNKNOWN
38714
- value:
38715
- code: REQUEST_FIELD_UNKNOWN
38716
- correlationId: 018f0000-0000-7000-8000-000000000001
38717
- detail: See the operation contract.
38718
- errors: []
38719
- retryable: false
38720
- schemaId: urn:gala:schema:problem:2.0.0
38721
- schemaVersion: 2.0.0
38722
- status: 400
38723
- title: REQUEST_FIELD_UNKNOWN
38724
- type: urn:gala:problem:request-field-unknown
38725
39655
  VALIDATION_FAILED:
38726
39656
  summary: VALIDATION_FAILED
38727
39657
  value:
@@ -38737,14 +39667,13 @@ paths:
38737
39667
  type: urn:gala:problem:validation-failed
38738
39668
  schema:
38739
39669
  $ref: "#/components/schemas/Problem"
38740
- description: REQUEST_FIELD_UNKNOWN, VALIDATION_FAILED
39670
+ description: VALIDATION_FAILED
38741
39671
  headers:
38742
39672
  Cache-Control:
38743
39673
  $ref: "#/components/headers/CacheControlNoStore"
38744
39674
  X-Correlation-Id:
38745
39675
  $ref: "#/components/headers/XCorrelationId"
38746
39676
  x-gala-problem-codes:
38747
- - REQUEST_FIELD_UNKNOWN
38748
39677
  - VALIDATION_FAILED
38749
39678
  "401":
38750
39679
  content:
@@ -38845,23 +39774,10 @@ paths:
38845
39774
  content:
38846
39775
  application/problem+json:
38847
39776
  examples:
38848
- COMMAND_REPLAY_CONFLICT:
38849
- summary: COMMAND_REPLAY_CONFLICT
38850
- value:
38851
- code: COMMAND_REPLAY_CONFLICT
38852
- correlationId: 018f0000-0000-7000-8000-000000000001
38853
- detail: See the operation contract.
38854
- errors: []
38855
- retryable: false
38856
- schemaId: urn:gala:schema:problem:2.0.0
38857
- schemaVersion: 2.0.0
38858
- status: 409
38859
- title: COMMAND_REPLAY_CONFLICT
38860
- type: urn:gala:problem:command-replay-conflict
38861
- HANDOVER_EXISTS:
38862
- summary: HANDOVER_EXISTS
39777
+ CLAIM_ALREADY_CLAIMED:
39778
+ summary: CLAIM_ALREADY_CLAIMED
38863
39779
  value:
38864
- code: HANDOVER_EXISTS
39780
+ code: CLAIM_ALREADY_CLAIMED
38865
39781
  correlationId: 018f0000-0000-7000-8000-000000000001
38866
39782
  detail: See the operation contract.
38867
39783
  errors: []
@@ -38869,12 +39785,12 @@ paths:
38869
39785
  schemaId: urn:gala:schema:problem:2.0.0
38870
39786
  schemaVersion: 2.0.0
38871
39787
  status: 409
38872
- title: HANDOVER_EXISTS
38873
- type: urn:gala:problem:handover-exists
38874
- HANDOVER_TARGET_NOT_INSTALLED:
38875
- summary: HANDOVER_TARGET_NOT_INSTALLED
39788
+ title: CLAIM_ALREADY_CLAIMED
39789
+ type: urn:gala:problem:claim-already-claimed
39790
+ COMMAND_REPLAY_CONFLICT:
39791
+ summary: COMMAND_REPLAY_CONFLICT
38876
39792
  value:
38877
- code: HANDOVER_TARGET_NOT_INSTALLED
39793
+ code: COMMAND_REPLAY_CONFLICT
38878
39794
  correlationId: 018f0000-0000-7000-8000-000000000001
38879
39795
  detail: See the operation contract.
38880
39796
  errors: []
@@ -38882,50 +39798,49 @@ paths:
38882
39798
  schemaId: urn:gala:schema:problem:2.0.0
38883
39799
  schemaVersion: 2.0.0
38884
39800
  status: 409
38885
- title: HANDOVER_TARGET_NOT_INSTALLED
38886
- type: urn:gala:problem:handover-target-not-installed
39801
+ title: COMMAND_REPLAY_CONFLICT
39802
+ type: urn:gala:problem:command-replay-conflict
38887
39803
  schema:
38888
39804
  $ref: "#/components/schemas/Problem"
38889
- description: COMMAND_REPLAY_CONFLICT, HANDOVER_EXISTS, HANDOVER_TARGET_NOT_INSTALLED
39805
+ description: CLAIM_ALREADY_CLAIMED, COMMAND_REPLAY_CONFLICT
38890
39806
  headers:
38891
39807
  Cache-Control:
38892
39808
  $ref: "#/components/headers/CacheControlNoStore"
38893
39809
  X-Correlation-Id:
38894
39810
  $ref: "#/components/headers/XCorrelationId"
38895
39811
  x-gala-problem-codes:
39812
+ - CLAIM_ALREADY_CLAIMED
38896
39813
  - COMMAND_REPLAY_CONFLICT
38897
- - HANDOVER_EXISTS
38898
- - HANDOVER_TARGET_NOT_INSTALLED
38899
- "503":
39814
+ "410":
38900
39815
  content:
38901
39816
  application/problem+json:
38902
39817
  examples:
38903
- DEPENDENCY_UNAVAILABLE:
38904
- summary: DEPENDENCY_UNAVAILABLE
39818
+ CLAIM_EXPIRED:
39819
+ summary: CLAIM_EXPIRED
38905
39820
  value:
38906
- code: DEPENDENCY_UNAVAILABLE
39821
+ code: CLAIM_EXPIRED
38907
39822
  correlationId: 018f0000-0000-7000-8000-000000000001
38908
39823
  detail: See the operation contract.
38909
39824
  errors: []
38910
- retryable: true
39825
+ retryable: false
38911
39826
  schemaId: urn:gala:schema:problem:2.0.0
38912
39827
  schemaVersion: 2.0.0
38913
- status: 503
38914
- title: DEPENDENCY_UNAVAILABLE
38915
- type: urn:gala:problem:dependency-unavailable
39828
+ status: 410
39829
+ title: CLAIM_EXPIRED
39830
+ type: urn:gala:problem:claim-expired
38916
39831
  schema:
38917
39832
  $ref: "#/components/schemas/Problem"
38918
- description: DEPENDENCY_UNAVAILABLE
39833
+ description: CLAIM_EXPIRED
38919
39834
  headers:
38920
39835
  Cache-Control:
38921
39836
  $ref: "#/components/headers/CacheControlNoStore"
38922
39837
  X-Correlation-Id:
38923
39838
  $ref: "#/components/headers/XCorrelationId"
38924
39839
  x-gala-problem-codes:
38925
- - DEPENDENCY_UNAVAILABLE
39840
+ - CLAIM_EXPIRED
38926
39841
  security:
38927
39842
  - browserSession: []
38928
- summary: start publication handover
39843
+ summary: revoke site handover claim
38929
39844
  tags:
38930
39845
  - organizations
38931
39846
  x-gala-action-grant: none
@@ -38938,22 +39853,20 @@ paths:
38938
39853
  x-gala-conditional-capabilities: []
38939
39854
  x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
38940
39855
  x-gala-nullability: required-and-nullable-are-explicit
38941
- x-gala-purpose: start publication handover
39856
+ x-gala-purpose: revoke site handover claim
38942
39857
  x-gala-reachable-problems:
38943
39858
  - AUTHENTICATION_REQUIRED
38944
39859
  - AUTHORIZATION_DENIED
39860
+ - CLAIM_ALREADY_CLAIMED
39861
+ - CLAIM_EXPIRED
38945
39862
  - COMMAND_REPLAY_CONFLICT
38946
- - DEPENDENCY_UNAVAILABLE
38947
- - HANDOVER_EXISTS
38948
- - HANDOVER_TARGET_NOT_INSTALLED
38949
39863
  - REAUTH_REQUIRED
38950
- - REQUEST_FIELD_UNKNOWN
38951
39864
  - RESOURCE_NOT_FOUND
38952
39865
  - VALIDATION_FAILED
38953
39866
  x-gala-replay-identity: idempotency-key
38954
39867
  x-gala-state-guards:
38955
39868
  - NONE
38956
- x-gala-success-category: async
39869
+ x-gala-success-category: update
38957
39870
  x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
38958
39871
  /v2/organizations/{organizationId}/publications/{publicationId}/handover:cancel:
38959
39872
  post: