@rathnasgala2/schemas 3.40.0 → 3.42.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.
@@ -9098,11 +9098,21 @@ components:
9098
9098
  minLength: 1
9099
9099
  pattern: ^[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?$
9100
9100
  type: string
9101
+ grantExpiresAt:
9102
+ description: "SCHEMA-3.41.0: when an operator grant ends, or null when it is open-ended or the plan is not an operator grant."
9103
+ oneOf:
9104
+ - $ref: "#/components/schemas/PortableProblemRfc3339"
9105
+ - type: "null"
9106
+ source:
9107
+ $ref: "#/components/schemas/PlanSource"
9108
+ description: "SCHEMA-3.41.0: where the plan comes from. A `source` of OPERATOR is a complimentary plan the Galascribe team granted; the App shows it as 'Complimentary Basic/Pro' (until `grantExpiresAt` when set) and keeps the upgrade action so the organization can subscribe."
9101
9109
  tier:
9102
9110
  $ref: "#/components/schemas/PlatformPlanKey"
9103
9111
  description: The plan tier.
9104
9112
  required:
9105
9113
  - tier
9114
+ - source
9115
+ - grantExpiresAt
9106
9116
  - collaborators
9107
9117
  - entitlements
9108
9118
  type: object
@@ -9488,6 +9498,45 @@ components:
9488
9498
  - label
9489
9499
  - createdAt
9490
9500
  type: object
9501
+ PlanGrant:
9502
+ additionalProperties: false
9503
+ description: "SCHEMA-3.41.0: an operator plan grant, a complimentary Basic (`PRO`) or Pro (`BUSINESS`) plan given without Stripe."
9504
+ properties:
9505
+ expiresAt:
9506
+ oneOf:
9507
+ - $ref: "#/components/schemas/PortableProblemRfc3339"
9508
+ - type: "null"
9509
+ grantedAt:
9510
+ $ref: "#/components/schemas/PortableProblemRfc3339"
9511
+ grantedBy:
9512
+ description: The operator's person id.
9513
+ format: uuid
9514
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
9515
+ type: string
9516
+ organizationId:
9517
+ format: uuid
9518
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
9519
+ type: string
9520
+ planTier:
9521
+ $ref: "#/components/schemas/PlatformPlanKey"
9522
+ description: "`PRO` or `BUSINESS`."
9523
+ reasonCode:
9524
+ $ref: "#/components/schemas/PlatformOperatorReasonCode"
9525
+ required:
9526
+ - organizationId
9527
+ - planTier
9528
+ - expiresAt
9529
+ - reasonCode
9530
+ - grantedAt
9531
+ - grantedBy
9532
+ type: object
9533
+ PlanSource:
9534
+ description: "SCHEMA-3.41.0: where an organization's plan comes from. `NONE` is Free with no subscription and no grant; `STRIPE` is a Stripe subscription; `OPERATOR` is a grant the Galascribe team made."
9535
+ enum:
9536
+ - NONE
9537
+ - STRIPE
9538
+ - OPERATOR
9539
+ type: string
9491
9540
  PlatformAbuseCaseDetail:
9492
9541
  additionalProperties: false
9493
9542
  description: Review evidence for one abuse case. Report reasons include only open reports and are sorted and distinct; reporter identities and notes are never exposed.
@@ -10408,6 +10457,11 @@ components:
10408
10457
  type:
10409
10458
  - string
10410
10459
  - "null"
10460
+ organizations:
10461
+ description: "SCHEMA-3.41.0: every organization the person owns, in name order."
10462
+ items:
10463
+ $ref: "#/components/schemas/PlatformUserOrganization"
10464
+ type: array
10411
10465
  personId:
10412
10466
  format: uuid
10413
10467
  pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
@@ -10433,9 +10487,37 @@ components:
10433
10487
  - lastSignInAt
10434
10488
  - publicationCount
10435
10489
  - planTiers
10490
+ - organizations
10436
10491
  - contactEmailOnFile
10437
10492
  - contactEmail
10438
10493
  type: object
10494
+ PlatformUserOrganization:
10495
+ additionalProperties: false
10496
+ description: "SCHEMA-3.41.0: an organization a person owns, with its plan and the active operator grant."
10497
+ properties:
10498
+ grant:
10499
+ oneOf:
10500
+ - $ref: "#/components/schemas/PlanGrant"
10501
+ - type: "null"
10502
+ name:
10503
+ maxLength: 255
10504
+ minLength: 1
10505
+ type: string
10506
+ organizationId:
10507
+ format: uuid
10508
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
10509
+ type: string
10510
+ planSource:
10511
+ $ref: "#/components/schemas/PlanSource"
10512
+ planTier:
10513
+ $ref: "#/components/schemas/PlatformPlanKey"
10514
+ required:
10515
+ - organizationId
10516
+ - name
10517
+ - planTier
10518
+ - planSource
10519
+ - grant
10520
+ type: object
10439
10521
  PlatformWebhookEvent:
10440
10522
  additionalProperties: false
10441
10523
  description: Redacted webhook inbox metadata and immutable routing coordinates. The request body and payload digest are deliberately never exposed.
@@ -19367,6 +19449,9 @@ components:
19367
19449
  PostOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsResponse:
19368
19450
  allOf:
19369
19451
  - $ref: "#/components/schemas/SyndicationConnection"
19452
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsXAuthorizeResponse:
19453
+ allOf:
19454
+ - $ref: "#/components/schemas/SyndicationXAuthorization"
19370
19455
  PostOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationDeliveriesByDeliveryIdRetryResponse:
19371
19456
  allOf:
19372
19457
  - $ref: "#/components/schemas/SyndicationDelivery"
@@ -21991,6 +22076,29 @@ components:
21991
22076
  required:
21992
22077
  - change
21993
22078
  type: object
22079
+ PutPlatformOrganizationsByOrganizationIdPlanGrantRequest:
22080
+ additionalProperties: false
22081
+ properties:
22082
+ expiresAt:
22083
+ description: Null for open-ended; otherwise in the future.
22084
+ oneOf:
22085
+ - $ref: "#/components/schemas/PortableProblemRfc3339"
22086
+ - type: "null"
22087
+ planTier:
22088
+ description: "`FREE` is not a grant tier; a DELETE ends the grant."
22089
+ enum:
22090
+ - PRO
22091
+ - BUSINESS
22092
+ type: string
22093
+ reasonCode:
22094
+ $ref: "#/components/schemas/PlatformOperatorReasonCode"
22095
+ required:
22096
+ - planTier
22097
+ - expiresAt
22098
+ - reasonCode
22099
+ type: object
22100
+ PutPlatformOrganizationsByOrganizationIdPlanGrantResponse:
22101
+ $ref: "#/components/schemas/PlanGrant"
21994
22102
  PutPlatformPlansByPlanKeyRequest:
21995
22103
  additionalProperties: false
21996
22104
  properties:
@@ -23827,6 +23935,9 @@ components:
23827
23935
  maxLength: 200
23828
23936
  minLength: 1
23829
23937
  type: string
23938
+ allowance:
23939
+ $ref: "#/components/schemas/SyndicationWeeklyAllowance"
23940
+ description: SCHEMA-3.41.0. Present when `kind` is `x`, the organization's X posts left this UTC week.
23830
23941
  attention:
23831
23942
  $ref: "#/components/schemas/SyndicationConnectionAttention"
23832
23943
  createdAt:
@@ -23856,7 +23967,7 @@ components:
23856
23967
  description: SCHEMA-3.37.0. Why a connection stopped posting, present while its `status` is `NEEDS_ATTENTION`. `message` is written for the author.
23857
23968
  properties:
23858
23969
  code:
23859
- description: A stable upper-case reason, for example `CREDENTIAL_REJECTED`. A client shows a value it does not know as `message`.
23970
+ description: "A stable upper-case reason, for example `CREDENTIAL_REJECTED`, or `REAUTHORIZE` (SCHEMA-3.41.0: X refused the saved refresh token, so the person must press Connect X again). A client shows a value it does not know as `message`."
23860
23971
  maxLength: 64
23861
23972
  minLength: 1
23862
23973
  pattern: ^[A-Z][A-Z0-9_]*$
@@ -23974,7 +24085,6 @@ components:
23974
24085
  mastodon: "#/components/schemas/SyndicationCredentialMastodon"
23975
24086
  telegram: "#/components/schemas/SyndicationCredentialTelegram"
23976
24087
  wordpress: "#/components/schemas/SyndicationCredentialWordpress"
23977
- x: "#/components/schemas/SyndicationCredentialX"
23978
24088
  propertyName: kind
23979
24089
  oneOf:
23980
24090
  - $ref: "#/components/schemas/SyndicationCredentialDevto"
@@ -23985,7 +24095,6 @@ components:
23985
24095
  - $ref: "#/components/schemas/SyndicationCredentialDiscord"
23986
24096
  - $ref: "#/components/schemas/SyndicationCredentialWordpress"
23987
24097
  - $ref: "#/components/schemas/SyndicationCredentialGhost"
23988
- - $ref: "#/components/schemas/SyndicationCredentialX"
23989
24098
  SyndicationCredentialBluesky:
23990
24099
  additionalProperties: false
23991
24100
  description: SCHEMA-3.37.0. A Bluesky handle and app password.
@@ -24184,41 +24293,6 @@ components:
24184
24293
  - username
24185
24294
  - applicationPassword
24186
24295
  type: object
24187
- SyndicationCredentialX:
24188
- additionalProperties: false
24189
- description: SCHEMA-3.40.0. The author's own X developer app, OAuth 1.0a user context with Read and Write. X bills the author's developer account for every post.
24190
- properties:
24191
- accessToken:
24192
- maxLength: 200
24193
- minLength: 8
24194
- type: string
24195
- writeOnly: true
24196
- accessTokenSecret:
24197
- maxLength: 200
24198
- minLength: 8
24199
- type: string
24200
- writeOnly: true
24201
- apiKey:
24202
- maxLength: 200
24203
- minLength: 8
24204
- type: string
24205
- writeOnly: true
24206
- apiKeySecret:
24207
- maxLength: 200
24208
- minLength: 8
24209
- type: string
24210
- writeOnly: true
24211
- kind:
24212
- pattern: ^x$
24213
- type: string
24214
- x-gala-const: x
24215
- required:
24216
- - kind
24217
- - apiKey
24218
- - apiKeySecret
24219
- - accessToken
24220
- - accessTokenSecret
24221
- type: object
24222
24296
  SyndicationDelivery:
24223
24297
  additionalProperties: false
24224
24298
  description: SCHEMA-3.37.0. One post of one live article to one platform. `connectionId` is absent once the connection was removed; `kind` and `accountLabel` stay. `externalUrl` is the post on the platform, absent for `discord` and until the delivery is `SENT`.
@@ -24282,7 +24356,7 @@ components:
24282
24356
  description: SCHEMA-3.37.0. Why a delivery failed. `message` is the platform's own words when it gave any, else Galascribe's.
24283
24357
  properties:
24284
24358
  code:
24285
- description: A stable upper-case reason, for example `CREDENTIAL_REJECTED`, `PLATFORM_REJECTED` or `RETRIES_EXHAUSTED`. A client shows a value it does not know as `message`.
24359
+ description: A stable upper-case reason, for example `CREDENTIAL_REJECTED`, `PLATFORM_REJECTED`, `RETRIES_EXHAUSTED` or, since SCHEMA-3.41.0, `WEEKLY_ALLOWANCE_SPENT` (an X delivery, status `FAILED`, message "X posts for this week are used. They come back on <Mon d>."; a manual retry after the allowance renews works). A client shows a value it does not know as `message`.
24286
24360
  maxLength: 64
24287
24361
  minLength: 1
24288
24362
  pattern: ^[A-Z][A-Z0-9_]*$
@@ -24369,6 +24443,46 @@ components:
24369
24443
  required:
24370
24444
  - credential
24371
24445
  type: object
24446
+ SyndicationWeeklyAllowance:
24447
+ additionalProperties: false
24448
+ description: SCHEMA-3.41.0. How many X posts the organization has left this UTC week. The allowance follows the organization's plan (2 on Basic and 5 on Pro by default, as the platform settings say) and is shared by every X connection of the organization. Wording follows `InterviewPolicy.quota`.
24449
+ properties:
24450
+ limit:
24451
+ format: int64
24452
+ minimum: 0
24453
+ type: integer
24454
+ period:
24455
+ description: The UTC week the allowance counts in, as its Monday, `YYYY-MM-DD`
24456
+ format: date
24457
+ pattern: ^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12][0-9]|3[01])$
24458
+ type: string
24459
+ remaining:
24460
+ format: int64
24461
+ minimum: 0
24462
+ type: integer
24463
+ renewsAt:
24464
+ $ref: "#/components/schemas/PortableProblemRfc3339"
24465
+ description: The first instant of the next UTC week (Monday 00:00Z), when the allowance comes back
24466
+ required:
24467
+ - period
24468
+ - renewsAt
24469
+ - limit
24470
+ - remaining
24471
+ type: object
24472
+ SyndicationXAuthorization:
24473
+ additionalProperties: false
24474
+ description: SCHEMA-3.41.0. Where to send the person to let Galascribe's own X app post for them. Open `authorizationUrl` (x.com); X brings the browser back to `GET /v2/callbacks/x/oauth` within 10 minutes (`expiresAt`).
24475
+ properties:
24476
+ authorizationUrl:
24477
+ format: uri
24478
+ maxLength: 2048
24479
+ type: string
24480
+ expiresAt:
24481
+ $ref: "#/components/schemas/PortableProblemRfc3339"
24482
+ required:
24483
+ - authorizationUrl
24484
+ - expiresAt
24485
+ type: object
24372
24486
  VerificationPlanEntry:
24373
24487
  additionalProperties: false
24374
24488
  properties:
@@ -25809,6 +25923,77 @@ paths:
25809
25923
  - NONE
25810
25924
  x-gala-success-category: billing-callback
25811
25925
  x-gala-tenant-scope: NONE
25926
+ /v2/callbacks/x/oauth:
25927
+ get:
25928
+ description: |
25929
+ SCHEMA-3.41.0. The address X sends the person back to after the consent screen. It never answers with a problem document for what the provider sends: every outcome is a `303` to the App at `/settings/syndication?x=<connectionId>` on success or `/settings/syndication?xError=<code>` with `<code>` one of `DENIED` (the person refused on x.com), `EXPIRED` (the state is unknown or older than 10 minutes), `LIMIT` (the publication is at its connection limit), `REJECTED` (X refused the code or the account read) or `UNAVAILABLE` (X could not be reached or is not configured). Reconnecting an X account already connected to the same publication replaces its tokens in place (same connection) and clears attention. `code`, `state`, `error` and `error_description` are never logged or echoed. Only a value longer than its limit is refused as `400 VALIDATION_FAILED`, before any connection is touched.
25930
+ operationId: getCallbacksXOauth
25931
+ parameters:
25932
+ - $ref: "#/components/parameters/XCorrelationId"
25933
+ - example: example
25934
+ in: query
25935
+ name: code
25936
+ required: false
25937
+ schema:
25938
+ maxLength: 8192
25939
+ minLength: 1
25940
+ type: string
25941
+ - example: example
25942
+ in: query
25943
+ name: state
25944
+ required: false
25945
+ schema:
25946
+ maxLength: 8192
25947
+ minLength: 1
25948
+ type: string
25949
+ - example: example
25950
+ in: query
25951
+ name: error
25952
+ required: false
25953
+ schema:
25954
+ maxLength: 8192
25955
+ minLength: 1
25956
+ type: string
25957
+ - example: example
25958
+ in: query
25959
+ name: error_description
25960
+ required: false
25961
+ schema:
25962
+ maxLength: 8192
25963
+ minLength: 1
25964
+ type: string
25965
+ responses:
25966
+ "303":
25967
+ description: consume the exact X OAuth callback transaction succeeded
25968
+ headers:
25969
+ Cache-Control:
25970
+ $ref: "#/components/headers/CacheControlNoStore"
25971
+ Location:
25972
+ $ref: "#/components/headers/Location"
25973
+ X-Correlation-Id:
25974
+ $ref: "#/components/headers/XCorrelationId"
25975
+ "400":
25976
+ $ref: "#/components/responses/ValidationFailed"
25977
+ security: []
25978
+ summary: consume the exact X OAuth callback transaction
25979
+ tags:
25980
+ - callbacks
25981
+ x-gala-activation-gate: MVP
25982
+ x-gala-activation-guards:
25983
+ - NONE
25984
+ x-gala-capability-key: null
25985
+ x-gala-concurrency: single-use-transaction
25986
+ x-gala-conditional-capabilities: []
25987
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
25988
+ x-gala-nullability: required-and-nullable-are-explicit
25989
+ x-gala-purpose: consume the exact X OAuth callback transaction
25990
+ x-gala-reachable-problems:
25991
+ - VALIDATION_FAILED
25992
+ x-gala-replay-identity: oauth-state
25993
+ x-gala-state-guards:
25994
+ - NONE
25995
+ x-gala-success-category: oauth-callback
25996
+ x-gala-tenant-scope: NONE
25812
25997
  /v2/claims/{token}:
25813
25998
  get:
25814
25999
  description: |
@@ -33673,6 +33858,8 @@ paths:
33673
33858
  galascribeHosting: true
33674
33859
  includedDomain: false
33675
33860
  galascribeAddressZone: galascribe.com
33861
+ grantExpiresAt: null
33862
+ source: STRIPE
33676
33863
  tier: PRO
33677
33864
  schema:
33678
33865
  $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPlanResponse"
@@ -65404,10 +65591,10 @@ paths:
65404
65591
  - NONE
65405
65592
  x-gala-success-category: create
65406
65593
  x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
65407
- /v2/organizations/{organizationId}/publications/{publicationId}/syndication-connections/{connectionId}:
65408
- delete:
65409
- description: Removes the connection and destroys its saved credential. Posts already made stay on the platform; its deliveries stay in the history with their kind and account name. Needs `publication.settings.manage`. Removing a connection that is already gone answers `404 SYNDICATION_CONNECTION_NOT_FOUND`.
65410
- operationId: deleteOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsByConnectionId
65594
+ /v2/organizations/{organizationId}/publications/{publicationId}/syndication-connections/x:authorize:
65595
+ post:
65596
+ description: "SCHEMA-3.41.0. Starts connecting X. Galascribe's own X app posts on the author's behalf: the author never handles keys, X bills Galascribe, and the organization's plan sets a weekly allowance of X posts (2 on Basic, 5 on Pro by default; none on Free). The answer carries the address on x.com to send the person to; X brings the browser back to `GET /v2/callbacks/x/oauth` within 10 minutes, which saves the connection and lands on the Syndication settings page. Needs `publication.settings.manage`. `409 PLAN_REQUIRED` when the plan allows no X posts, `409 SYNDICATION_CONNECTION_LIMIT` at 12 connections, `503 SYNDICATION_X_NOT_CONFIGURED` when the platform operator has not configured the X app, `429 RATE_LIMITED` after too many attempts."
65597
+ operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsXAuthorize
65411
65598
  parameters:
65412
65599
  - $ref: "#/components/parameters/XCorrelationId"
65413
65600
  - example: 018f0000-0000-7000-8000-000000000001
@@ -65426,22 +65613,26 @@ paths:
65426
65613
  format: uuid
65427
65614
  pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
65428
65615
  type: string
65429
- - example: 018f0000-0000-7000-8000-000000000001
65430
- in: path
65431
- name: connectionId
65432
- required: true
65433
- schema:
65434
- format: uuid
65435
- pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
65436
- type: string
65437
65616
  - $ref: "#/components/parameters/IdempotencyKey"
65438
65617
  - $ref: "#/components/parameters/XCsrfToken"
65439
65618
  responses:
65440
- "204":
65441
- description: remove a syndication connection succeeded
65619
+ "201":
65620
+ content:
65621
+ application/json:
65622
+ examples:
65623
+ nominal:
65624
+ summary: Nominal successful response
65625
+ value:
65626
+ authorizationUrl: https://x.com/i/oauth2/authorize?response_type=code&client_id=example-client-id&state=example-state
65627
+ expiresAt: "2026-11-06T12:10:00.000Z"
65628
+ schema:
65629
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsXAuthorizeResponse"
65630
+ description: start connecting X succeeded
65442
65631
  headers:
65443
65632
  Cache-Control:
65444
65633
  $ref: "#/components/headers/CacheControlNoStore"
65634
+ Location:
65635
+ $ref: "#/components/headers/Location"
65445
65636
  X-Correlation-Id:
65446
65637
  $ref: "#/components/headers/XCorrelationId"
65447
65638
  "400":
@@ -65542,22 +65733,9 @@ paths:
65542
65733
  status: 404
65543
65734
  title: RESOURCE_NOT_FOUND
65544
65735
  type: urn:gala:problem:resource-not-found
65545
- SYNDICATION_CONNECTION_NOT_FOUND:
65546
- summary: SYNDICATION_CONNECTION_NOT_FOUND
65547
- value:
65548
- code: SYNDICATION_CONNECTION_NOT_FOUND
65549
- correlationId: 018f0000-0000-7000-8000-000000000001
65550
- detail: See the operation contract.
65551
- errors: []
65552
- retryable: false
65553
- schemaId: urn:gala:schema:problem:2.0.0
65554
- schemaVersion: 2.0.0
65555
- status: 404
65556
- title: SYNDICATION_CONNECTION_NOT_FOUND
65557
- type: urn:gala:problem:syndication-connection-not-found
65558
65736
  schema:
65559
65737
  $ref: "#/components/schemas/Problem"
65560
- description: RESOURCE_NOT_FOUND, SYNDICATION_CONNECTION_NOT_FOUND
65738
+ description: RESOURCE_NOT_FOUND
65561
65739
  headers:
65562
65740
  Cache-Control:
65563
65741
  $ref: "#/components/headers/CacheControlNoStore"
@@ -65565,7 +65743,6 @@ paths:
65565
65743
  $ref: "#/components/headers/XCorrelationId"
65566
65744
  x-gala-problem-codes:
65567
65745
  - RESOURCE_NOT_FOUND
65568
- - SYNDICATION_CONNECTION_NOT_FOUND
65569
65746
  "409":
65570
65747
  content:
65571
65748
  application/problem+json:
@@ -65583,9 +65760,35 @@ paths:
65583
65760
  status: 409
65584
65761
  title: COMMAND_REPLAY_CONFLICT
65585
65762
  type: urn:gala:problem:command-replay-conflict
65763
+ PLAN_REQUIRED:
65764
+ summary: PLAN_REQUIRED
65765
+ value:
65766
+ code: PLAN_REQUIRED
65767
+ correlationId: 018f0000-0000-7000-8000-000000000001
65768
+ detail: See the operation contract.
65769
+ errors: []
65770
+ retryable: false
65771
+ schemaId: urn:gala:schema:problem:2.0.0
65772
+ schemaVersion: 2.0.0
65773
+ status: 409
65774
+ title: PLAN_REQUIRED
65775
+ type: urn:gala:problem:plan-required
65776
+ SYNDICATION_CONNECTION_LIMIT:
65777
+ summary: SYNDICATION_CONNECTION_LIMIT
65778
+ value:
65779
+ code: SYNDICATION_CONNECTION_LIMIT
65780
+ correlationId: 018f0000-0000-7000-8000-000000000001
65781
+ detail: See the operation contract.
65782
+ errors: []
65783
+ retryable: false
65784
+ schemaId: urn:gala:schema:problem:2.0.0
65785
+ schemaVersion: 2.0.0
65786
+ status: 409
65787
+ title: SYNDICATION_CONNECTION_LIMIT
65788
+ type: urn:gala:problem:syndication-connection-limit
65586
65789
  schema:
65587
65790
  $ref: "#/components/schemas/Problem"
65588
- description: COMMAND_REPLAY_CONFLICT
65791
+ description: COMMAND_REPLAY_CONFLICT, PLAN_REQUIRED, SYNDICATION_CONNECTION_LIMIT
65589
65792
  headers:
65590
65793
  Cache-Control:
65591
65794
  $ref: "#/components/headers/CacheControlNoStore"
@@ -65593,9 +65796,67 @@ paths:
65593
65796
  $ref: "#/components/headers/XCorrelationId"
65594
65797
  x-gala-problem-codes:
65595
65798
  - COMMAND_REPLAY_CONFLICT
65799
+ - PLAN_REQUIRED
65800
+ - SYNDICATION_CONNECTION_LIMIT
65801
+ "429":
65802
+ content:
65803
+ application/problem+json:
65804
+ examples:
65805
+ RATE_LIMITED:
65806
+ summary: RATE_LIMITED
65807
+ value:
65808
+ code: RATE_LIMITED
65809
+ correlationId: 018f0000-0000-7000-8000-000000000001
65810
+ detail: See the operation contract.
65811
+ errors: []
65812
+ retryable: true
65813
+ schemaId: urn:gala:schema:problem:2.0.0
65814
+ schemaVersion: 2.0.0
65815
+ status: 429
65816
+ title: RATE_LIMITED
65817
+ type: urn:gala:problem:rate-limited
65818
+ schema:
65819
+ $ref: "#/components/schemas/Problem"
65820
+ description: RATE_LIMITED
65821
+ headers:
65822
+ Cache-Control:
65823
+ $ref: "#/components/headers/CacheControlNoStore"
65824
+ Retry-After:
65825
+ $ref: "#/components/headers/RetryAfter"
65826
+ X-Correlation-Id:
65827
+ $ref: "#/components/headers/XCorrelationId"
65828
+ x-gala-problem-codes:
65829
+ - RATE_LIMITED
65830
+ "503":
65831
+ content:
65832
+ application/problem+json:
65833
+ examples:
65834
+ SYNDICATION_X_NOT_CONFIGURED:
65835
+ summary: SYNDICATION_X_NOT_CONFIGURED
65836
+ value:
65837
+ code: SYNDICATION_X_NOT_CONFIGURED
65838
+ correlationId: 018f0000-0000-7000-8000-000000000001
65839
+ detail: See the operation contract.
65840
+ errors: []
65841
+ retryable: false
65842
+ schemaId: urn:gala:schema:problem:2.0.0
65843
+ schemaVersion: 2.0.0
65844
+ status: 503
65845
+ title: SYNDICATION_X_NOT_CONFIGURED
65846
+ type: urn:gala:problem:syndication-x-not-configured
65847
+ schema:
65848
+ $ref: "#/components/schemas/Problem"
65849
+ description: SYNDICATION_X_NOT_CONFIGURED
65850
+ headers:
65851
+ Cache-Control:
65852
+ $ref: "#/components/headers/CacheControlNoStore"
65853
+ X-Correlation-Id:
65854
+ $ref: "#/components/headers/XCorrelationId"
65855
+ x-gala-problem-codes:
65856
+ - SYNDICATION_X_NOT_CONFIGURED
65596
65857
  security:
65597
65858
  - browserSession: []
65598
- summary: remove a syndication connection
65859
+ summary: start connecting X
65599
65860
  tags:
65600
65861
  - syndication
65601
65862
  x-gala-activation-gate: MVP
@@ -65606,22 +65867,26 @@ paths:
65606
65867
  x-gala-conditional-capabilities: []
65607
65868
  x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
65608
65869
  x-gala-nullability: required-and-nullable-are-explicit
65609
- x-gala-purpose: remove a syndication connection
65870
+ x-gala-purpose: start connecting X
65610
65871
  x-gala-reachable-problems:
65611
65872
  - AUTHENTICATION_REQUIRED
65612
65873
  - AUTHORIZATION_DENIED
65613
65874
  - COMMAND_REPLAY_CONFLICT
65875
+ - PLAN_REQUIRED
65876
+ - RATE_LIMITED
65614
65877
  - RESOURCE_NOT_FOUND
65615
- - SYNDICATION_CONNECTION_NOT_FOUND
65878
+ - SYNDICATION_CONNECTION_LIMIT
65879
+ - SYNDICATION_X_NOT_CONFIGURED
65616
65880
  - VALIDATION_FAILED
65617
65881
  x-gala-replay-identity: idempotency-key
65618
65882
  x-gala-state-guards:
65619
65883
  - NONE
65620
- x-gala-success-category: delete
65884
+ x-gala-success-category: create
65621
65885
  x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
65622
- get:
65623
- description: One connection with its status, the reason it needs attention when it does, its options and its newest delivery. Needs `publication.view`.
65624
- operationId: getOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsByConnectionId
65886
+ /v2/organizations/{organizationId}/publications/{publicationId}/syndication-connections/{connectionId}:
65887
+ delete:
65888
+ description: Removes the connection and destroys its saved credential. Posts already made stay on the platform; its deliveries stay in the history with their kind and account name. Needs `publication.settings.manage`. Removing a connection that is already gone answers `404 SYNDICATION_CONNECTION_NOT_FOUND`.
65889
+ operationId: deleteOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsByConnectionId
65625
65890
  parameters:
65626
65891
  - $ref: "#/components/parameters/XCorrelationId"
65627
65892
  - example: 018f0000-0000-7000-8000-000000000001
@@ -65648,27 +65913,11 @@ paths:
65648
65913
  format: uuid
65649
65914
  pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
65650
65915
  type: string
65916
+ - $ref: "#/components/parameters/IdempotencyKey"
65917
+ - $ref: "#/components/parameters/XCsrfToken"
65651
65918
  responses:
65652
- "200":
65653
- content:
65654
- application/json:
65655
- examples:
65656
- nominal:
65657
- summary: Nominal successful response
65658
- value:
65659
- accountLabel: "@example.bsky.social"
65660
- createdAt: "2026-11-05T12:00:00.000Z"
65661
- id: 018f0000-0000-7000-8000-000000000001
65662
- kind: bluesky
65663
- lastDelivery:
65664
- at: "2026-11-05T12:00:00.000Z"
65665
- deliveryId: 018f0000-0000-7000-8000-000000000002
65666
- status: SENT
65667
- options: {}
65668
- status: ACTIVE
65669
- schema:
65670
- $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsByConnectionIdResponse"
65671
- description: read one syndication connection succeeded
65919
+ "204":
65920
+ description: remove a syndication connection succeeded
65672
65921
  headers:
65673
65922
  Cache-Control:
65674
65923
  $ref: "#/components/headers/CacheControlNoStore"
@@ -65796,35 +66045,62 @@ paths:
65796
66045
  x-gala-problem-codes:
65797
66046
  - RESOURCE_NOT_FOUND
65798
66047
  - SYNDICATION_CONNECTION_NOT_FOUND
66048
+ "409":
66049
+ content:
66050
+ application/problem+json:
66051
+ examples:
66052
+ COMMAND_REPLAY_CONFLICT:
66053
+ summary: COMMAND_REPLAY_CONFLICT
66054
+ value:
66055
+ code: COMMAND_REPLAY_CONFLICT
66056
+ correlationId: 018f0000-0000-7000-8000-000000000001
66057
+ detail: See the operation contract.
66058
+ errors: []
66059
+ retryable: false
66060
+ schemaId: urn:gala:schema:problem:2.0.0
66061
+ schemaVersion: 2.0.0
66062
+ status: 409
66063
+ title: COMMAND_REPLAY_CONFLICT
66064
+ type: urn:gala:problem:command-replay-conflict
66065
+ schema:
66066
+ $ref: "#/components/schemas/Problem"
66067
+ description: COMMAND_REPLAY_CONFLICT
66068
+ headers:
66069
+ Cache-Control:
66070
+ $ref: "#/components/headers/CacheControlNoStore"
66071
+ X-Correlation-Id:
66072
+ $ref: "#/components/headers/XCorrelationId"
66073
+ x-gala-problem-codes:
66074
+ - COMMAND_REPLAY_CONFLICT
65799
66075
  security:
65800
66076
  - browserSession: []
65801
- summary: read one syndication connection
66077
+ summary: remove a syndication connection
65802
66078
  tags:
65803
66079
  - syndication
65804
66080
  x-gala-activation-gate: MVP
65805
66081
  x-gala-activation-guards:
65806
66082
  - NONE
65807
- x-gala-capability-key: publication.view
66083
+ x-gala-capability-key: publication.settings.manage
65808
66084
  x-gala-concurrency: authorization-and-publication-epochs
65809
66085
  x-gala-conditional-capabilities: []
65810
66086
  x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
65811
66087
  x-gala-nullability: required-and-nullable-are-explicit
65812
- x-gala-purpose: read one syndication connection
66088
+ x-gala-purpose: remove a syndication connection
65813
66089
  x-gala-reachable-problems:
65814
66090
  - AUTHENTICATION_REQUIRED
65815
66091
  - AUTHORIZATION_DENIED
66092
+ - COMMAND_REPLAY_CONFLICT
65816
66093
  - RESOURCE_NOT_FOUND
65817
66094
  - SYNDICATION_CONNECTION_NOT_FOUND
65818
66095
  - VALIDATION_FAILED
65819
- x-gala-replay-identity: safe-query
66096
+ x-gala-replay-identity: idempotency-key
65820
66097
  x-gala-state-guards:
65821
66098
  - NONE
65822
- x-gala-success-category: query
66099
+ x-gala-success-category: delete
65823
66100
  x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
65824
- /v2/organizations/{organizationId}/publications/{publicationId}/syndication-connections/{connectionId}:pause:
65825
- post:
65826
- description: Stops posting to this platform. Deliveries filed while it is paused are recorded as `SKIPPED`; a post already `RETRYING` is skipped at its next attempt. Pausing a paused connection changes nothing. Needs `publication.settings.manage`.
65827
- operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsByConnectionIdPause
66101
+ get:
66102
+ description: One connection with its status, the reason it needs attention when it does, its options and its newest delivery. Needs `publication.view`.
66103
+ operationId: getOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsByConnectionId
65828
66104
  parameters:
65829
66105
  - $ref: "#/components/parameters/XCorrelationId"
65830
66106
  - example: 018f0000-0000-7000-8000-000000000001
@@ -65851,8 +66127,6 @@ paths:
65851
66127
  format: uuid
65852
66128
  pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
65853
66129
  type: string
65854
- - $ref: "#/components/parameters/IdempotencyKey"
65855
- - $ref: "#/components/parameters/XCsrfToken"
65856
66130
  responses:
65857
66131
  "200":
65858
66132
  content:
@@ -65872,8 +66146,8 @@ paths:
65872
66146
  options: {}
65873
66147
  status: ACTIVE
65874
66148
  schema:
65875
- $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsByConnectionIdPauseResponse"
65876
- description: pause a syndication connection succeeded
66149
+ $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsByConnectionIdResponse"
66150
+ description: read one syndication connection succeeded
65877
66151
  headers:
65878
66152
  Cache-Control:
65879
66153
  $ref: "#/components/headers/CacheControlNoStore"
@@ -66001,63 +66275,35 @@ paths:
66001
66275
  x-gala-problem-codes:
66002
66276
  - RESOURCE_NOT_FOUND
66003
66277
  - SYNDICATION_CONNECTION_NOT_FOUND
66004
- "409":
66005
- content:
66006
- application/problem+json:
66007
- examples:
66008
- COMMAND_REPLAY_CONFLICT:
66009
- summary: COMMAND_REPLAY_CONFLICT
66010
- value:
66011
- code: COMMAND_REPLAY_CONFLICT
66012
- correlationId: 018f0000-0000-7000-8000-000000000001
66013
- detail: See the operation contract.
66014
- errors: []
66015
- retryable: false
66016
- schemaId: urn:gala:schema:problem:2.0.0
66017
- schemaVersion: 2.0.0
66018
- status: 409
66019
- title: COMMAND_REPLAY_CONFLICT
66020
- type: urn:gala:problem:command-replay-conflict
66021
- schema:
66022
- $ref: "#/components/schemas/Problem"
66023
- description: COMMAND_REPLAY_CONFLICT
66024
- headers:
66025
- Cache-Control:
66026
- $ref: "#/components/headers/CacheControlNoStore"
66027
- X-Correlation-Id:
66028
- $ref: "#/components/headers/XCorrelationId"
66029
- x-gala-problem-codes:
66030
- - COMMAND_REPLAY_CONFLICT
66031
66278
  security:
66032
66279
  - browserSession: []
66033
- summary: pause a syndication connection
66280
+ summary: read one syndication connection
66034
66281
  tags:
66035
66282
  - syndication
66036
66283
  x-gala-activation-gate: MVP
66037
66284
  x-gala-activation-guards:
66038
66285
  - NONE
66039
- x-gala-capability-key: publication.settings.manage
66286
+ x-gala-capability-key: publication.view
66040
66287
  x-gala-concurrency: authorization-and-publication-epochs
66041
66288
  x-gala-conditional-capabilities: []
66042
66289
  x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
66043
66290
  x-gala-nullability: required-and-nullable-are-explicit
66044
- x-gala-purpose: pause a syndication connection
66291
+ x-gala-purpose: read one syndication connection
66045
66292
  x-gala-reachable-problems:
66046
66293
  - AUTHENTICATION_REQUIRED
66047
66294
  - AUTHORIZATION_DENIED
66048
- - COMMAND_REPLAY_CONFLICT
66049
66295
  - RESOURCE_NOT_FOUND
66050
66296
  - SYNDICATION_CONNECTION_NOT_FOUND
66051
66297
  - VALIDATION_FAILED
66052
- x-gala-replay-identity: idempotency-key
66298
+ x-gala-replay-identity: safe-query
66053
66299
  x-gala-state-guards:
66054
66300
  - NONE
66055
- x-gala-success-category: protocol
66301
+ x-gala-success-category: query
66056
66302
  x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
66057
- /v2/organizations/{organizationId}/publications/{publicationId}/syndication-connections/{connectionId}:replace-credential:
66303
+ /v2/organizations/{organizationId}/publications/{publicationId}/syndication-connections/{connectionId}:pause:
66058
66304
  post:
66059
- description: "Checks the new credential with the platform and, when it is accepted, replaces the saved one and sets the connection `ACTIVE`; the old credential is destroyed. The new `credential.kind` must equal the connection's kind. Same problems as connecting: `422 SYNDICATION_CREDENTIAL_REJECTED` with the platform's message, `503 SYNDICATION_PLATFORM_UNAVAILABLE`. Needs `publication.settings.manage`."
66060
- operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsByConnectionIdReplaceCredential
66305
+ description: Stops posting to this platform. Deliveries filed while it is paused are recorded as `SKIPPED`; a post already `RETRYING` is skipped at its next attempt. Pausing a paused connection changes nothing. Needs `publication.settings.manage`.
66306
+ operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsByConnectionIdPause
66061
66307
  parameters:
66062
66308
  - $ref: "#/components/parameters/XCorrelationId"
66063
66309
  - example: 018f0000-0000-7000-8000-000000000001
@@ -66086,20 +66332,6 @@ paths:
66086
66332
  type: string
66087
66333
  - $ref: "#/components/parameters/IdempotencyKey"
66088
66334
  - $ref: "#/components/parameters/XCsrfToken"
66089
- requestBody:
66090
- content:
66091
- application/json:
66092
- examples:
66093
- nominal:
66094
- summary: Nominal valid request
66095
- value:
66096
- credential:
66097
- appPassword: abcd-efgh-ijkl-mnop
66098
- handle: example.bsky.social
66099
- kind: bluesky
66100
- schema:
66101
- $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsByConnectionIdReplaceCredentialRequest"
66102
- required: true
66103
66335
  responses:
66104
66336
  "200":
66105
66337
  content:
@@ -66119,8 +66351,8 @@ paths:
66119
66351
  options: {}
66120
66352
  status: ACTIVE
66121
66353
  schema:
66122
- $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsByConnectionIdReplaceCredentialResponse"
66123
- description: replace the credential of a syndication connection succeeded
66354
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsByConnectionIdPauseResponse"
66355
+ description: pause a syndication connection succeeded
66124
66356
  headers:
66125
66357
  Cache-Control:
66126
66358
  $ref: "#/components/headers/CacheControlNoStore"
@@ -66130,19 +66362,6 @@ paths:
66130
66362
  content:
66131
66363
  application/problem+json:
66132
66364
  examples:
66133
- REQUEST_FIELD_UNKNOWN:
66134
- summary: REQUEST_FIELD_UNKNOWN
66135
- value:
66136
- code: REQUEST_FIELD_UNKNOWN
66137
- correlationId: 018f0000-0000-7000-8000-000000000001
66138
- detail: See the operation contract.
66139
- errors: []
66140
- retryable: false
66141
- schemaId: urn:gala:schema:problem:2.0.0
66142
- schemaVersion: 2.0.0
66143
- status: 400
66144
- title: REQUEST_FIELD_UNKNOWN
66145
- type: urn:gala:problem:request-field-unknown
66146
66365
  VALIDATION_FAILED:
66147
66366
  summary: VALIDATION_FAILED
66148
66367
  value:
@@ -66158,14 +66377,13 @@ paths:
66158
66377
  type: urn:gala:problem:validation-failed
66159
66378
  schema:
66160
66379
  $ref: "#/components/schemas/Problem"
66161
- description: REQUEST_FIELD_UNKNOWN, VALIDATION_FAILED
66380
+ description: VALIDATION_FAILED
66162
66381
  headers:
66163
66382
  Cache-Control:
66164
66383
  $ref: "#/components/headers/CacheControlNoStore"
66165
66384
  X-Correlation-Id:
66166
66385
  $ref: "#/components/headers/XCorrelationId"
66167
66386
  x-gala-problem-codes:
66168
- - REQUEST_FIELD_UNKNOWN
66169
66387
  - VALIDATION_FAILED
66170
66388
  "401":
66171
66389
  content:
@@ -66289,93 +66507,9 @@ paths:
66289
66507
  $ref: "#/components/headers/XCorrelationId"
66290
66508
  x-gala-problem-codes:
66291
66509
  - COMMAND_REPLAY_CONFLICT
66292
- "422":
66293
- content:
66294
- application/problem+json:
66295
- examples:
66296
- SYNDICATION_CREDENTIAL_REJECTED:
66297
- summary: SYNDICATION_CREDENTIAL_REJECTED
66298
- value:
66299
- code: SYNDICATION_CREDENTIAL_REJECTED
66300
- correlationId: 018f0000-0000-7000-8000-000000000001
66301
- detail: See the operation contract.
66302
- errors: []
66303
- platformMessage: Bad credentials
66304
- retryable: false
66305
- schemaId: urn:gala:schema:problem:2.0.0
66306
- schemaVersion: 2.0.0
66307
- status: 422
66308
- title: SYNDICATION_CREDENTIAL_REJECTED
66309
- type: urn:gala:problem:syndication-credential-rejected
66310
- schema:
66311
- $ref: "#/components/schemas/Problem"
66312
- description: SYNDICATION_CREDENTIAL_REJECTED
66313
- headers:
66314
- Cache-Control:
66315
- $ref: "#/components/headers/CacheControlNoStore"
66316
- X-Correlation-Id:
66317
- $ref: "#/components/headers/XCorrelationId"
66318
- x-gala-problem-codes:
66319
- - SYNDICATION_CREDENTIAL_REJECTED
66320
- "429":
66321
- content:
66322
- application/problem+json:
66323
- examples:
66324
- RATE_LIMITED:
66325
- summary: RATE_LIMITED
66326
- value:
66327
- code: RATE_LIMITED
66328
- correlationId: 018f0000-0000-7000-8000-000000000001
66329
- detail: See the operation contract.
66330
- errors: []
66331
- retryable: true
66332
- schemaId: urn:gala:schema:problem:2.0.0
66333
- schemaVersion: 2.0.0
66334
- status: 429
66335
- title: RATE_LIMITED
66336
- type: urn:gala:problem:rate-limited
66337
- schema:
66338
- $ref: "#/components/schemas/Problem"
66339
- description: RATE_LIMITED
66340
- headers:
66341
- Cache-Control:
66342
- $ref: "#/components/headers/CacheControlNoStore"
66343
- Retry-After:
66344
- $ref: "#/components/headers/RetryAfter"
66345
- X-Correlation-Id:
66346
- $ref: "#/components/headers/XCorrelationId"
66347
- x-gala-problem-codes:
66348
- - RATE_LIMITED
66349
- "503":
66350
- content:
66351
- application/problem+json:
66352
- examples:
66353
- SYNDICATION_PLATFORM_UNAVAILABLE:
66354
- summary: SYNDICATION_PLATFORM_UNAVAILABLE
66355
- value:
66356
- code: SYNDICATION_PLATFORM_UNAVAILABLE
66357
- correlationId: 018f0000-0000-7000-8000-000000000001
66358
- detail: See the operation contract.
66359
- errors: []
66360
- retryable: true
66361
- schemaId: urn:gala:schema:problem:2.0.0
66362
- schemaVersion: 2.0.0
66363
- status: 503
66364
- title: SYNDICATION_PLATFORM_UNAVAILABLE
66365
- type: urn:gala:problem:syndication-platform-unavailable
66366
- schema:
66367
- $ref: "#/components/schemas/Problem"
66368
- description: SYNDICATION_PLATFORM_UNAVAILABLE
66369
- headers:
66370
- Cache-Control:
66371
- $ref: "#/components/headers/CacheControlNoStore"
66372
- X-Correlation-Id:
66373
- $ref: "#/components/headers/XCorrelationId"
66374
- x-gala-problem-codes:
66375
- - SYNDICATION_PLATFORM_UNAVAILABLE
66376
66510
  security:
66377
66511
  - browserSession: []
66378
- summary: replace the credential of a syndication connection
66512
+ summary: pause a syndication connection
66379
66513
  tags:
66380
66514
  - syndication
66381
66515
  x-gala-activation-gate: MVP
@@ -66386,27 +66520,23 @@ paths:
66386
66520
  x-gala-conditional-capabilities: []
66387
66521
  x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
66388
66522
  x-gala-nullability: required-and-nullable-are-explicit
66389
- x-gala-purpose: replace the credential of a syndication connection
66523
+ x-gala-purpose: pause a syndication connection
66390
66524
  x-gala-reachable-problems:
66391
66525
  - AUTHENTICATION_REQUIRED
66392
66526
  - AUTHORIZATION_DENIED
66393
66527
  - COMMAND_REPLAY_CONFLICT
66394
- - RATE_LIMITED
66395
- - REQUEST_FIELD_UNKNOWN
66396
66528
  - RESOURCE_NOT_FOUND
66397
66529
  - SYNDICATION_CONNECTION_NOT_FOUND
66398
- - SYNDICATION_CREDENTIAL_REJECTED
66399
- - SYNDICATION_PLATFORM_UNAVAILABLE
66400
66530
  - VALIDATION_FAILED
66401
66531
  x-gala-replay-identity: idempotency-key
66402
66532
  x-gala-state-guards:
66403
66533
  - NONE
66404
66534
  x-gala-success-category: protocol
66405
66535
  x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
66406
- /v2/organizations/{organizationId}/publications/{publicationId}/syndication-connections/{connectionId}:resume:
66536
+ /v2/organizations/{organizationId}/publications/{publicationId}/syndication-connections/{connectionId}:replace-credential:
66407
66537
  post:
66408
- description: Checks the saved credential with the platform, then sets the connection `ACTIVE`. Resuming an active connection checks it again and changes nothing else. `422 SYNDICATION_CREDENTIAL_REJECTED` when the platform no longer accepts the credential (the connection then needs attention), `503 SYNDICATION_PLATFORM_UNAVAILABLE` when the platform could not be reached. Needs `publication.settings.manage`.
66409
- operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsByConnectionIdResume
66538
+ description: "Checks the new credential with the platform and, when it is accepted, replaces the saved one and sets the connection `ACTIVE`; the old credential is destroyed. The new `credential.kind` must equal the connection's kind. Same problems as connecting: `422 SYNDICATION_CREDENTIAL_REJECTED` with the platform's message, `503 SYNDICATION_PLATFORM_UNAVAILABLE`. Needs `publication.settings.manage`. SCHEMA-3.41.0: an `x` connection takes no credential; it is reconnected through `syndication-connections/x:authorize`, and this operation refuses it."
66539
+ operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsByConnectionIdReplaceCredential
66410
66540
  parameters:
66411
66541
  - $ref: "#/components/parameters/XCorrelationId"
66412
66542
  - example: 018f0000-0000-7000-8000-000000000001
@@ -66435,6 +66565,20 @@ paths:
66435
66565
  type: string
66436
66566
  - $ref: "#/components/parameters/IdempotencyKey"
66437
66567
  - $ref: "#/components/parameters/XCsrfToken"
66568
+ requestBody:
66569
+ content:
66570
+ application/json:
66571
+ examples:
66572
+ nominal:
66573
+ summary: Nominal valid request
66574
+ value:
66575
+ credential:
66576
+ appPassword: abcd-efgh-ijkl-mnop
66577
+ handle: example.bsky.social
66578
+ kind: bluesky
66579
+ schema:
66580
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsByConnectionIdReplaceCredentialRequest"
66581
+ required: true
66438
66582
  responses:
66439
66583
  "200":
66440
66584
  content:
@@ -66454,8 +66598,8 @@ paths:
66454
66598
  options: {}
66455
66599
  status: ACTIVE
66456
66600
  schema:
66457
- $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsByConnectionIdResumeResponse"
66458
- description: resume a syndication connection succeeded
66601
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsByConnectionIdReplaceCredentialResponse"
66602
+ description: replace the credential of a syndication connection succeeded
66459
66603
  headers:
66460
66604
  Cache-Control:
66461
66605
  $ref: "#/components/headers/CacheControlNoStore"
@@ -66465,6 +66609,19 @@ paths:
66465
66609
  content:
66466
66610
  application/problem+json:
66467
66611
  examples:
66612
+ REQUEST_FIELD_UNKNOWN:
66613
+ summary: REQUEST_FIELD_UNKNOWN
66614
+ value:
66615
+ code: REQUEST_FIELD_UNKNOWN
66616
+ correlationId: 018f0000-0000-7000-8000-000000000001
66617
+ detail: See the operation contract.
66618
+ errors: []
66619
+ retryable: false
66620
+ schemaId: urn:gala:schema:problem:2.0.0
66621
+ schemaVersion: 2.0.0
66622
+ status: 400
66623
+ title: REQUEST_FIELD_UNKNOWN
66624
+ type: urn:gala:problem:request-field-unknown
66468
66625
  VALIDATION_FAILED:
66469
66626
  summary: VALIDATION_FAILED
66470
66627
  value:
@@ -66480,13 +66637,14 @@ paths:
66480
66637
  type: urn:gala:problem:validation-failed
66481
66638
  schema:
66482
66639
  $ref: "#/components/schemas/Problem"
66483
- description: VALIDATION_FAILED
66640
+ description: REQUEST_FIELD_UNKNOWN, VALIDATION_FAILED
66484
66641
  headers:
66485
66642
  Cache-Control:
66486
66643
  $ref: "#/components/headers/CacheControlNoStore"
66487
66644
  X-Correlation-Id:
66488
66645
  $ref: "#/components/headers/XCorrelationId"
66489
66646
  x-gala-problem-codes:
66647
+ - REQUEST_FIELD_UNKNOWN
66490
66648
  - VALIDATION_FAILED
66491
66649
  "401":
66492
66650
  content:
@@ -66696,7 +66854,7 @@ paths:
66696
66854
  - SYNDICATION_PLATFORM_UNAVAILABLE
66697
66855
  security:
66698
66856
  - browserSession: []
66699
- summary: resume a syndication connection
66857
+ summary: replace the credential of a syndication connection
66700
66858
  tags:
66701
66859
  - syndication
66702
66860
  x-gala-activation-gate: MVP
@@ -66707,12 +66865,13 @@ paths:
66707
66865
  x-gala-conditional-capabilities: []
66708
66866
  x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
66709
66867
  x-gala-nullability: required-and-nullable-are-explicit
66710
- x-gala-purpose: resume a syndication connection
66868
+ x-gala-purpose: replace the credential of a syndication connection
66711
66869
  x-gala-reachable-problems:
66712
66870
  - AUTHENTICATION_REQUIRED
66713
66871
  - AUTHORIZATION_DENIED
66714
66872
  - COMMAND_REPLAY_CONFLICT
66715
66873
  - RATE_LIMITED
66874
+ - REQUEST_FIELD_UNKNOWN
66716
66875
  - RESOURCE_NOT_FOUND
66717
66876
  - SYNDICATION_CONNECTION_NOT_FOUND
66718
66877
  - SYNDICATION_CREDENTIAL_REJECTED
@@ -66723,10 +66882,10 @@ paths:
66723
66882
  - NONE
66724
66883
  x-gala-success-category: protocol
66725
66884
  x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
66726
- /v2/organizations/{organizationId}/publications/{publicationId}/syndication-connections/{connectionId}:verify:
66885
+ /v2/organizations/{organizationId}/publications/{publicationId}/syndication-connections/{connectionId}:resume:
66727
66886
  post:
66728
- description: Checks the saved credential with the platform now and refreshes `accountLabel`. A paused connection stays paused; a connection that needs attention becomes `ACTIVE` when the platform accepts the credential. `422 SYNDICATION_CREDENTIAL_REJECTED` when it does not (the connection then needs attention), `503 SYNDICATION_PLATFORM_UNAVAILABLE` when the platform could not be reached. Needs `publication.settings.manage`.
66729
- operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsByConnectionIdVerify
66887
+ description: Checks the saved credential with the platform, then sets the connection `ACTIVE`. Resuming an active connection checks it again and changes nothing else. `422 SYNDICATION_CREDENTIAL_REJECTED` when the platform no longer accepts the credential (the connection then needs attention), `503 SYNDICATION_PLATFORM_UNAVAILABLE` when the platform could not be reached. Needs `publication.settings.manage`.
66888
+ operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsByConnectionIdResume
66730
66889
  parameters:
66731
66890
  - $ref: "#/components/parameters/XCorrelationId"
66732
66891
  - example: 018f0000-0000-7000-8000-000000000001
@@ -66774,8 +66933,8 @@ paths:
66774
66933
  options: {}
66775
66934
  status: ACTIVE
66776
66935
  schema:
66777
- $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsByConnectionIdVerifyResponse"
66778
- description: check a syndication connection succeeded
66936
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsByConnectionIdResumeResponse"
66937
+ description: resume a syndication connection succeeded
66779
66938
  headers:
66780
66939
  Cache-Control:
66781
66940
  $ref: "#/components/headers/CacheControlNoStore"
@@ -67016,7 +67175,7 @@ paths:
67016
67175
  - SYNDICATION_PLATFORM_UNAVAILABLE
67017
67176
  security:
67018
67177
  - browserSession: []
67019
- summary: check a syndication connection
67178
+ summary: resume a syndication connection
67020
67179
  tags:
67021
67180
  - syndication
67022
67181
  x-gala-activation-gate: MVP
@@ -67027,7 +67186,7 @@ paths:
67027
67186
  x-gala-conditional-capabilities: []
67028
67187
  x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
67029
67188
  x-gala-nullability: required-and-nullable-are-explicit
67030
- x-gala-purpose: check a syndication connection
67189
+ x-gala-purpose: resume a syndication connection
67031
67190
  x-gala-reachable-problems:
67032
67191
  - AUTHENTICATION_REQUIRED
67033
67192
  - AUTHORIZATION_DENIED
@@ -67043,10 +67202,10 @@ paths:
67043
67202
  - NONE
67044
67203
  x-gala-success-category: protocol
67045
67204
  x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
67046
- /v2/organizations/{organizationId}/publications/{publicationId}/syndication-deliveries:
67047
- get:
67048
- description: "The newest 50 deliveries of this publication, newest first: what was posted where, what is waiting to be retried and what failed and why. Needs `publication.view`."
67049
- operationId: getOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationDeliveries
67205
+ /v2/organizations/{organizationId}/publications/{publicationId}/syndication-connections/{connectionId}:verify:
67206
+ post:
67207
+ description: Checks the saved credential with the platform now and refreshes `accountLabel`. A paused connection stays paused; a connection that needs attention becomes `ACTIVE` when the platform accepts the credential. `422 SYNDICATION_CREDENTIAL_REJECTED` when it does not (the connection then needs attention), `503 SYNDICATION_PLATFORM_UNAVAILABLE` when the platform could not be reached. Needs `publication.settings.manage`.
67208
+ operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsByConnectionIdVerify
67050
67209
  parameters:
67051
67210
  - $ref: "#/components/parameters/XCorrelationId"
67052
67211
  - example: 018f0000-0000-7000-8000-000000000001
@@ -67065,184 +67224,9 @@ paths:
67065
67224
  format: uuid
67066
67225
  pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
67067
67226
  type: string
67068
- responses:
67069
- "200":
67070
- content:
67071
- application/json:
67072
- examples:
67073
- nominal:
67074
- summary: Nominal successful response
67075
- value:
67076
- deliveries:
67077
- - accountLabel: "@example.bsky.social"
67078
- attemptCount: 1
67079
- connectionId: 018f0000-0000-7000-8000-000000000001
67080
- contentId: 018f0000-0000-7000-8000-000000000003
67081
- contentTitle: Why we cut onboarding from nine steps to four
67082
- createdAt: "2026-11-05T12:00:00.000Z"
67083
- externalUrl: https://bsky.app/profile/example.bsky.social/post/3kexample
67084
- id: 018f0000-0000-7000-8000-000000000002
67085
- kind: bluesky
67086
- liveUrl: https://example.com/onboarding/
67087
- requestedBy: ANNOUNCEMENT
67088
- status: SENT
67089
- updatedAt: "2026-11-05T12:00:00.000Z"
67090
- schema:
67091
- $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationDeliveriesResponse"
67092
- description: list syndication deliveries succeeded
67093
- headers:
67094
- Cache-Control:
67095
- $ref: "#/components/headers/CacheControlNoStore"
67096
- X-Correlation-Id:
67097
- $ref: "#/components/headers/XCorrelationId"
67098
- "400":
67099
- content:
67100
- application/problem+json:
67101
- examples:
67102
- VALIDATION_FAILED:
67103
- summary: VALIDATION_FAILED
67104
- value:
67105
- code: VALIDATION_FAILED
67106
- correlationId: 018f0000-0000-7000-8000-000000000001
67107
- detail: See the operation contract.
67108
- errors: []
67109
- retryable: false
67110
- schemaId: urn:gala:schema:problem:2.0.0
67111
- schemaVersion: 2.0.0
67112
- status: 400
67113
- title: VALIDATION_FAILED
67114
- type: urn:gala:problem:validation-failed
67115
- schema:
67116
- $ref: "#/components/schemas/Problem"
67117
- description: VALIDATION_FAILED
67118
- headers:
67119
- Cache-Control:
67120
- $ref: "#/components/headers/CacheControlNoStore"
67121
- X-Correlation-Id:
67122
- $ref: "#/components/headers/XCorrelationId"
67123
- x-gala-problem-codes:
67124
- - VALIDATION_FAILED
67125
- "401":
67126
- content:
67127
- application/problem+json:
67128
- examples:
67129
- AUTHENTICATION_REQUIRED:
67130
- summary: AUTHENTICATION_REQUIRED
67131
- value:
67132
- code: AUTHENTICATION_REQUIRED
67133
- correlationId: 018f0000-0000-7000-8000-000000000001
67134
- detail: See the operation contract.
67135
- errors: []
67136
- retryable: false
67137
- schemaId: urn:gala:schema:problem:2.0.0
67138
- schemaVersion: 2.0.0
67139
- status: 401
67140
- title: AUTHENTICATION_REQUIRED
67141
- type: urn:gala:problem:authentication-required
67142
- schema:
67143
- $ref: "#/components/schemas/Problem"
67144
- description: AUTHENTICATION_REQUIRED
67145
- headers:
67146
- Cache-Control:
67147
- $ref: "#/components/headers/CacheControlNoStore"
67148
- X-Correlation-Id:
67149
- $ref: "#/components/headers/XCorrelationId"
67150
- x-gala-problem-codes:
67151
- - AUTHENTICATION_REQUIRED
67152
- "403":
67153
- content:
67154
- application/problem+json:
67155
- examples:
67156
- AUTHORIZATION_DENIED:
67157
- summary: AUTHORIZATION_DENIED
67158
- value:
67159
- code: AUTHORIZATION_DENIED
67160
- correlationId: 018f0000-0000-7000-8000-000000000001
67161
- detail: See the operation contract.
67162
- errors: []
67163
- retryable: false
67164
- schemaId: urn:gala:schema:problem:2.0.0
67165
- schemaVersion: 2.0.0
67166
- status: 403
67167
- title: AUTHORIZATION_DENIED
67168
- type: urn:gala:problem:authorization-denied
67169
- schema:
67170
- $ref: "#/components/schemas/Problem"
67171
- description: AUTHORIZATION_DENIED
67172
- headers:
67173
- Cache-Control:
67174
- $ref: "#/components/headers/CacheControlNoStore"
67175
- X-Correlation-Id:
67176
- $ref: "#/components/headers/XCorrelationId"
67177
- x-gala-problem-codes:
67178
- - AUTHORIZATION_DENIED
67179
- "404":
67180
- content:
67181
- application/problem+json:
67182
- examples:
67183
- RESOURCE_NOT_FOUND:
67184
- summary: RESOURCE_NOT_FOUND
67185
- value:
67186
- code: RESOURCE_NOT_FOUND
67187
- correlationId: 018f0000-0000-7000-8000-000000000001
67188
- detail: See the operation contract.
67189
- errors: []
67190
- retryable: false
67191
- schemaId: urn:gala:schema:problem:2.0.0
67192
- schemaVersion: 2.0.0
67193
- status: 404
67194
- title: RESOURCE_NOT_FOUND
67195
- type: urn:gala:problem:resource-not-found
67196
- schema:
67197
- $ref: "#/components/schemas/Problem"
67198
- description: RESOURCE_NOT_FOUND
67199
- headers:
67200
- Cache-Control:
67201
- $ref: "#/components/headers/CacheControlNoStore"
67202
- X-Correlation-Id:
67203
- $ref: "#/components/headers/XCorrelationId"
67204
- x-gala-problem-codes:
67205
- - RESOURCE_NOT_FOUND
67206
- security:
67207
- - browserSession: []
67208
- summary: list syndication deliveries
67209
- tags:
67210
- - syndication
67211
- x-gala-activation-gate: MVP
67212
- x-gala-activation-guards:
67213
- - NONE
67214
- x-gala-capability-key: publication.view
67215
- x-gala-concurrency: authorization-and-publication-epochs
67216
- x-gala-conditional-capabilities: []
67217
- x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
67218
- x-gala-nullability: required-and-nullable-are-explicit
67219
- x-gala-purpose: list syndication deliveries
67220
- x-gala-reachable-problems:
67221
- - AUTHENTICATION_REQUIRED
67222
- - AUTHORIZATION_DENIED
67223
- - RESOURCE_NOT_FOUND
67224
- - VALIDATION_FAILED
67225
- x-gala-replay-identity: safe-query
67226
- x-gala-state-guards:
67227
- - NONE
67228
- x-gala-success-category: query
67229
- x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
67230
- post:
67231
- description: Files one delivery of a post that is already live to each chosen connection and answers `202` with the new deliveries in the order of `connectionIds`; the posting itself happens afterwards. Needs `publication.settings.manage`. `409 SYNDICATION_POST_NOT_LIVE` when `contentId` has no live announcement; `404 SYNDICATION_CONNECTION_NOT_FOUND` when a connection id is not this publication's; `409 SYNDICATION_CONNECTION_NOT_ACTIVE` when a named connection is paused or needs attention (nothing is filed).
67232
- operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationDeliveries
67233
- parameters:
67234
- - $ref: "#/components/parameters/XCorrelationId"
67235
67227
  - example: 018f0000-0000-7000-8000-000000000001
67236
67228
  in: path
67237
- name: organizationId
67238
- required: true
67239
- schema:
67240
- format: uuid
67241
- pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
67242
- type: string
67243
- - example: 018f0000-0000-7000-8000-000000000001
67244
- in: path
67245
- name: publicationId
67229
+ name: connectionId
67246
67230
  required: true
67247
67231
  schema:
67248
67232
  format: uuid
@@ -67250,44 +67234,27 @@ paths:
67250
67234
  type: string
67251
67235
  - $ref: "#/components/parameters/IdempotencyKey"
67252
67236
  - $ref: "#/components/parameters/XCsrfToken"
67253
- requestBody:
67254
- content:
67255
- application/json:
67256
- examples:
67257
- nominal:
67258
- summary: Nominal valid request
67259
- value:
67260
- connectionIds:
67261
- - 018f0000-0000-7000-8000-000000000001
67262
- contentId: 018f0000-0000-7000-8000-000000000003
67263
- schema:
67264
- $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationDeliveriesRequest"
67265
- required: true
67266
67237
  responses:
67267
- "202":
67238
+ "200":
67268
67239
  content:
67269
67240
  application/json:
67270
67241
  examples:
67271
67242
  nominal:
67272
67243
  summary: Nominal successful response
67273
67244
  value:
67274
- deliveries:
67275
- - accountLabel: "@example.bsky.social"
67276
- attemptCount: 1
67277
- connectionId: 018f0000-0000-7000-8000-000000000001
67278
- contentId: 018f0000-0000-7000-8000-000000000003
67279
- contentTitle: Why we cut onboarding from nine steps to four
67280
- createdAt: "2026-11-05T12:00:00.000Z"
67281
- externalUrl: https://bsky.app/profile/example.bsky.social/post/3kexample
67282
- id: 018f0000-0000-7000-8000-000000000002
67283
- kind: bluesky
67284
- liveUrl: https://example.com/onboarding/
67285
- requestedBy: MANUAL
67286
- status: PENDING
67287
- updatedAt: "2026-11-05T12:00:00.000Z"
67245
+ accountLabel: "@example.bsky.social"
67246
+ createdAt: "2026-11-05T12:00:00.000Z"
67247
+ id: 018f0000-0000-7000-8000-000000000001
67248
+ kind: bluesky
67249
+ lastDelivery:
67250
+ at: "2026-11-05T12:00:00.000Z"
67251
+ deliveryId: 018f0000-0000-7000-8000-000000000002
67252
+ status: SENT
67253
+ options: {}
67254
+ status: ACTIVE
67288
67255
  schema:
67289
- $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationDeliveriesResponse"
67290
- description: send an earlier post to syndication connections accepted
67256
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationConnectionsByConnectionIdVerifyResponse"
67257
+ description: check a syndication connection succeeded
67291
67258
  headers:
67292
67259
  Cache-Control:
67293
67260
  $ref: "#/components/headers/CacheControlNoStore"
@@ -67297,19 +67264,6 @@ paths:
67297
67264
  content:
67298
67265
  application/problem+json:
67299
67266
  examples:
67300
- REQUEST_FIELD_UNKNOWN:
67301
- summary: REQUEST_FIELD_UNKNOWN
67302
- value:
67303
- code: REQUEST_FIELD_UNKNOWN
67304
- correlationId: 018f0000-0000-7000-8000-000000000001
67305
- detail: See the operation contract.
67306
- errors: []
67307
- retryable: false
67308
- schemaId: urn:gala:schema:problem:2.0.0
67309
- schemaVersion: 2.0.0
67310
- status: 400
67311
- title: REQUEST_FIELD_UNKNOWN
67312
- type: urn:gala:problem:request-field-unknown
67313
67267
  VALIDATION_FAILED:
67314
67268
  summary: VALIDATION_FAILED
67315
67269
  value:
@@ -67325,14 +67279,539 @@ paths:
67325
67279
  type: urn:gala:problem:validation-failed
67326
67280
  schema:
67327
67281
  $ref: "#/components/schemas/Problem"
67328
- description: REQUEST_FIELD_UNKNOWN, VALIDATION_FAILED
67282
+ description: VALIDATION_FAILED
67329
67283
  headers:
67330
67284
  Cache-Control:
67331
67285
  $ref: "#/components/headers/CacheControlNoStore"
67332
67286
  X-Correlation-Id:
67333
67287
  $ref: "#/components/headers/XCorrelationId"
67334
67288
  x-gala-problem-codes:
67335
- - REQUEST_FIELD_UNKNOWN
67289
+ - VALIDATION_FAILED
67290
+ "401":
67291
+ content:
67292
+ application/problem+json:
67293
+ examples:
67294
+ AUTHENTICATION_REQUIRED:
67295
+ summary: AUTHENTICATION_REQUIRED
67296
+ value:
67297
+ code: AUTHENTICATION_REQUIRED
67298
+ correlationId: 018f0000-0000-7000-8000-000000000001
67299
+ detail: See the operation contract.
67300
+ errors: []
67301
+ retryable: false
67302
+ schemaId: urn:gala:schema:problem:2.0.0
67303
+ schemaVersion: 2.0.0
67304
+ status: 401
67305
+ title: AUTHENTICATION_REQUIRED
67306
+ type: urn:gala:problem:authentication-required
67307
+ schema:
67308
+ $ref: "#/components/schemas/Problem"
67309
+ description: AUTHENTICATION_REQUIRED
67310
+ headers:
67311
+ Cache-Control:
67312
+ $ref: "#/components/headers/CacheControlNoStore"
67313
+ X-Correlation-Id:
67314
+ $ref: "#/components/headers/XCorrelationId"
67315
+ x-gala-problem-codes:
67316
+ - AUTHENTICATION_REQUIRED
67317
+ "403":
67318
+ content:
67319
+ application/problem+json:
67320
+ examples:
67321
+ AUTHORIZATION_DENIED:
67322
+ summary: AUTHORIZATION_DENIED
67323
+ value:
67324
+ code: AUTHORIZATION_DENIED
67325
+ correlationId: 018f0000-0000-7000-8000-000000000001
67326
+ detail: See the operation contract.
67327
+ errors: []
67328
+ retryable: false
67329
+ schemaId: urn:gala:schema:problem:2.0.0
67330
+ schemaVersion: 2.0.0
67331
+ status: 403
67332
+ title: AUTHORIZATION_DENIED
67333
+ type: urn:gala:problem:authorization-denied
67334
+ schema:
67335
+ $ref: "#/components/schemas/Problem"
67336
+ description: AUTHORIZATION_DENIED
67337
+ headers:
67338
+ Cache-Control:
67339
+ $ref: "#/components/headers/CacheControlNoStore"
67340
+ X-Correlation-Id:
67341
+ $ref: "#/components/headers/XCorrelationId"
67342
+ x-gala-problem-codes:
67343
+ - AUTHORIZATION_DENIED
67344
+ "404":
67345
+ content:
67346
+ application/problem+json:
67347
+ examples:
67348
+ RESOURCE_NOT_FOUND:
67349
+ summary: RESOURCE_NOT_FOUND
67350
+ value:
67351
+ code: RESOURCE_NOT_FOUND
67352
+ correlationId: 018f0000-0000-7000-8000-000000000001
67353
+ detail: See the operation contract.
67354
+ errors: []
67355
+ retryable: false
67356
+ schemaId: urn:gala:schema:problem:2.0.0
67357
+ schemaVersion: 2.0.0
67358
+ status: 404
67359
+ title: RESOURCE_NOT_FOUND
67360
+ type: urn:gala:problem:resource-not-found
67361
+ SYNDICATION_CONNECTION_NOT_FOUND:
67362
+ summary: SYNDICATION_CONNECTION_NOT_FOUND
67363
+ value:
67364
+ code: SYNDICATION_CONNECTION_NOT_FOUND
67365
+ correlationId: 018f0000-0000-7000-8000-000000000001
67366
+ detail: See the operation contract.
67367
+ errors: []
67368
+ retryable: false
67369
+ schemaId: urn:gala:schema:problem:2.0.0
67370
+ schemaVersion: 2.0.0
67371
+ status: 404
67372
+ title: SYNDICATION_CONNECTION_NOT_FOUND
67373
+ type: urn:gala:problem:syndication-connection-not-found
67374
+ schema:
67375
+ $ref: "#/components/schemas/Problem"
67376
+ description: RESOURCE_NOT_FOUND, SYNDICATION_CONNECTION_NOT_FOUND
67377
+ headers:
67378
+ Cache-Control:
67379
+ $ref: "#/components/headers/CacheControlNoStore"
67380
+ X-Correlation-Id:
67381
+ $ref: "#/components/headers/XCorrelationId"
67382
+ x-gala-problem-codes:
67383
+ - RESOURCE_NOT_FOUND
67384
+ - SYNDICATION_CONNECTION_NOT_FOUND
67385
+ "409":
67386
+ content:
67387
+ application/problem+json:
67388
+ examples:
67389
+ COMMAND_REPLAY_CONFLICT:
67390
+ summary: COMMAND_REPLAY_CONFLICT
67391
+ value:
67392
+ code: COMMAND_REPLAY_CONFLICT
67393
+ correlationId: 018f0000-0000-7000-8000-000000000001
67394
+ detail: See the operation contract.
67395
+ errors: []
67396
+ retryable: false
67397
+ schemaId: urn:gala:schema:problem:2.0.0
67398
+ schemaVersion: 2.0.0
67399
+ status: 409
67400
+ title: COMMAND_REPLAY_CONFLICT
67401
+ type: urn:gala:problem:command-replay-conflict
67402
+ schema:
67403
+ $ref: "#/components/schemas/Problem"
67404
+ description: COMMAND_REPLAY_CONFLICT
67405
+ headers:
67406
+ Cache-Control:
67407
+ $ref: "#/components/headers/CacheControlNoStore"
67408
+ X-Correlation-Id:
67409
+ $ref: "#/components/headers/XCorrelationId"
67410
+ x-gala-problem-codes:
67411
+ - COMMAND_REPLAY_CONFLICT
67412
+ "422":
67413
+ content:
67414
+ application/problem+json:
67415
+ examples:
67416
+ SYNDICATION_CREDENTIAL_REJECTED:
67417
+ summary: SYNDICATION_CREDENTIAL_REJECTED
67418
+ value:
67419
+ code: SYNDICATION_CREDENTIAL_REJECTED
67420
+ correlationId: 018f0000-0000-7000-8000-000000000001
67421
+ detail: See the operation contract.
67422
+ errors: []
67423
+ platformMessage: Bad credentials
67424
+ retryable: false
67425
+ schemaId: urn:gala:schema:problem:2.0.0
67426
+ schemaVersion: 2.0.0
67427
+ status: 422
67428
+ title: SYNDICATION_CREDENTIAL_REJECTED
67429
+ type: urn:gala:problem:syndication-credential-rejected
67430
+ schema:
67431
+ $ref: "#/components/schemas/Problem"
67432
+ description: SYNDICATION_CREDENTIAL_REJECTED
67433
+ headers:
67434
+ Cache-Control:
67435
+ $ref: "#/components/headers/CacheControlNoStore"
67436
+ X-Correlation-Id:
67437
+ $ref: "#/components/headers/XCorrelationId"
67438
+ x-gala-problem-codes:
67439
+ - SYNDICATION_CREDENTIAL_REJECTED
67440
+ "429":
67441
+ content:
67442
+ application/problem+json:
67443
+ examples:
67444
+ RATE_LIMITED:
67445
+ summary: RATE_LIMITED
67446
+ value:
67447
+ code: RATE_LIMITED
67448
+ correlationId: 018f0000-0000-7000-8000-000000000001
67449
+ detail: See the operation contract.
67450
+ errors: []
67451
+ retryable: true
67452
+ schemaId: urn:gala:schema:problem:2.0.0
67453
+ schemaVersion: 2.0.0
67454
+ status: 429
67455
+ title: RATE_LIMITED
67456
+ type: urn:gala:problem:rate-limited
67457
+ schema:
67458
+ $ref: "#/components/schemas/Problem"
67459
+ description: RATE_LIMITED
67460
+ headers:
67461
+ Cache-Control:
67462
+ $ref: "#/components/headers/CacheControlNoStore"
67463
+ Retry-After:
67464
+ $ref: "#/components/headers/RetryAfter"
67465
+ X-Correlation-Id:
67466
+ $ref: "#/components/headers/XCorrelationId"
67467
+ x-gala-problem-codes:
67468
+ - RATE_LIMITED
67469
+ "503":
67470
+ content:
67471
+ application/problem+json:
67472
+ examples:
67473
+ SYNDICATION_PLATFORM_UNAVAILABLE:
67474
+ summary: SYNDICATION_PLATFORM_UNAVAILABLE
67475
+ value:
67476
+ code: SYNDICATION_PLATFORM_UNAVAILABLE
67477
+ correlationId: 018f0000-0000-7000-8000-000000000001
67478
+ detail: See the operation contract.
67479
+ errors: []
67480
+ retryable: true
67481
+ schemaId: urn:gala:schema:problem:2.0.0
67482
+ schemaVersion: 2.0.0
67483
+ status: 503
67484
+ title: SYNDICATION_PLATFORM_UNAVAILABLE
67485
+ type: urn:gala:problem:syndication-platform-unavailable
67486
+ schema:
67487
+ $ref: "#/components/schemas/Problem"
67488
+ description: SYNDICATION_PLATFORM_UNAVAILABLE
67489
+ headers:
67490
+ Cache-Control:
67491
+ $ref: "#/components/headers/CacheControlNoStore"
67492
+ X-Correlation-Id:
67493
+ $ref: "#/components/headers/XCorrelationId"
67494
+ x-gala-problem-codes:
67495
+ - SYNDICATION_PLATFORM_UNAVAILABLE
67496
+ security:
67497
+ - browserSession: []
67498
+ summary: check a syndication connection
67499
+ tags:
67500
+ - syndication
67501
+ x-gala-activation-gate: MVP
67502
+ x-gala-activation-guards:
67503
+ - NONE
67504
+ x-gala-capability-key: publication.settings.manage
67505
+ x-gala-concurrency: authorization-and-publication-epochs
67506
+ x-gala-conditional-capabilities: []
67507
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
67508
+ x-gala-nullability: required-and-nullable-are-explicit
67509
+ x-gala-purpose: check a syndication connection
67510
+ x-gala-reachable-problems:
67511
+ - AUTHENTICATION_REQUIRED
67512
+ - AUTHORIZATION_DENIED
67513
+ - COMMAND_REPLAY_CONFLICT
67514
+ - RATE_LIMITED
67515
+ - RESOURCE_NOT_FOUND
67516
+ - SYNDICATION_CONNECTION_NOT_FOUND
67517
+ - SYNDICATION_CREDENTIAL_REJECTED
67518
+ - SYNDICATION_PLATFORM_UNAVAILABLE
67519
+ - VALIDATION_FAILED
67520
+ x-gala-replay-identity: idempotency-key
67521
+ x-gala-state-guards:
67522
+ - NONE
67523
+ x-gala-success-category: protocol
67524
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
67525
+ /v2/organizations/{organizationId}/publications/{publicationId}/syndication-deliveries:
67526
+ get:
67527
+ description: "The newest 50 deliveries of this publication, newest first: what was posted where, what is waiting to be retried and what failed and why. Needs `publication.view`."
67528
+ operationId: getOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationDeliveries
67529
+ parameters:
67530
+ - $ref: "#/components/parameters/XCorrelationId"
67531
+ - example: 018f0000-0000-7000-8000-000000000001
67532
+ in: path
67533
+ name: organizationId
67534
+ required: true
67535
+ schema:
67536
+ format: uuid
67537
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
67538
+ type: string
67539
+ - example: 018f0000-0000-7000-8000-000000000001
67540
+ in: path
67541
+ name: publicationId
67542
+ required: true
67543
+ schema:
67544
+ format: uuid
67545
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
67546
+ type: string
67547
+ responses:
67548
+ "200":
67549
+ content:
67550
+ application/json:
67551
+ examples:
67552
+ nominal:
67553
+ summary: Nominal successful response
67554
+ value:
67555
+ deliveries:
67556
+ - accountLabel: "@example.bsky.social"
67557
+ attemptCount: 1
67558
+ connectionId: 018f0000-0000-7000-8000-000000000001
67559
+ contentId: 018f0000-0000-7000-8000-000000000003
67560
+ contentTitle: Why we cut onboarding from nine steps to four
67561
+ createdAt: "2026-11-05T12:00:00.000Z"
67562
+ externalUrl: https://bsky.app/profile/example.bsky.social/post/3kexample
67563
+ id: 018f0000-0000-7000-8000-000000000002
67564
+ kind: bluesky
67565
+ liveUrl: https://example.com/onboarding/
67566
+ requestedBy: ANNOUNCEMENT
67567
+ status: SENT
67568
+ updatedAt: "2026-11-05T12:00:00.000Z"
67569
+ schema:
67570
+ $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationDeliveriesResponse"
67571
+ description: list syndication deliveries succeeded
67572
+ headers:
67573
+ Cache-Control:
67574
+ $ref: "#/components/headers/CacheControlNoStore"
67575
+ X-Correlation-Id:
67576
+ $ref: "#/components/headers/XCorrelationId"
67577
+ "400":
67578
+ content:
67579
+ application/problem+json:
67580
+ examples:
67581
+ VALIDATION_FAILED:
67582
+ summary: VALIDATION_FAILED
67583
+ value:
67584
+ code: VALIDATION_FAILED
67585
+ correlationId: 018f0000-0000-7000-8000-000000000001
67586
+ detail: See the operation contract.
67587
+ errors: []
67588
+ retryable: false
67589
+ schemaId: urn:gala:schema:problem:2.0.0
67590
+ schemaVersion: 2.0.0
67591
+ status: 400
67592
+ title: VALIDATION_FAILED
67593
+ type: urn:gala:problem:validation-failed
67594
+ schema:
67595
+ $ref: "#/components/schemas/Problem"
67596
+ description: VALIDATION_FAILED
67597
+ headers:
67598
+ Cache-Control:
67599
+ $ref: "#/components/headers/CacheControlNoStore"
67600
+ X-Correlation-Id:
67601
+ $ref: "#/components/headers/XCorrelationId"
67602
+ x-gala-problem-codes:
67603
+ - VALIDATION_FAILED
67604
+ "401":
67605
+ content:
67606
+ application/problem+json:
67607
+ examples:
67608
+ AUTHENTICATION_REQUIRED:
67609
+ summary: AUTHENTICATION_REQUIRED
67610
+ value:
67611
+ code: AUTHENTICATION_REQUIRED
67612
+ correlationId: 018f0000-0000-7000-8000-000000000001
67613
+ detail: See the operation contract.
67614
+ errors: []
67615
+ retryable: false
67616
+ schemaId: urn:gala:schema:problem:2.0.0
67617
+ schemaVersion: 2.0.0
67618
+ status: 401
67619
+ title: AUTHENTICATION_REQUIRED
67620
+ type: urn:gala:problem:authentication-required
67621
+ schema:
67622
+ $ref: "#/components/schemas/Problem"
67623
+ description: AUTHENTICATION_REQUIRED
67624
+ headers:
67625
+ Cache-Control:
67626
+ $ref: "#/components/headers/CacheControlNoStore"
67627
+ X-Correlation-Id:
67628
+ $ref: "#/components/headers/XCorrelationId"
67629
+ x-gala-problem-codes:
67630
+ - AUTHENTICATION_REQUIRED
67631
+ "403":
67632
+ content:
67633
+ application/problem+json:
67634
+ examples:
67635
+ AUTHORIZATION_DENIED:
67636
+ summary: AUTHORIZATION_DENIED
67637
+ value:
67638
+ code: AUTHORIZATION_DENIED
67639
+ correlationId: 018f0000-0000-7000-8000-000000000001
67640
+ detail: See the operation contract.
67641
+ errors: []
67642
+ retryable: false
67643
+ schemaId: urn:gala:schema:problem:2.0.0
67644
+ schemaVersion: 2.0.0
67645
+ status: 403
67646
+ title: AUTHORIZATION_DENIED
67647
+ type: urn:gala:problem:authorization-denied
67648
+ schema:
67649
+ $ref: "#/components/schemas/Problem"
67650
+ description: AUTHORIZATION_DENIED
67651
+ headers:
67652
+ Cache-Control:
67653
+ $ref: "#/components/headers/CacheControlNoStore"
67654
+ X-Correlation-Id:
67655
+ $ref: "#/components/headers/XCorrelationId"
67656
+ x-gala-problem-codes:
67657
+ - AUTHORIZATION_DENIED
67658
+ "404":
67659
+ content:
67660
+ application/problem+json:
67661
+ examples:
67662
+ RESOURCE_NOT_FOUND:
67663
+ summary: RESOURCE_NOT_FOUND
67664
+ value:
67665
+ code: RESOURCE_NOT_FOUND
67666
+ correlationId: 018f0000-0000-7000-8000-000000000001
67667
+ detail: See the operation contract.
67668
+ errors: []
67669
+ retryable: false
67670
+ schemaId: urn:gala:schema:problem:2.0.0
67671
+ schemaVersion: 2.0.0
67672
+ status: 404
67673
+ title: RESOURCE_NOT_FOUND
67674
+ type: urn:gala:problem:resource-not-found
67675
+ schema:
67676
+ $ref: "#/components/schemas/Problem"
67677
+ description: RESOURCE_NOT_FOUND
67678
+ headers:
67679
+ Cache-Control:
67680
+ $ref: "#/components/headers/CacheControlNoStore"
67681
+ X-Correlation-Id:
67682
+ $ref: "#/components/headers/XCorrelationId"
67683
+ x-gala-problem-codes:
67684
+ - RESOURCE_NOT_FOUND
67685
+ security:
67686
+ - browserSession: []
67687
+ summary: list syndication deliveries
67688
+ tags:
67689
+ - syndication
67690
+ x-gala-activation-gate: MVP
67691
+ x-gala-activation-guards:
67692
+ - NONE
67693
+ x-gala-capability-key: publication.view
67694
+ x-gala-concurrency: authorization-and-publication-epochs
67695
+ x-gala-conditional-capabilities: []
67696
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
67697
+ x-gala-nullability: required-and-nullable-are-explicit
67698
+ x-gala-purpose: list syndication deliveries
67699
+ x-gala-reachable-problems:
67700
+ - AUTHENTICATION_REQUIRED
67701
+ - AUTHORIZATION_DENIED
67702
+ - RESOURCE_NOT_FOUND
67703
+ - VALIDATION_FAILED
67704
+ x-gala-replay-identity: safe-query
67705
+ x-gala-state-guards:
67706
+ - NONE
67707
+ x-gala-success-category: query
67708
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
67709
+ post:
67710
+ description: Files one delivery of a post that is already live to each chosen connection and answers `202` with the new deliveries in the order of `connectionIds`; the posting itself happens afterwards. Needs `publication.settings.manage`. `409 SYNDICATION_POST_NOT_LIVE` when `contentId` has no live announcement; `404 SYNDICATION_CONNECTION_NOT_FOUND` when a connection id is not this publication's; `409 SYNDICATION_CONNECTION_NOT_ACTIVE` when a named connection is paused or needs attention (nothing is filed).
67711
+ operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationDeliveries
67712
+ parameters:
67713
+ - $ref: "#/components/parameters/XCorrelationId"
67714
+ - example: 018f0000-0000-7000-8000-000000000001
67715
+ in: path
67716
+ name: organizationId
67717
+ required: true
67718
+ schema:
67719
+ format: uuid
67720
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
67721
+ type: string
67722
+ - example: 018f0000-0000-7000-8000-000000000001
67723
+ in: path
67724
+ name: publicationId
67725
+ required: true
67726
+ schema:
67727
+ format: uuid
67728
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
67729
+ type: string
67730
+ - $ref: "#/components/parameters/IdempotencyKey"
67731
+ - $ref: "#/components/parameters/XCsrfToken"
67732
+ requestBody:
67733
+ content:
67734
+ application/json:
67735
+ examples:
67736
+ nominal:
67737
+ summary: Nominal valid request
67738
+ value:
67739
+ connectionIds:
67740
+ - 018f0000-0000-7000-8000-000000000001
67741
+ contentId: 018f0000-0000-7000-8000-000000000003
67742
+ schema:
67743
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationDeliveriesRequest"
67744
+ required: true
67745
+ responses:
67746
+ "202":
67747
+ content:
67748
+ application/json:
67749
+ examples:
67750
+ nominal:
67751
+ summary: Nominal successful response
67752
+ value:
67753
+ deliveries:
67754
+ - accountLabel: "@example.bsky.social"
67755
+ attemptCount: 1
67756
+ connectionId: 018f0000-0000-7000-8000-000000000001
67757
+ contentId: 018f0000-0000-7000-8000-000000000003
67758
+ contentTitle: Why we cut onboarding from nine steps to four
67759
+ createdAt: "2026-11-05T12:00:00.000Z"
67760
+ externalUrl: https://bsky.app/profile/example.bsky.social/post/3kexample
67761
+ id: 018f0000-0000-7000-8000-000000000002
67762
+ kind: bluesky
67763
+ liveUrl: https://example.com/onboarding/
67764
+ requestedBy: MANUAL
67765
+ status: PENDING
67766
+ updatedAt: "2026-11-05T12:00:00.000Z"
67767
+ schema:
67768
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdSyndicationDeliveriesResponse"
67769
+ description: send an earlier post to syndication connections accepted
67770
+ headers:
67771
+ Cache-Control:
67772
+ $ref: "#/components/headers/CacheControlNoStore"
67773
+ X-Correlation-Id:
67774
+ $ref: "#/components/headers/XCorrelationId"
67775
+ "400":
67776
+ content:
67777
+ application/problem+json:
67778
+ examples:
67779
+ REQUEST_FIELD_UNKNOWN:
67780
+ summary: REQUEST_FIELD_UNKNOWN
67781
+ value:
67782
+ code: REQUEST_FIELD_UNKNOWN
67783
+ correlationId: 018f0000-0000-7000-8000-000000000001
67784
+ detail: See the operation contract.
67785
+ errors: []
67786
+ retryable: false
67787
+ schemaId: urn:gala:schema:problem:2.0.0
67788
+ schemaVersion: 2.0.0
67789
+ status: 400
67790
+ title: REQUEST_FIELD_UNKNOWN
67791
+ type: urn:gala:problem:request-field-unknown
67792
+ VALIDATION_FAILED:
67793
+ summary: VALIDATION_FAILED
67794
+ value:
67795
+ code: VALIDATION_FAILED
67796
+ correlationId: 018f0000-0000-7000-8000-000000000001
67797
+ detail: See the operation contract.
67798
+ errors: []
67799
+ retryable: false
67800
+ schemaId: urn:gala:schema:problem:2.0.0
67801
+ schemaVersion: 2.0.0
67802
+ status: 400
67803
+ title: VALIDATION_FAILED
67804
+ type: urn:gala:problem:validation-failed
67805
+ schema:
67806
+ $ref: "#/components/schemas/Problem"
67807
+ description: REQUEST_FIELD_UNKNOWN, VALIDATION_FAILED
67808
+ headers:
67809
+ Cache-Control:
67810
+ $ref: "#/components/headers/CacheControlNoStore"
67811
+ X-Correlation-Id:
67812
+ $ref: "#/components/headers/XCorrelationId"
67813
+ x-gala-problem-codes:
67814
+ - REQUEST_FIELD_UNKNOWN
67336
67815
  - VALIDATION_FAILED
67337
67816
  "401":
67338
67817
  content:
@@ -73203,6 +73682,498 @@ paths:
73203
73682
  - OAuthClient:DRAFT -> REVOKED
73204
73683
  x-gala-success-category: update
73205
73684
  x-gala-tenant-scope: NONE
73685
+ /v2/platform/organizations/{organizationId}/plan-grant:
73686
+ delete:
73687
+ description: |
73688
+ Operators only, with recent authentication and a browser session; API keys are refused. Ends the operator plan grant of one organization, which returns to Free unless it subscribes through Stripe. `404 RESOURCE_NOT_FOUND` when the organization does not exist or has no active grant. `409 PLAN_COLLABORATORS_PRESENT` when the organization is a collaborative Pro (`BUSINESS`) organization that still has members besides the owner. `Idempotency-Key` is the command identity.
73689
+ operationId: deletePlatformOrganizationsByOrganizationIdPlanGrant
73690
+ parameters:
73691
+ - $ref: "#/components/parameters/XCorrelationId"
73692
+ - example: 018f0000-0000-7000-8000-000000000001
73693
+ in: path
73694
+ name: organizationId
73695
+ required: true
73696
+ schema:
73697
+ format: uuid
73698
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
73699
+ type: string
73700
+ - $ref: "#/components/parameters/IdempotencyKey"
73701
+ - $ref: "#/components/parameters/XCsrfToken"
73702
+ responses:
73703
+ "204":
73704
+ description: remove organization plan grant succeeded
73705
+ headers:
73706
+ Cache-Control:
73707
+ $ref: "#/components/headers/CacheControlNoStore"
73708
+ X-Correlation-Id:
73709
+ $ref: "#/components/headers/XCorrelationId"
73710
+ "400":
73711
+ content:
73712
+ application/problem+json:
73713
+ examples:
73714
+ VALIDATION_FAILED:
73715
+ summary: VALIDATION_FAILED
73716
+ value:
73717
+ code: VALIDATION_FAILED
73718
+ correlationId: 018f0000-0000-7000-8000-000000000001
73719
+ detail: See the operation contract.
73720
+ errors: []
73721
+ retryable: false
73722
+ schemaId: urn:gala:schema:problem:2.0.0
73723
+ schemaVersion: 2.0.0
73724
+ status: 400
73725
+ title: VALIDATION_FAILED
73726
+ type: urn:gala:problem:validation-failed
73727
+ schema:
73728
+ $ref: "#/components/schemas/Problem"
73729
+ description: VALIDATION_FAILED
73730
+ headers:
73731
+ Cache-Control:
73732
+ $ref: "#/components/headers/CacheControlNoStore"
73733
+ X-Correlation-Id:
73734
+ $ref: "#/components/headers/XCorrelationId"
73735
+ x-gala-problem-codes:
73736
+ - VALIDATION_FAILED
73737
+ "401":
73738
+ content:
73739
+ application/problem+json:
73740
+ examples:
73741
+ AUTHENTICATION_REQUIRED:
73742
+ summary: AUTHENTICATION_REQUIRED
73743
+ value:
73744
+ code: AUTHENTICATION_REQUIRED
73745
+ correlationId: 018f0000-0000-7000-8000-000000000001
73746
+ detail: See the operation contract.
73747
+ errors: []
73748
+ retryable: false
73749
+ schemaId: urn:gala:schema:problem:2.0.0
73750
+ schemaVersion: 2.0.0
73751
+ status: 401
73752
+ title: AUTHENTICATION_REQUIRED
73753
+ type: urn:gala:problem:authentication-required
73754
+ REAUTH_REQUIRED:
73755
+ summary: REAUTH_REQUIRED
73756
+ value:
73757
+ code: REAUTH_REQUIRED
73758
+ correlationId: 018f0000-0000-7000-8000-000000000001
73759
+ detail: See the operation contract.
73760
+ errors: []
73761
+ retryable: false
73762
+ schemaId: urn:gala:schema:problem:2.0.0
73763
+ schemaVersion: 2.0.0
73764
+ status: 401
73765
+ title: REAUTH_REQUIRED
73766
+ type: urn:gala:problem:reauth-required
73767
+ schema:
73768
+ $ref: "#/components/schemas/Problem"
73769
+ description: AUTHENTICATION_REQUIRED, REAUTH_REQUIRED
73770
+ headers:
73771
+ Cache-Control:
73772
+ $ref: "#/components/headers/CacheControlNoStore"
73773
+ X-Correlation-Id:
73774
+ $ref: "#/components/headers/XCorrelationId"
73775
+ x-gala-problem-codes:
73776
+ - AUTHENTICATION_REQUIRED
73777
+ - REAUTH_REQUIRED
73778
+ "403":
73779
+ content:
73780
+ application/problem+json:
73781
+ examples:
73782
+ AUTHORIZATION_DENIED:
73783
+ summary: AUTHORIZATION_DENIED
73784
+ value:
73785
+ code: AUTHORIZATION_DENIED
73786
+ correlationId: 018f0000-0000-7000-8000-000000000001
73787
+ detail: See the operation contract.
73788
+ errors: []
73789
+ retryable: false
73790
+ schemaId: urn:gala:schema:problem:2.0.0
73791
+ schemaVersion: 2.0.0
73792
+ status: 403
73793
+ title: AUTHORIZATION_DENIED
73794
+ type: urn:gala:problem:authorization-denied
73795
+ schema:
73796
+ $ref: "#/components/schemas/Problem"
73797
+ description: AUTHORIZATION_DENIED
73798
+ headers:
73799
+ Cache-Control:
73800
+ $ref: "#/components/headers/CacheControlNoStore"
73801
+ X-Correlation-Id:
73802
+ $ref: "#/components/headers/XCorrelationId"
73803
+ x-gala-problem-codes:
73804
+ - AUTHORIZATION_DENIED
73805
+ "404":
73806
+ content:
73807
+ application/problem+json:
73808
+ examples:
73809
+ RESOURCE_NOT_FOUND:
73810
+ summary: RESOURCE_NOT_FOUND
73811
+ value:
73812
+ code: RESOURCE_NOT_FOUND
73813
+ correlationId: 018f0000-0000-7000-8000-000000000001
73814
+ detail: See the operation contract.
73815
+ errors: []
73816
+ retryable: false
73817
+ schemaId: urn:gala:schema:problem:2.0.0
73818
+ schemaVersion: 2.0.0
73819
+ status: 404
73820
+ title: RESOURCE_NOT_FOUND
73821
+ type: urn:gala:problem:resource-not-found
73822
+ schema:
73823
+ $ref: "#/components/schemas/Problem"
73824
+ description: RESOURCE_NOT_FOUND
73825
+ headers:
73826
+ Cache-Control:
73827
+ $ref: "#/components/headers/CacheControlNoStore"
73828
+ X-Correlation-Id:
73829
+ $ref: "#/components/headers/XCorrelationId"
73830
+ x-gala-problem-codes:
73831
+ - RESOURCE_NOT_FOUND
73832
+ "409":
73833
+ content:
73834
+ application/problem+json:
73835
+ examples:
73836
+ COMMAND_REPLAY_CONFLICT:
73837
+ summary: COMMAND_REPLAY_CONFLICT
73838
+ value:
73839
+ code: COMMAND_REPLAY_CONFLICT
73840
+ correlationId: 018f0000-0000-7000-8000-000000000001
73841
+ detail: See the operation contract.
73842
+ errors: []
73843
+ retryable: false
73844
+ schemaId: urn:gala:schema:problem:2.0.0
73845
+ schemaVersion: 2.0.0
73846
+ status: 409
73847
+ title: COMMAND_REPLAY_CONFLICT
73848
+ type: urn:gala:problem:command-replay-conflict
73849
+ PLAN_COLLABORATORS_PRESENT:
73850
+ summary: PLAN_COLLABORATORS_PRESENT
73851
+ value:
73852
+ code: PLAN_COLLABORATORS_PRESENT
73853
+ correlationId: 018f0000-0000-7000-8000-000000000001
73854
+ detail: See the operation contract.
73855
+ errors: []
73856
+ retryable: false
73857
+ schemaId: urn:gala:schema:problem:2.0.0
73858
+ schemaVersion: 2.0.0
73859
+ status: 409
73860
+ title: PLAN_COLLABORATORS_PRESENT
73861
+ type: urn:gala:problem:plan-collaborators-present
73862
+ schema:
73863
+ $ref: "#/components/schemas/Problem"
73864
+ description: COMMAND_REPLAY_CONFLICT, PLAN_COLLABORATORS_PRESENT
73865
+ headers:
73866
+ Cache-Control:
73867
+ $ref: "#/components/headers/CacheControlNoStore"
73868
+ X-Correlation-Id:
73869
+ $ref: "#/components/headers/XCorrelationId"
73870
+ x-gala-problem-codes:
73871
+ - COMMAND_REPLAY_CONFLICT
73872
+ - PLAN_COLLABORATORS_PRESENT
73873
+ security:
73874
+ - browserSession: []
73875
+ summary: remove organization plan grant
73876
+ tags:
73877
+ - platform
73878
+ x-gala-action-grant: none
73879
+ x-gala-activation-gate: MVP
73880
+ x-gala-activation-guards:
73881
+ - NONE
73882
+ x-gala-assurance-class: RECENT_AUTHENTICATION
73883
+ x-gala-capability-key: platform.billing.manage
73884
+ x-gala-concurrency: none
73885
+ x-gala-conditional-capabilities: []
73886
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
73887
+ x-gala-nullability: required-and-nullable-are-explicit
73888
+ x-gala-purpose: remove organization plan grant
73889
+ x-gala-reachable-problems:
73890
+ - AUTHENTICATION_REQUIRED
73891
+ - AUTHORIZATION_DENIED
73892
+ - COMMAND_REPLAY_CONFLICT
73893
+ - PLAN_COLLABORATORS_PRESENT
73894
+ - REAUTH_REQUIRED
73895
+ - RESOURCE_NOT_FOUND
73896
+ - VALIDATION_FAILED
73897
+ x-gala-replay-identity: idempotency-key
73898
+ x-gala-state-guards:
73899
+ - NONE
73900
+ x-gala-success-category: delete
73901
+ x-gala-tenant-scope: NONE
73902
+ put:
73903
+ description: |
73904
+ Operators only, with recent authentication and a browser session; API keys are refused. Grants an organization Basic (`PRO`) or Pro (`BUSINESS`) without Stripe, until `expiresAt` or open-ended when it is null, and replaces an existing active grant (a new tier or a new end date). `expiresAt` must be in the future; `FREE` is not a grant tier, a DELETE ends the grant. `reasonCode` is a non-sensitive operator reason code recorded in the audit event. `404 RESOURCE_NOT_FOUND` for an unknown organization. `409 PLAN_SUBSCRIBED` when the organization has an active, trialing or past_due Stripe subscription. `409 PLAN_COLLABORATORS_PRESENT` when the change takes a collaborative Pro organization below Pro while it still has members besides the owner. `Idempotency-Key` is the command identity.
73905
+ operationId: putPlatformOrganizationsByOrganizationIdPlanGrant
73906
+ parameters:
73907
+ - $ref: "#/components/parameters/XCorrelationId"
73908
+ - example: 018f0000-0000-7000-8000-000000000001
73909
+ in: path
73910
+ name: organizationId
73911
+ required: true
73912
+ schema:
73913
+ format: uuid
73914
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
73915
+ type: string
73916
+ - $ref: "#/components/parameters/IdempotencyKey"
73917
+ - $ref: "#/components/parameters/XCsrfToken"
73918
+ requestBody:
73919
+ content:
73920
+ application/json:
73921
+ examples:
73922
+ nominal:
73923
+ summary: Nominal valid request
73924
+ value:
73925
+ expiresAt: "2026-12-05T12:00:00.000Z"
73926
+ planTier: PRO
73927
+ reasonCode: PILOT_CREATOR
73928
+ schema:
73929
+ $ref: "#/components/schemas/PutPlatformOrganizationsByOrganizationIdPlanGrantRequest"
73930
+ required: true
73931
+ responses:
73932
+ "200":
73933
+ content:
73934
+ application/json:
73935
+ examples:
73936
+ nominal:
73937
+ summary: Nominal successful response
73938
+ value:
73939
+ expiresAt: "2026-12-05T12:00:00.000Z"
73940
+ grantedAt: "2026-11-05T12:00:00.000Z"
73941
+ grantedBy: 018f0000-0000-7000-8000-000000000001
73942
+ organizationId: 018f0000-0000-7000-8000-000000000001
73943
+ planTier: PRO
73944
+ reasonCode: PILOT_CREATOR
73945
+ schema:
73946
+ $ref: "#/components/schemas/PutPlatformOrganizationsByOrganizationIdPlanGrantResponse"
73947
+ description: set organization plan grant succeeded
73948
+ headers:
73949
+ Cache-Control:
73950
+ $ref: "#/components/headers/CacheControlNoStore"
73951
+ ETag:
73952
+ $ref: "#/components/headers/ETag"
73953
+ X-Correlation-Id:
73954
+ $ref: "#/components/headers/XCorrelationId"
73955
+ "400":
73956
+ content:
73957
+ application/problem+json:
73958
+ examples:
73959
+ REQUEST_FIELD_UNKNOWN:
73960
+ summary: REQUEST_FIELD_UNKNOWN
73961
+ value:
73962
+ code: REQUEST_FIELD_UNKNOWN
73963
+ correlationId: 018f0000-0000-7000-8000-000000000001
73964
+ detail: See the operation contract.
73965
+ errors: []
73966
+ retryable: false
73967
+ schemaId: urn:gala:schema:problem:2.0.0
73968
+ schemaVersion: 2.0.0
73969
+ status: 400
73970
+ title: REQUEST_FIELD_UNKNOWN
73971
+ type: urn:gala:problem:request-field-unknown
73972
+ VALIDATION_FAILED:
73973
+ summary: VALIDATION_FAILED
73974
+ value:
73975
+ code: VALIDATION_FAILED
73976
+ correlationId: 018f0000-0000-7000-8000-000000000001
73977
+ detail: See the operation contract.
73978
+ errors: []
73979
+ retryable: false
73980
+ schemaId: urn:gala:schema:problem:2.0.0
73981
+ schemaVersion: 2.0.0
73982
+ status: 400
73983
+ title: VALIDATION_FAILED
73984
+ type: urn:gala:problem:validation-failed
73985
+ schema:
73986
+ $ref: "#/components/schemas/Problem"
73987
+ description: REQUEST_FIELD_UNKNOWN, VALIDATION_FAILED
73988
+ headers:
73989
+ Cache-Control:
73990
+ $ref: "#/components/headers/CacheControlNoStore"
73991
+ X-Correlation-Id:
73992
+ $ref: "#/components/headers/XCorrelationId"
73993
+ x-gala-problem-codes:
73994
+ - REQUEST_FIELD_UNKNOWN
73995
+ - VALIDATION_FAILED
73996
+ "401":
73997
+ content:
73998
+ application/problem+json:
73999
+ examples:
74000
+ AUTHENTICATION_REQUIRED:
74001
+ summary: AUTHENTICATION_REQUIRED
74002
+ value:
74003
+ code: AUTHENTICATION_REQUIRED
74004
+ correlationId: 018f0000-0000-7000-8000-000000000001
74005
+ detail: See the operation contract.
74006
+ errors: []
74007
+ retryable: false
74008
+ schemaId: urn:gala:schema:problem:2.0.0
74009
+ schemaVersion: 2.0.0
74010
+ status: 401
74011
+ title: AUTHENTICATION_REQUIRED
74012
+ type: urn:gala:problem:authentication-required
74013
+ REAUTH_REQUIRED:
74014
+ summary: REAUTH_REQUIRED
74015
+ value:
74016
+ code: REAUTH_REQUIRED
74017
+ correlationId: 018f0000-0000-7000-8000-000000000001
74018
+ detail: See the operation contract.
74019
+ errors: []
74020
+ retryable: false
74021
+ schemaId: urn:gala:schema:problem:2.0.0
74022
+ schemaVersion: 2.0.0
74023
+ status: 401
74024
+ title: REAUTH_REQUIRED
74025
+ type: urn:gala:problem:reauth-required
74026
+ schema:
74027
+ $ref: "#/components/schemas/Problem"
74028
+ description: AUTHENTICATION_REQUIRED, REAUTH_REQUIRED
74029
+ headers:
74030
+ Cache-Control:
74031
+ $ref: "#/components/headers/CacheControlNoStore"
74032
+ X-Correlation-Id:
74033
+ $ref: "#/components/headers/XCorrelationId"
74034
+ x-gala-problem-codes:
74035
+ - AUTHENTICATION_REQUIRED
74036
+ - REAUTH_REQUIRED
74037
+ "403":
74038
+ content:
74039
+ application/problem+json:
74040
+ examples:
74041
+ AUTHORIZATION_DENIED:
74042
+ summary: AUTHORIZATION_DENIED
74043
+ value:
74044
+ code: AUTHORIZATION_DENIED
74045
+ correlationId: 018f0000-0000-7000-8000-000000000001
74046
+ detail: See the operation contract.
74047
+ errors: []
74048
+ retryable: false
74049
+ schemaId: urn:gala:schema:problem:2.0.0
74050
+ schemaVersion: 2.0.0
74051
+ status: 403
74052
+ title: AUTHORIZATION_DENIED
74053
+ type: urn:gala:problem:authorization-denied
74054
+ schema:
74055
+ $ref: "#/components/schemas/Problem"
74056
+ description: AUTHORIZATION_DENIED
74057
+ headers:
74058
+ Cache-Control:
74059
+ $ref: "#/components/headers/CacheControlNoStore"
74060
+ X-Correlation-Id:
74061
+ $ref: "#/components/headers/XCorrelationId"
74062
+ x-gala-problem-codes:
74063
+ - AUTHORIZATION_DENIED
74064
+ "404":
74065
+ content:
74066
+ application/problem+json:
74067
+ examples:
74068
+ RESOURCE_NOT_FOUND:
74069
+ summary: RESOURCE_NOT_FOUND
74070
+ value:
74071
+ code: RESOURCE_NOT_FOUND
74072
+ correlationId: 018f0000-0000-7000-8000-000000000001
74073
+ detail: See the operation contract.
74074
+ errors: []
74075
+ retryable: false
74076
+ schemaId: urn:gala:schema:problem:2.0.0
74077
+ schemaVersion: 2.0.0
74078
+ status: 404
74079
+ title: RESOURCE_NOT_FOUND
74080
+ type: urn:gala:problem:resource-not-found
74081
+ schema:
74082
+ $ref: "#/components/schemas/Problem"
74083
+ description: RESOURCE_NOT_FOUND
74084
+ headers:
74085
+ Cache-Control:
74086
+ $ref: "#/components/headers/CacheControlNoStore"
74087
+ X-Correlation-Id:
74088
+ $ref: "#/components/headers/XCorrelationId"
74089
+ x-gala-problem-codes:
74090
+ - RESOURCE_NOT_FOUND
74091
+ "409":
74092
+ content:
74093
+ application/problem+json:
74094
+ examples:
74095
+ COMMAND_REPLAY_CONFLICT:
74096
+ summary: COMMAND_REPLAY_CONFLICT
74097
+ value:
74098
+ code: COMMAND_REPLAY_CONFLICT
74099
+ correlationId: 018f0000-0000-7000-8000-000000000001
74100
+ detail: See the operation contract.
74101
+ errors: []
74102
+ retryable: false
74103
+ schemaId: urn:gala:schema:problem:2.0.0
74104
+ schemaVersion: 2.0.0
74105
+ status: 409
74106
+ title: COMMAND_REPLAY_CONFLICT
74107
+ type: urn:gala:problem:command-replay-conflict
74108
+ PLAN_COLLABORATORS_PRESENT:
74109
+ summary: PLAN_COLLABORATORS_PRESENT
74110
+ value:
74111
+ code: PLAN_COLLABORATORS_PRESENT
74112
+ correlationId: 018f0000-0000-7000-8000-000000000001
74113
+ detail: See the operation contract.
74114
+ errors: []
74115
+ retryable: false
74116
+ schemaId: urn:gala:schema:problem:2.0.0
74117
+ schemaVersion: 2.0.0
74118
+ status: 409
74119
+ title: PLAN_COLLABORATORS_PRESENT
74120
+ type: urn:gala:problem:plan-collaborators-present
74121
+ PLAN_SUBSCRIBED:
74122
+ summary: PLAN_SUBSCRIBED
74123
+ value:
74124
+ code: PLAN_SUBSCRIBED
74125
+ correlationId: 018f0000-0000-7000-8000-000000000001
74126
+ detail: See the operation contract.
74127
+ errors: []
74128
+ retryable: false
74129
+ schemaId: urn:gala:schema:problem:2.0.0
74130
+ schemaVersion: 2.0.0
74131
+ status: 409
74132
+ title: PLAN_SUBSCRIBED
74133
+ type: urn:gala:problem:plan-subscribed
74134
+ schema:
74135
+ $ref: "#/components/schemas/Problem"
74136
+ description: COMMAND_REPLAY_CONFLICT, PLAN_COLLABORATORS_PRESENT, PLAN_SUBSCRIBED
74137
+ headers:
74138
+ Cache-Control:
74139
+ $ref: "#/components/headers/CacheControlNoStore"
74140
+ X-Correlation-Id:
74141
+ $ref: "#/components/headers/XCorrelationId"
74142
+ x-gala-problem-codes:
74143
+ - COMMAND_REPLAY_CONFLICT
74144
+ - PLAN_COLLABORATORS_PRESENT
74145
+ - PLAN_SUBSCRIBED
74146
+ security:
74147
+ - browserSession: []
74148
+ summary: set organization plan grant
74149
+ tags:
74150
+ - platform
74151
+ x-gala-action-grant: none
74152
+ x-gala-activation-gate: MVP
74153
+ x-gala-activation-guards:
74154
+ - NONE
74155
+ x-gala-assurance-class: RECENT_AUTHENTICATION
74156
+ x-gala-capability-key: platform.billing.manage
74157
+ x-gala-concurrency: none
74158
+ x-gala-conditional-capabilities: []
74159
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
74160
+ x-gala-nullability: required-and-nullable-are-explicit
74161
+ x-gala-purpose: set organization plan grant
74162
+ x-gala-reachable-problems:
74163
+ - AUTHENTICATION_REQUIRED
74164
+ - AUTHORIZATION_DENIED
74165
+ - COMMAND_REPLAY_CONFLICT
74166
+ - PLAN_COLLABORATORS_PRESENT
74167
+ - PLAN_SUBSCRIBED
74168
+ - REAUTH_REQUIRED
74169
+ - REQUEST_FIELD_UNKNOWN
74170
+ - RESOURCE_NOT_FOUND
74171
+ - VALIDATION_FAILED
74172
+ x-gala-replay-identity: idempotency-key
74173
+ x-gala-state-guards:
74174
+ - NONE
74175
+ x-gala-success-category: update
74176
+ x-gala-tenant-scope: NONE
73206
74177
  /v2/platform/overview:
73207
74178
  get:
73208
74179
  description: |
@@ -74882,6 +75853,12 @@ paths:
74882
75853
  displayName: Ada Reader
74883
75854
  lastSignInAt: "2026-10-10T11:30:00.000Z"
74884
75855
  login: ada-reader
75856
+ organizations:
75857
+ - grant: null
75858
+ name: Ada Reader
75859
+ organizationId: 018f0000-0000-7000-8000-000000000001
75860
+ planSource: STRIPE
75861
+ planTier: PRO
74885
75862
  personId: 018f0000-0000-7000-8000-000000000001
74886
75863
  planTiers:
74887
75864
  - FREE