@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.
- package/THIRD_PARTY_LICENSES.json +1 -1
- package/docs/catalogs/app-components.json +2 -2
- package/docs/catalogs/app-routes.json +5 -1
- package/docs/catalogs/schema-inventory.json +2 -2
- package/openapi/http-catalog.json +41 -2
- package/openapi/openapi.yaml +1057 -144
- package/package.json +1 -1
- package/sbom.cdx.json +23 -23
package/openapi/openapi.yaml
CHANGED
|
@@ -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:
|
|
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:
|
|
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
|
|
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.
|
|
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
|
-
-
|
|
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
|
-
-
|
|
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-
|
|
38412
|
-
x-gala-
|
|
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:
|
|
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
|
-
|
|
38428
|
-
get:
|
|
39301
|
+
post:
|
|
38429
39302
|
description: |
|
|
38430
|
-
The organisation owner, with recent authentication; an API key is always refused.
|
|
38431
|
-
operationId:
|
|
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
|
-
"
|
|
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
|
-
|
|
38459
|
-
|
|
38460
|
-
|
|
38461
|
-
|
|
38462
|
-
|
|
38463
|
-
|
|
38464
|
-
|
|
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/
|
|
38484
|
-
description:
|
|
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:
|
|
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:
|
|
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:
|
|
39585
|
+
x-gala-replay-identity: idempotency-key
|
|
38635
39586
|
x-gala-state-guards:
|
|
38636
|
-
-
|
|
38637
|
-
|
|
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.
|
|
38642
|
-
operationId:
|
|
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
|
-
"
|
|
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
|
-
|
|
38683
|
-
|
|
38684
|
-
|
|
38685
|
-
|
|
38686
|
-
|
|
38687
|
-
|
|
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/
|
|
38702
|
-
description:
|
|
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:
|
|
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
|
-
|
|
38849
|
-
summary:
|
|
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:
|
|
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:
|
|
38873
|
-
type: urn:gala:problem:
|
|
38874
|
-
|
|
38875
|
-
summary:
|
|
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:
|
|
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:
|
|
38886
|
-
type: urn:gala:problem:
|
|
39801
|
+
title: COMMAND_REPLAY_CONFLICT
|
|
39802
|
+
type: urn:gala:problem:command-replay-conflict
|
|
38887
39803
|
schema:
|
|
38888
39804
|
$ref: "#/components/schemas/Problem"
|
|
38889
|
-
description:
|
|
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
|
-
|
|
38898
|
-
- HANDOVER_TARGET_NOT_INSTALLED
|
|
38899
|
-
"503":
|
|
39814
|
+
"410":
|
|
38900
39815
|
content:
|
|
38901
39816
|
application/problem+json:
|
|
38902
39817
|
examples:
|
|
38903
|
-
|
|
38904
|
-
summary:
|
|
39818
|
+
CLAIM_EXPIRED:
|
|
39819
|
+
summary: CLAIM_EXPIRED
|
|
38905
39820
|
value:
|
|
38906
|
-
code:
|
|
39821
|
+
code: CLAIM_EXPIRED
|
|
38907
39822
|
correlationId: 018f0000-0000-7000-8000-000000000001
|
|
38908
39823
|
detail: See the operation contract.
|
|
38909
39824
|
errors: []
|
|
38910
|
-
retryable:
|
|
39825
|
+
retryable: false
|
|
38911
39826
|
schemaId: urn:gala:schema:problem:2.0.0
|
|
38912
39827
|
schemaVersion: 2.0.0
|
|
38913
|
-
status:
|
|
38914
|
-
title:
|
|
38915
|
-
type: urn:gala:problem:
|
|
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:
|
|
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
|
-
-
|
|
39840
|
+
- CLAIM_EXPIRED
|
|
38926
39841
|
security:
|
|
38927
39842
|
- browserSession: []
|
|
38928
|
-
summary:
|
|
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:
|
|
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:
|
|
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:
|