@zackbart/connecta 0.34.0 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +393 -0
- package/README.md +62 -105
- package/SECURITY.md +3 -2
- package/bin/connecta.mjs +41 -16
- package/bin/version.mjs +1 -1
- package/dist/access-tokens.d.ts +2 -1
- package/dist/access-tokens.js +66 -30
- package/dist/activity.d.ts +1 -1
- package/dist/activity.js +2 -0
- package/dist/agent-config.d.ts +23 -0
- package/dist/agent-config.js +59 -0
- package/dist/agent-description.js +16 -0
- package/dist/agent-identity.js +4 -4
- package/dist/agent-observation.js +39 -0
- package/dist/auth/clerk-sdk/client.d.ts +2 -0
- package/dist/auth/clerk-sdk/generated.js +554 -563
- package/dist/auth/clerk-transport.js +70 -3
- package/dist/auth/clerk.d.ts +13 -0
- package/dist/auth/clerk.js +653 -246
- package/dist/auth/cloudflare-access.js +46 -42
- package/dist/auth/downstream-client-metadata.js +2 -2
- package/dist/auth/downstream-oauth.js +2051 -1160
- package/dist/auth/downstream-revocation.js +88 -88
- package/dist/auth/native-call.js +20 -0
- package/dist/auth/native.js +184 -0
- package/dist/auth/oauth-start-reset.js +11 -5
- package/dist/auth/oauth-token-response.js +121 -102
- package/dist/auth/oauth-v2-migration.js +97 -78
- package/dist/auth/renewable-grant.js +10 -0
- package/dist/auth/static-oauth.js +663 -271
- package/dist/auth/vercel-agent.js +266 -0
- package/dist/auth-admission.js +204 -0
- package/dist/auth-elicitation.js +350 -241
- package/dist/authorization-handoff.js +164 -90
- package/dist/call-admission-context.js +3 -10
- package/dist/call-admission.js +2 -0
- package/dist/call-classification.js +9 -0
- package/dist/call-recovery.js +32 -13
- package/dist/canonical-json.js +8 -0
- package/dist/catalog-cache.js +369 -213
- package/dist/catalog-service.js +659 -530
- package/dist/catalog.js +5 -1
- package/dist/concurrency.js +0 -25
- package/dist/config-defaults.d.ts +1 -0
- package/dist/config-defaults.js +1 -0
- package/dist/config-schema.d.ts +3 -1
- package/dist/config-schema.js +13 -3
- package/dist/config.d.ts +40 -6
- package/dist/config.js +40 -26
- package/dist/connector-caller.d.ts +4 -0
- package/dist/connector-caller.js +17 -4
- package/dist/connectors/api-connector.d.ts +15 -7
- package/dist/connectors/api-connector.js +147 -57
- package/dist/connectors/guarded-fetch.d.ts +51 -17
- package/dist/connectors/guarded-fetch.js +215 -121
- package/dist/connectors/negotiation-cache.js +20 -10
- package/dist/connectors/option-shapes.js +1 -1
- package/dist/connectors/remote-mcp.d.ts +12 -30
- package/dist/connectors/remote-mcp.js +960 -564
- package/dist/d1.js +10 -243
- package/dist/derived-context.js +5 -0
- package/dist/describe-config.d.ts +5 -1
- package/dist/describe-config.js +3 -0
- package/dist/downstream-input.js +347 -260
- package/dist/errors.d.ts +87 -6
- package/dist/errors.js +114 -4
- package/dist/execute.js +87 -50
- package/dist/executor-admission.js +3 -0
- package/dist/executors/quickjs.js +163 -112
- package/dist/guarded-transport.js +50 -0
- package/dist/guest-runtime.js +1 -1
- package/dist/http/client.js +439 -0
- package/dist/http/errors.js +558 -0
- package/dist/http/fields.js +49 -0
- package/dist/http/hatch-paging.js +318 -0
- package/dist/http/hatch.js +1279 -0
- package/dist/http/json-schema.js +267 -0
- package/dist/http/node-transport.js +241 -0
- package/dist/http/oauth.js +162 -0
- package/dist/http/paging.js +228 -0
- package/dist/http/provider.js +221 -0
- package/dist/http/safety.js +82 -0
- package/dist/http/services.js +79 -0
- package/dist/http/tools.js +383 -0
- package/dist/http/vendor-index.js +138 -0
- package/dist/http/vendor.js +448 -0
- package/dist/http/write-request.js +66 -0
- package/dist/http-policy.d.ts +11 -0
- package/dist/http-policy.js +45 -0
- package/dist/inbound-credential.js +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +4 -0
- package/dist/invocation-auth.js +30 -19
- package/dist/invocation.js +221 -87
- package/dist/mcp-result.js +0 -4
- package/dist/membership.d.ts +4 -0
- package/dist/meta-output.js +1 -1
- package/dist/meta-tools.js +534 -408
- package/dist/native-recovery.js +52 -0
- package/dist/native-tools.js +382 -0
- package/dist/node.d.ts +4 -3
- package/dist/node.js +45 -8
- package/dist/oauth-handoff.js +177 -104
- package/dist/oauth-partition.js +6 -20
- package/dist/oauth-sealing.js +6 -7
- package/dist/operation-vocabulary.js +101 -0
- package/dist/operator-record.d.ts +2 -2
- package/dist/operator-record.js +17 -4
- package/dist/operator-ui/agents.d.ts +5 -4
- package/dist/operator-ui/agents.js +17 -7
- package/dist/operator-ui/config-summary.js +8 -4
- package/dist/operator-ui/connection-map.js +9 -6
- package/dist/operator-ui/contract.d.ts +7 -3
- package/dist/operator-ui/endpoints.js +5 -14
- package/dist/operator-ui/fix-prompts.d.ts +1 -1
- package/dist/operator-ui/fix-prompts.js +0 -8
- package/dist/operator-ui/generated.js +3 -3
- package/dist/operator-ui/health.js +52 -0
- package/dist/operator-ui/model.d.ts +2 -3
- package/dist/operator-ui/overview.js +11 -19
- package/dist/operator-ui/setup-commands.js +0 -4
- package/dist/operator-ui/view.d.ts +5 -29
- package/dist/operator-ui/view.js +3 -59
- package/dist/program-writes.js +47 -26
- package/dist/provider-call-facts.d.ts +115 -0
- package/dist/provider-call-facts.js +182 -0
- package/dist/provider-call.d.ts +112 -0
- package/dist/provider-call.js +271 -0
- package/dist/provider.d.ts +71 -32
- package/dist/provider.js +134 -40
- package/dist/providers/_shared/google/hatch.js +91 -0
- package/dist/providers/_shared/google/kit.js +537 -0
- package/dist/providers/_shared/google/result-size.js +15 -2
- package/dist/providers/_shared/google/service-account.d.ts +2 -1
- package/dist/providers/_shared/google/service-account.js +8 -4
- package/dist/providers/_shared/google/workspace.d.ts +8 -209
- package/dist/providers/_shared/google/workspace.js +7 -426
- package/dist/providers/_shared/rest/compact-index.js +86 -0
- package/dist/providers/_shared/rest/dispatch.js +3 -23
- package/dist/providers/_shared/rest/kit.js +546 -0
- package/dist/providers/_shared/rest/operation-index.js +230 -14
- package/dist/providers/_shared/rest/response-media.js +11 -0
- package/dist/providers/_shared/rest/tools.js +101 -78
- package/dist/providers/_shared/rest/value-safety.js +353 -195
- package/dist/providers/_shared/sensitive-fields.js +27 -0
- package/dist/providers/breeze/api.js +584 -0
- package/dist/providers/breeze/index.d.ts +3 -3
- package/dist/providers/breeze/index.js +67 -1420
- package/dist/providers/breeze/openapi.generated.js +60 -0
- package/dist/providers/breeze/skill.generated.js +2 -6
- package/dist/providers/breeze/tools.js +696 -0
- package/dist/providers/ccb/api.js +496 -0
- package/dist/providers/ccb/index.d.ts +17 -37
- package/dist/providers/ccb/index.js +77 -1702
- package/dist/providers/ccb/lib/constants.d.ts +34 -0
- package/dist/providers/ccb/lib/constants.js +74 -0
- package/dist/providers/ccb/lib/guide.js +9 -0
- package/dist/providers/ccb/lib/verdicts.js +387 -0
- package/dist/providers/ccb/openapi.generated.js +397 -0
- package/dist/providers/ccb/safety.js +295 -0
- package/dist/providers/ccb/skill.generated.js +2 -6
- package/dist/providers/ccb/tools.js +853 -0
- package/dist/providers/cloudflare/api.js +1066 -0
- package/dist/providers/cloudflare/index.d.ts +7 -22
- package/dist/providers/cloudflare/index.js +80 -194
- package/dist/providers/cloudflare/lib/config.d.ts +16 -0
- package/dist/providers/cloudflare/lib/config.js +2 -0
- package/dist/providers/cloudflare/lib/discovery.js +29 -0
- package/dist/providers/cloudflare/{graphql.js → lib/graphql.js} +1 -1
- package/dist/providers/cloudflare/lib/hatch.js +103 -0
- package/dist/providers/cloudflare/lib/path-bounds.js +28 -0
- package/dist/providers/cloudflare/lib/response-media.js +75 -0
- package/dist/providers/cloudflare/openapi.generated.js +3299 -3208
- package/dist/providers/cloudflare/{value-safety.js → safety.js} +538 -18
- package/dist/providers/cloudflare/skill.generated.js +2 -10
- package/dist/providers/cloudflare/tools.js +360 -0
- package/dist/providers/docs/api.js +51 -0
- package/dist/providers/docs/index.d.ts +1 -12
- package/dist/providers/docs/index.js +53 -1165
- package/dist/providers/docs/lib/constants.d.ts +18 -0
- package/dist/providers/docs/lib/constants.js +18 -0
- package/dist/providers/docs/lib/discovery.js +26 -0
- package/dist/providers/docs/lib/requests.js +48 -0
- package/dist/providers/docs/lib/schemas.js +168 -0
- package/dist/providers/docs/openapi.generated.js +16 -0
- package/dist/providers/docs/safety.js +54 -0
- package/dist/providers/docs/skill.generated.js +2 -6
- package/dist/providers/docs/tools.js +802 -0
- package/dist/providers/drive/api.js +177 -0
- package/dist/providers/drive/index.d.ts +1 -12
- package/dist/providers/drive/index.js +38 -1448
- package/dist/providers/drive/lib/constants.d.ts +6 -0
- package/dist/providers/drive/lib/constants.js +6 -0
- package/dist/providers/drive/lib/contracts.js +532 -0
- package/dist/providers/drive/lib/hatch.js +197 -0
- package/dist/providers/drive/openapi.generated.js +77 -0
- package/dist/providers/drive/safety.js +90 -0
- package/dist/providers/drive/skill.generated.js +2 -6
- package/dist/providers/drive/tools.js +1290 -0
- package/dist/providers/forms/api.js +71 -0
- package/dist/providers/forms/index.d.ts +1 -12
- package/dist/providers/forms/index.js +49 -1145
- package/dist/providers/forms/lib/constants.d.ts +14 -0
- package/dist/providers/forms/lib/constants.js +19 -0
- package/dist/providers/forms/lib/hatch.js +72 -0
- package/dist/providers/forms/openapi.generated.js +23 -0
- package/dist/providers/forms/safety.js +34 -0
- package/dist/providers/forms/skill.generated.js +2 -8
- package/dist/providers/forms/tools.js +1024 -0
- package/dist/providers/github/api.js +150 -0
- package/dist/providers/github/index.d.ts +4 -5
- package/dist/providers/github/index.js +30 -87
- package/dist/providers/github/{auth.d.ts → lib/auth.d.ts} +5 -3
- package/dist/providers/github/{auth.js → lib/auth.js} +40 -43
- package/dist/providers/github/lib/discovery.js +132 -0
- package/dist/providers/github/lib/operations.js +58 -0
- package/dist/providers/github/{scope.d.ts → lib/scope.d.ts} +2 -0
- package/dist/providers/github/{scope.js → lib/scope.js} +25 -1
- package/dist/providers/github/openapi.generated.js +1216 -0
- package/dist/providers/github/safety.js +216 -0
- package/dist/providers/github/skill.generated.js +2 -5
- package/dist/providers/github/tools.js +506 -0
- package/dist/providers/gmail/api.js +114 -0
- package/dist/providers/gmail/index.d.ts +1 -12
- package/dist/providers/gmail/index.js +73 -1621
- package/dist/providers/gmail/lib/constants.d.ts +13 -0
- package/dist/providers/gmail/lib/constants.js +16 -0
- package/dist/providers/gmail/lib/index.js +173 -0
- package/dist/providers/gmail/lib/schemas.js +176 -0
- package/dist/providers/gmail/lib/threading.js +120 -0
- package/dist/providers/gmail/openapi.generated.js +92 -0
- package/dist/providers/gmail/safety.js +21 -0
- package/dist/providers/gmail/skill.generated.js +2 -6
- package/dist/providers/gmail/tools.js +1435 -0
- package/dist/providers/overflow/api.js +1008 -0
- package/dist/providers/overflow/index.d.ts +3 -17
- package/dist/providers/overflow/index.js +60 -1488
- package/dist/providers/overflow/skill.generated.js +2 -5
- package/dist/providers/overflow/tools.js +873 -0
- package/dist/providers/planning-center/api.js +467 -0
- package/dist/providers/planning-center/index.d.ts +6 -35
- package/dist/providers/planning-center/index.js +69 -2445
- package/dist/providers/planning-center/lib/constants.d.ts +58 -0
- package/dist/providers/planning-center/lib/constants.js +83 -0
- package/dist/providers/planning-center/lib/discovery.js +40 -0
- package/dist/providers/planning-center/lib/guide.js +39 -0
- package/dist/providers/planning-center/lib/json-api.js +83 -0
- package/dist/providers/planning-center/lib/verdicts.js +1758 -0
- package/dist/providers/planning-center/openapi.generated.js +1764 -0
- package/dist/providers/planning-center/safety.js +188 -0
- package/dist/providers/planning-center/skill.generated.js +2 -27
- package/dist/providers/planning-center/tools.js +1010 -0
- package/dist/providers/sheets/api.js +133 -0
- package/dist/providers/sheets/index.d.ts +4 -16
- package/dist/providers/sheets/index.js +61 -1172
- package/dist/providers/sheets/lib/constants.d.ts +14 -0
- package/dist/providers/sheets/lib/constants.js +14 -0
- package/dist/providers/sheets/lib/hatch.js +163 -0
- package/dist/providers/sheets/lib/requests.js +105 -0
- package/dist/providers/sheets/lib/schemas.js +138 -0
- package/dist/providers/sheets/openapi.generated.js +30 -0
- package/dist/providers/sheets/safety.js +27 -0
- package/dist/providers/sheets/skill.generated.js +2 -7
- package/dist/providers/sheets/tools.js +734 -0
- package/dist/providers/slides/api.js +147 -0
- package/dist/providers/slides/index.d.ts +2 -10
- package/dist/providers/slides/index.js +48 -2555
- package/dist/providers/slides/lib/constants.d.ts +11 -0
- package/dist/providers/slides/lib/constants.js +11 -0
- package/dist/providers/slides/lib/requests.js +60 -0
- package/dist/providers/slides/lib/schemas.js +565 -0
- package/dist/providers/slides/openapi.generated.js +18 -0
- package/dist/providers/slides/skill.generated.js +2 -6
- package/dist/providers/slides/tools.js +1968 -0
- package/dist/providers/stripe/api.js +401 -0
- package/dist/providers/stripe/index.d.ts +7 -27
- package/dist/providers/stripe/index.js +75 -191
- package/dist/providers/stripe/lib/config.d.ts +4 -0
- package/dist/providers/stripe/lib/config.js +2 -0
- package/dist/providers/stripe/openapi.generated.js +4 -3
- package/dist/providers/stripe/{value-safety.js → safety.js} +5 -5
- package/dist/providers/stripe/skill.generated.js +2 -10
- package/dist/providers/stripe/tools.js +77 -0
- package/dist/providers/tithely/api.js +531 -0
- package/dist/providers/tithely/index.d.ts +19 -0
- package/dist/providers/tithely/index.js +86 -965
- package/dist/providers/tithely/skill.generated.js +2 -5
- package/dist/providers/tithely/tools.js +426 -0
- package/dist/providers/vercel/api.js +551 -0
- package/dist/providers/vercel/index.d.ts +11 -25
- package/dist/providers/vercel/index.js +67 -261
- package/dist/providers/vercel/lib/config.d.ts +2 -0
- package/dist/providers/vercel/lib/config.js +2 -0
- package/dist/providers/vercel/lib/index.js +117 -0
- package/dist/providers/vercel/lib/logs.js +100 -0
- package/dist/providers/vercel/lib/pin.js +270 -0
- package/dist/providers/vercel/openapi.generated.js +398 -376
- package/dist/providers/vercel/{value-safety.js → safety.js} +261 -42
- package/dist/providers/vercel/skill.generated.js +2 -7
- package/dist/providers/vercel/tools.js +642 -0
- package/dist/redaction-identity.js +47 -0
- package/dist/redaction-marker.js +125 -0
- package/dist/registry.d.ts +30 -28
- package/dist/registry.js +446 -413
- package/dist/routes/access-tokens.js +1 -1
- package/dist/routes/actor-labels.js +1 -1
- package/dist/routes/connect.js +1 -1
- package/dist/routes/dispatch.js +103 -0
- package/dist/routes/mcp.js +170 -79
- package/dist/routes/oauth.js +3 -1
- package/dist/routes/operator.js +2 -2
- package/dist/routes/shared.d.ts +5 -4
- package/dist/routes/shared.js +244 -177
- package/dist/routes/skills.js +10 -8
- package/dist/routes/ui-config.js +27 -3
- package/dist/routes/ui-data.js +29 -22
- package/dist/routes/ui.js +1 -1
- package/dist/runtime/call-admission.js +0 -26
- package/dist/runtime/call-entry.js +30 -0
- package/dist/runtime/call.js +556 -0
- package/dist/runtime/connector-scope.js +7 -0
- package/dist/runtime/credential-probe.js +34 -0
- package/dist/runtime/executor.js +40 -0
- package/dist/runtime/native-storage.js +63 -0
- package/dist/runtime/registry.js +27 -0
- package/dist/runtime/request-scope.js +72 -0
- package/dist/runtime/run.js +15 -7
- package/dist/runtime/shared-read.js +34 -5
- package/dist/runtime/storage.js +34 -21
- package/dist/sent-secrets.d.ts +194 -37
- package/dist/sent-secrets.js +1743 -340
- package/dist/server.js +5 -56
- package/dist/skills.js +330 -224
- package/dist/sqlite.js +15 -14
- package/dist/storage/d1-copy.js +255 -0
- package/dist/storage/d1-driver.js +15 -0
- package/dist/storage/keys.js +28 -0
- package/dist/storage/sql-driver.js +88 -0
- package/dist/storage/sql-native.js +544 -0
- package/dist/storage/sql-schema.d.ts +6 -0
- package/dist/storage/sql-schema.js +15 -0
- package/dist/storage/sql.d.ts +14 -20
- package/dist/storage/sql.js +29 -535
- package/dist/timeout.js +0 -26
- package/dist/tool-safety.js +20 -10
- package/dist/types.d.ts +11 -99
- package/dist/upward.js +3 -0
- package/dist/usage-guide.js +3 -1
- package/dist/validate.d.ts +4 -2
- package/dist/validate.js +86 -9
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/worker.js +312 -292
- package/dist/workspace-subject.js +5 -1
- package/dist/write-outcome.js +454 -34
- package/documentation/README.md +27 -7
- package/documentation/architecture.md +2550 -186
- package/documentation/auth.md +821 -98
- package/documentation/code-mode.md +56 -21
- package/documentation/deploying.md +164 -20
- package/documentation/hosted-mcp-migration.md +460 -0
- package/documentation/integrating.md +144 -105
- package/documentation/meta-tools.md +411 -34
- package/documentation/operating.md +28 -4
- package/documentation/operator-tests.md +11 -2
- package/documentation/operator-ui.md +103 -33
- package/documentation/provider-auth-migration.md +38 -63
- package/documentation/provider-migration-0.29.md +10 -5
- package/documentation/provider-migration-0.35.md +975 -0
- package/documentation/providers.md +965 -0
- package/examples/worker/AGENTS.md +23 -9
- package/examples/worker/README.md +254 -135
- package/examples/worker/alchemy.run.ts +116 -0
- package/examples/worker/gitignore +10 -0
- package/examples/worker/src/connecta.config.ts +23 -21
- package/examples/worker/wrangler.jsonc +14 -5
- package/guides/connecting-agents.md +157 -0
- package/guides/how-it-works.md +156 -0
- package/guides/safety-and-trust.md +153 -0
- package/package.json +27 -42
- package/templates/node/.env.example +3 -0
- package/templates/node/README.md +22 -2
- package/templates/node/docker-compose.yml +1 -0
- package/templates/node/package.json +3 -2
- package/templates/node/src/connecta.config.ts +8 -0
- package/dist/catalog-drift.d.ts +0 -134
- package/dist/catalog-drift.js +0 -493
- package/dist/providers/_shared/request-token.js +0 -83
- package/dist/providers/_shared/rest/operation-index.d.ts +0 -133
- package/dist/providers/_shared/rest/tools.d.ts +0 -141
- package/dist/providers/_shared/rest/value-safety.d.ts +0 -201
- package/dist/providers/basecamp/index.d.ts +0 -43
- package/dist/providers/basecamp/index.js +0 -997
- package/dist/providers/basecamp/skill.generated.js +0 -9
- package/dist/providers/cloudflare/rest.d.ts +0 -37
- package/dist/providers/cloudflare/rest.js +0 -1078
- package/dist/providers/github/hosted.js +0 -218
- package/dist/providers/github/rest.js +0 -321
- package/dist/providers/infisical/index.d.ts +0 -7
- package/dist/providers/infisical/index.js +0 -713
- package/dist/providers/infisical/skill.generated.js +0 -8
- package/dist/providers/linear/index.d.ts +0 -55
- package/dist/providers/linear/index.js +0 -352
- package/dist/providers/linear/skill.generated.js +0 -8
- package/dist/providers/mixpanel/index.d.ts +0 -57
- package/dist/providers/mixpanel/index.js +0 -468
- package/dist/providers/mixpanel/operations.js +0 -20
- package/dist/providers/mixpanel/rest.js +0 -603
- package/dist/providers/mixpanel/skill.generated.js +0 -10
- package/dist/providers/mixpanel/value-safety.js +0 -16
- package/dist/providers/notion/index.d.ts +0 -65
- package/dist/providers/notion/index.js +0 -368
- package/dist/providers/notion/openapi.generated.js +0 -75
- package/dist/providers/notion/rest.d.ts +0 -24
- package/dist/providers/notion/rest.js +0 -1226
- package/dist/providers/notion/skill.generated.js +0 -11
- package/dist/providers/notion/value-safety.js +0 -56
- package/dist/providers/revenuecat/index.d.ts +0 -49
- package/dist/providers/revenuecat/index.js +0 -557
- package/dist/providers/revenuecat/skill.generated.js +0 -11
- package/dist/providers/stripe/rest.d.ts +0 -14
- package/dist/providers/stripe/rest.js +0 -402
- package/dist/providers/vercel/rest.d.ts +0 -20
- package/dist/providers/vercel/rest.js +0 -1020
- package/dist/providers/wispr-flow/index.d.ts +0 -14
- package/dist/providers/wispr-flow/index.js +0 -117
- package/dist/providers/wispr-flow/skill.generated.js +0 -8
- /package/dist/providers/github/{key.js → lib/key.js} +0 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/** Reviewed against the ten pinned public product contracts; see evidence/review.md. */
|
|
2
|
+
import { safe, redact } from "../_shared/rest/value-safety.js";
|
|
3
|
+
export const TABLE = {
|
|
4
|
+
title: "Planning Center",
|
|
5
|
+
embeddedUrls: {},
|
|
6
|
+
fields: {
|
|
7
|
+
"authenticity_secret": { verdict: "redact", reason: "Webhook HMAC verification key." },
|
|
8
|
+
"secret": { verdict: "redact", reason: "Services organization credential." },
|
|
9
|
+
"ical_code": { verdict: "redact", reason: "Private Services calendar-feed access code." },
|
|
10
|
+
"payload": { verdict: "redact", reason: "Opaque JSON webhook payload can embed stored credentials." },
|
|
11
|
+
"request_body": { verdict: "redact", reason: "Stored webhook request bytes can contain embedded credentials." },
|
|
12
|
+
"response_body": {
|
|
13
|
+
verdict: "redact",
|
|
14
|
+
reason: "Third-party response bytes are not a reviewed credential-free shape.",
|
|
15
|
+
},
|
|
16
|
+
"request_headers": { verdict: "redact", reason: "Stored webhook headers can contain authentication values." },
|
|
17
|
+
"response_headers": { verdict: "redact", reason: "Third-party headers can carry cookies and credentials." },
|
|
18
|
+
"file_download_url": { verdict: "redact", reason: "A vendor-minted private file download can grant access." },
|
|
19
|
+
signature: { verdict: "keep", reason: "Services Person email signature text, not a cryptographic signing value." },
|
|
20
|
+
alternate_keys: { verdict: "keep", reason: "Musical keys for a song arrangement." },
|
|
21
|
+
},
|
|
22
|
+
resources: {
|
|
23
|
+
key: "type",
|
|
24
|
+
rules: {
|
|
25
|
+
Attachment: {
|
|
26
|
+
reason: "Attachment download and thumbnail addresses can grant file access.",
|
|
27
|
+
paths: ["attributes.url", "attributes.thumbnail_url"],
|
|
28
|
+
},
|
|
29
|
+
AttachmentActivity: {
|
|
30
|
+
reason: "Activity can copy a private attachment address.",
|
|
31
|
+
paths: ["attributes.attachment_url"],
|
|
32
|
+
},
|
|
33
|
+
SongbookStatus: { reason: "An export download address can grant access.", paths: ["attributes.url"] },
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
operations: {
|
|
37
|
+
"GET /api/v2/personal_access_tokens": safe("Token inventory returns names, ids, dates and revocation metadata, never the token value.", ["data[].attributes.last_used_on"]),
|
|
38
|
+
"GET /api/v2/personal_access_tokens/{personal_access_token_id}": safe("Token inventory returns names, ids, dates and revocation metadata, never the token value.", ["data.attributes.last_used_on"]),
|
|
39
|
+
"GET /api/v2/personal_access_tokens/{personal_access_token_id}/person": safe("Token inventory returns names, ids, dates and revocation metadata, never the token value."),
|
|
40
|
+
"GET /api/v2/personal_access_tokens/{personal_access_token_id}/person/{person_id}": safe("Token inventory returns names, ids, dates and revocation metadata, never the token value."),
|
|
41
|
+
"POST /api/v2/personal_access_tokens/{personal_access_token_id}/revoke": safe("Token inventory returns names, ids, dates and revocation metadata, never the token value."),
|
|
42
|
+
"POST /groups/v2/groups/{group_id}/assign_campuses": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing."),
|
|
43
|
+
"GET /services/v2/me": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.attributes.signature", "included[].attributes.signature"]),
|
|
44
|
+
"POST /services/v2/media/{media_id}/assign_tags": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing."),
|
|
45
|
+
"GET /services/v2/people": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data[].attributes.signature", "included[].attributes.signature"]),
|
|
46
|
+
"GET /services/v2/people/{person_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.attributes.signature", "included[].attributes.signature"]),
|
|
47
|
+
"PATCH /services/v2/people/{person_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.attributes.signature", "included[].attributes.signature"]),
|
|
48
|
+
"POST /services/v2/people/{person_id}/assign_tags": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing."),
|
|
49
|
+
"GET /services/v2/people/{person_id}/person_team_position_assignments": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
50
|
+
"GET /services/v2/people/{person_id}/person_team_position_assignments/{person_team_position_assignment_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
51
|
+
"PATCH /services/v2/people/{person_id}/person_team_position_assignments/{person_team_position_assignment_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
52
|
+
"GET /services/v2/people/{person_id}/plan_people": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
53
|
+
"GET /services/v2/people/{person_id}/plan_people/{plan_person_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
54
|
+
"PATCH /services/v2/people/{person_id}/plan_people/{plan_person_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
55
|
+
"GET /services/v2/people/{person_id}/plan_people/{plan_person_id}/person": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data[].attributes.signature", "included[].attributes.signature"]),
|
|
56
|
+
"GET /services/v2/people/{person_id}/plan_people/{plan_person_id}/person/{person_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.attributes.signature", "included[].attributes.signature"]),
|
|
57
|
+
"PATCH /services/v2/people/{person_id}/plan_people/{plan_person_id}/person/{person_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.attributes.signature", "included[].attributes.signature"]),
|
|
58
|
+
"GET /services/v2/people/{person_id}/plan_people/{plan_person_id}/team": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
59
|
+
"GET /services/v2/people/{person_id}/plan_people/{plan_person_id}/team/{team_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
60
|
+
"GET /services/v2/people/{person_id}/schedules/{schedule_id}/respond_to": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data[].attributes.signature", "included[].attributes.signature"]),
|
|
61
|
+
"GET /services/v2/people/{person_id}/schedules/{schedule_id}/respond_to/{respond_to_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.attributes.signature", "included[].attributes.signature"]),
|
|
62
|
+
"PATCH /services/v2/people/{person_id}/schedules/{schedule_id}/respond_to/{respond_to_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.attributes.signature", "included[].attributes.signature"]),
|
|
63
|
+
"GET /services/v2/people/{person_id}/schedules/{schedule_id}/team": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
64
|
+
"GET /services/v2/people/{person_id}/schedules/{schedule_id}/team/{team_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
65
|
+
"GET /services/v2/people/{person_id}/team_leaders": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
66
|
+
"GET /services/v2/people/{person_id}/team_leaders/{team_leader_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
67
|
+
"GET /services/v2/people/{person_id}/team_leaders/{team_leader_id}/people": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data[].attributes.signature", "included[].attributes.signature"]),
|
|
68
|
+
"GET /services/v2/people/{person_id}/team_leaders/{team_leader_id}/people/{person_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.attributes.signature", "included[].attributes.signature"]),
|
|
69
|
+
"PATCH /services/v2/people/{person_id}/team_leaders/{team_leader_id}/people/{person_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.attributes.signature", "included[].attributes.signature"]),
|
|
70
|
+
"GET /services/v2/people/{person_id}/team_leaders/{team_leader_id}/team": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
71
|
+
"GET /services/v2/people/{person_id}/team_leaders/{team_leader_id}/team/{team_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
72
|
+
"GET /services/v2/plans": redact("Stored credentials and opaque delivery headers stay withheld.", [
|
|
73
|
+
"data[].attributes.secret",
|
|
74
|
+
]),
|
|
75
|
+
"GET /services/v2/plans/{plan_id}": redact("Stored credentials and opaque delivery headers stay withheld.", [
|
|
76
|
+
"data.attributes.secret",
|
|
77
|
+
]),
|
|
78
|
+
"GET /services/v2/series/{series_id}/plans/{plan_id}/live/{live_id}/controller": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data[].attributes.signature", "included[].attributes.signature"]),
|
|
79
|
+
"GET /services/v2/series/{series_id}/plans/{plan_id}/live/{live_id}/controller/{controller_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.attributes.signature", "included[].attributes.signature"]),
|
|
80
|
+
"PATCH /services/v2/series/{series_id}/plans/{plan_id}/live/{live_id}/controller/{controller_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.attributes.signature", "included[].attributes.signature"]),
|
|
81
|
+
"GET /services/v2/series/{series_id}/plans/{plan_id}/live/{live_id}/items": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.alternate_keys", "included[].links.keys"]),
|
|
82
|
+
"GET /services/v2/series/{series_id}/plans/{plan_id}/live/{live_id}/items/{item_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.alternate_keys", "included[].links.keys"]),
|
|
83
|
+
"PATCH /services/v2/series/{series_id}/plans/{plan_id}/live/{live_id}/items/{item_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.alternate_keys", "included[].links.keys"]),
|
|
84
|
+
"GET /services/v2/series/{series_id}/plans/{plan_id}/needed_positions/{needed_position_id}/team": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
85
|
+
"GET /services/v2/series/{series_id}/plans/{plan_id}/needed_positions/{needed_position_id}/team/{team_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
86
|
+
"GET /services/v2/service_types/{service_type_id}/plan_templates/{plan_template_id}/items": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.alternate_keys", "included[].links.keys"]),
|
|
87
|
+
"POST /services/v2/service_types/{service_type_id}/plan_templates/{plan_template_id}/items": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.alternate_keys", "included[].links.keys"]),
|
|
88
|
+
"GET /services/v2/service_types/{service_type_id}/plan_templates/{plan_template_id}/items/{item_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.alternate_keys", "included[].links.keys"]),
|
|
89
|
+
"PATCH /services/v2/service_types/{service_type_id}/plan_templates/{plan_template_id}/items/{item_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.alternate_keys", "included[].links.keys"]),
|
|
90
|
+
"GET /services/v2/service_types/{service_type_id}/plan_templates/{plan_template_id}/team_members": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
91
|
+
"POST /services/v2/service_types/{service_type_id}/plan_templates/{plan_template_id}/team_members": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
92
|
+
"GET /services/v2/service_types/{service_type_id}/plan_templates/{plan_template_id}/team_members/{team_member_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
93
|
+
"PATCH /services/v2/service_types/{service_type_id}/plan_templates/{plan_template_id}/team_members/{team_member_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
94
|
+
"GET /services/v2/service_types/{service_type_id}/plan_times/{plan_time_id}/split_team_rehearsal_assignments/{split_team_rehearsal_assignment_id}/team": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
95
|
+
"GET /services/v2/service_types/{service_type_id}/plan_times/{plan_time_id}/split_team_rehearsal_assignments/{split_team_rehearsal_assignment_id}/team/{team_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
96
|
+
"GET /services/v2/service_types/{service_type_id}/plans/{plan_id}/items": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.alternate_keys", "included[].links.keys"]),
|
|
97
|
+
"POST /services/v2/service_types/{service_type_id}/plans/{plan_id}/items": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.alternate_keys", "included[].links.keys"]),
|
|
98
|
+
"GET /services/v2/service_types/{service_type_id}/plans/{plan_id}/items/{item_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.alternate_keys", "included[].links.keys"]),
|
|
99
|
+
"PATCH /services/v2/service_types/{service_type_id}/plans/{plan_id}/items/{item_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.alternate_keys", "included[].links.keys"]),
|
|
100
|
+
"GET /services/v2/service_types/{service_type_id}/plans/{plan_id}/items/{item_id}/arrangement": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data[].links.keys", "included[].attributes.alternate_keys"]),
|
|
101
|
+
"GET /services/v2/service_types/{service_type_id}/plans/{plan_id}/items/{item_id}/arrangement/{arrangement_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.links.keys", "included[].attributes.alternate_keys"]),
|
|
102
|
+
"PATCH /services/v2/service_types/{service_type_id}/plans/{plan_id}/items/{item_id}/arrangement/{arrangement_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.links.keys", "included[].attributes.alternate_keys"]),
|
|
103
|
+
"GET /services/v2/service_types/{service_type_id}/plans/{plan_id}/items/{item_id}/key": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data[].attributes.alternate_keys"]),
|
|
104
|
+
"GET /services/v2/service_types/{service_type_id}/plans/{plan_id}/items/{item_id}/key/{key_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.attributes.alternate_keys"]),
|
|
105
|
+
"PATCH /services/v2/service_types/{service_type_id}/plans/{plan_id}/items/{item_id}/key/{key_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.attributes.alternate_keys"]),
|
|
106
|
+
"DELETE /services/v2/service_types/{service_type_id}/plans/{plan_id}/items/{item_id}/key/{key_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing."),
|
|
107
|
+
"GET /services/v2/service_types/{service_type_id}/plans/{plan_id}/live": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.alternate_keys", "included[].attributes.signature", "included[].links.keys"]),
|
|
108
|
+
"GET /services/v2/service_types/{service_type_id}/plans/{plan_id}/live/{live_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.alternate_keys", "included[].attributes.signature", "included[].links.keys"]),
|
|
109
|
+
"PATCH /services/v2/service_types/{service_type_id}/plans/{plan_id}/live/{live_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.alternate_keys", "included[].attributes.signature", "included[].links.keys"]),
|
|
110
|
+
"GET /services/v2/service_types/{service_type_id}/plans/{plan_id}/needed_positions": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
111
|
+
"POST /services/v2/service_types/{service_type_id}/plans/{plan_id}/needed_positions": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
112
|
+
"GET /services/v2/service_types/{service_type_id}/plans/{plan_id}/needed_positions/{needed_position_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
113
|
+
"PATCH /services/v2/service_types/{service_type_id}/plans/{plan_id}/needed_positions/{needed_position_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
114
|
+
"GET /services/v2/service_types/{service_type_id}/plans/{plan_id}/signup_teams": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
115
|
+
"GET /services/v2/service_types/{service_type_id}/plans/{plan_id}/signup_teams/{signup_team_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
116
|
+
"GET /services/v2/service_types/{service_type_id}/plans/{plan_id}/team_members": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
117
|
+
"POST /services/v2/service_types/{service_type_id}/plans/{plan_id}/team_members": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
118
|
+
"GET /services/v2/service_types/{service_type_id}/plans/{plan_id}/team_members/{team_member_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
119
|
+
"PATCH /services/v2/service_types/{service_type_id}/plans/{plan_id}/team_members/{team_member_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
120
|
+
"GET /services/v2/service_types/{service_type_id}/team_positions": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
121
|
+
"GET /services/v2/service_types/{service_type_id}/team_positions/{team_position_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
122
|
+
"GET /services/v2/service_types/{service_type_id}/team_positions/{team_position_id}/person_team_position_assignments": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
123
|
+
"POST /services/v2/service_types/{service_type_id}/team_positions/{team_position_id}/person_team_position_assignments": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
124
|
+
"GET /services/v2/service_types/{service_type_id}/team_positions/{team_position_id}/person_team_position_assignments/{person_team_position_assignment_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
125
|
+
"PATCH /services/v2/service_types/{service_type_id}/team_positions/{team_position_id}/person_team_position_assignments/{person_team_position_assignment_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
126
|
+
"GET /services/v2/service_types/{service_type_id}/team_positions/{team_position_id}/person_team_position_assignments/{person_team_position_assignment_id}/person": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data[].attributes.signature", "included[].attributes.signature"]),
|
|
127
|
+
"GET /services/v2/service_types/{service_type_id}/team_positions/{team_position_id}/person_team_position_assignments/{person_team_position_assignment_id}/person/{person_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.attributes.signature", "included[].attributes.signature"]),
|
|
128
|
+
"PATCH /services/v2/service_types/{service_type_id}/team_positions/{team_position_id}/person_team_position_assignments/{person_team_position_assignment_id}/person/{person_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.attributes.signature", "included[].attributes.signature"]),
|
|
129
|
+
"GET /services/v2/service_types/{service_type_id}/team_positions/{team_position_id}/person_team_position_assignments/{person_team_position_assignment_id}/team_position": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
130
|
+
"GET /services/v2/service_types/{service_type_id}/team_positions/{team_position_id}/person_team_position_assignments/{person_team_position_assignment_id}/team_position/{team_position_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
131
|
+
"GET /services/v2/service_types/{service_type_id}/team_positions/{team_position_id}/team": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
132
|
+
"GET /services/v2/service_types/{service_type_id}/team_positions/{team_position_id}/team/{team_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
133
|
+
"GET /services/v2/service_types/{service_type_id}/teams": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
134
|
+
"POST /services/v2/service_types/{service_type_id}/teams": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
135
|
+
"GET /services/v2/service_types/{service_type_id}/teams/{team_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
136
|
+
"GET /services/v2/songs/{song_id}/arrangements": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data[].links.keys", "included[].attributes.alternate_keys"]),
|
|
137
|
+
"POST /services/v2/songs/{song_id}/arrangements": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.links.keys", "included[].attributes.alternate_keys"]),
|
|
138
|
+
"GET /services/v2/songs/{song_id}/arrangements/{arrangement_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.links.keys", "included[].attributes.alternate_keys"]),
|
|
139
|
+
"PATCH /services/v2/songs/{song_id}/arrangements/{arrangement_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.links.keys", "included[].attributes.alternate_keys"]),
|
|
140
|
+
"POST /services/v2/songs/{song_id}/arrangements/{arrangement_id}/assign_tags": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing."),
|
|
141
|
+
"GET /services/v2/songs/{song_id}/arrangements/{arrangement_id}/keys": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data[].attributes.alternate_keys"]),
|
|
142
|
+
"POST /services/v2/songs/{song_id}/arrangements/{arrangement_id}/keys": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.attributes.alternate_keys"]),
|
|
143
|
+
"GET /services/v2/songs/{song_id}/arrangements/{arrangement_id}/keys/{key_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.attributes.alternate_keys"]),
|
|
144
|
+
"PATCH /services/v2/songs/{song_id}/arrangements/{arrangement_id}/keys/{key_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.attributes.alternate_keys"]),
|
|
145
|
+
"DELETE /services/v2/songs/{song_id}/arrangements/{arrangement_id}/keys/{key_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing."),
|
|
146
|
+
"GET /services/v2/songs/{song_id}/arrangements/{arrangement_id}/keys/{key_id}/attachments": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing."),
|
|
147
|
+
"POST /services/v2/songs/{song_id}/arrangements/{arrangement_id}/keys/{key_id}/attachments": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing."),
|
|
148
|
+
"GET /services/v2/songs/{song_id}/arrangements/{arrangement_id}/keys/{key_id}/attachments/{attachment_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing."),
|
|
149
|
+
"PATCH /services/v2/songs/{song_id}/arrangements/{arrangement_id}/keys/{key_id}/attachments/{attachment_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing."),
|
|
150
|
+
"DELETE /services/v2/songs/{song_id}/arrangements/{arrangement_id}/keys/{key_id}/attachments/{attachment_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing."),
|
|
151
|
+
"POST /services/v2/songs/{song_id}/assign_tags": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing."),
|
|
152
|
+
"GET /services/v2/songs/{song_id}/last_scheduled_item": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.alternate_keys", "included[].links.keys"]),
|
|
153
|
+
"GET /services/v2/songs/{song_id}/last_scheduled_item/{last_scheduled_item_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.alternate_keys", "included[].links.keys"]),
|
|
154
|
+
"PATCH /services/v2/songs/{song_id}/last_scheduled_item/{last_scheduled_item_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.alternate_keys", "included[].links.keys"]),
|
|
155
|
+
"GET /services/v2/songs/{song_id}/unscoped_arrangements": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data[].links.keys", "included[].attributes.alternate_keys"]),
|
|
156
|
+
"GET /services/v2/songs/{song_id}/unscoped_arrangements/{unscoped_arrangement_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.links.keys", "included[].attributes.alternate_keys"]),
|
|
157
|
+
"PATCH /services/v2/songs/{song_id}/unscoped_arrangements/{unscoped_arrangement_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.links.keys", "included[].attributes.alternate_keys"]),
|
|
158
|
+
"GET /services/v2/teams": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
159
|
+
"POST /services/v2/teams": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
160
|
+
"GET /services/v2/teams/{team_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
161
|
+
"GET /services/v2/teams/{team_id}/people": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data[].attributes.signature", "included[].attributes.signature"]),
|
|
162
|
+
"GET /services/v2/teams/{team_id}/people/{person_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.attributes.signature", "included[].attributes.signature"]),
|
|
163
|
+
"PATCH /services/v2/teams/{team_id}/people/{person_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["data.attributes.signature", "included[].attributes.signature"]),
|
|
164
|
+
"GET /services/v2/teams/{team_id}/person_team_position_assignments": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
165
|
+
"GET /services/v2/teams/{team_id}/person_team_position_assignments/{person_team_position_assignment_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
166
|
+
"PATCH /services/v2/teams/{team_id}/person_team_position_assignments/{person_team_position_assignment_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
167
|
+
"GET /services/v2/teams/{team_id}/team_leaders": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
168
|
+
"GET /services/v2/teams/{team_id}/team_leaders/{team_leader_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
169
|
+
"GET /services/v2/teams/{team_id}/team_positions": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
170
|
+
"GET /services/v2/teams/{team_id}/team_positions/{team_position_id}": safe("Services signatures are email text and keys are musical notation; assign actions are relationship changes, not signing.", ["included[].attributes.signature"]),
|
|
171
|
+
"GET /webhooks/v2/available_events": safe("Webhook event names and delivery status are metadata; opaque payloads and headers are withheld globally."),
|
|
172
|
+
"GET /webhooks/v2/webhook_subscriptions": redact("Stored credentials and opaque delivery headers stay withheld.", ["data[].attributes.authenticity_secret"], ["data[].links.rotate_secret"]),
|
|
173
|
+
"POST /webhooks/v2/webhook_subscriptions": redact("Stored credentials and opaque delivery headers stay withheld.", ["data.attributes.authenticity_secret"], ["data.links.rotate_secret"]),
|
|
174
|
+
"GET /webhooks/v2/webhook_subscriptions/{webhook_subscription_id}": redact("Stored credentials and opaque delivery headers stay withheld.", ["data.attributes.authenticity_secret"], ["data.links.rotate_secret"]),
|
|
175
|
+
"PATCH /webhooks/v2/webhook_subscriptions/{webhook_subscription_id}": redact("Stored credentials and opaque delivery headers stay withheld.", ["data.attributes.authenticity_secret"], ["data.links.rotate_secret"]),
|
|
176
|
+
"DELETE /webhooks/v2/webhook_subscriptions/{webhook_subscription_id}": safe("Webhook event names and delivery status are metadata; opaque payloads and headers are withheld globally."),
|
|
177
|
+
"GET /webhooks/v2/webhook_subscriptions/{webhook_subscription_id}/events": safe("Webhook event names and delivery status are metadata; opaque payloads and headers are withheld globally."),
|
|
178
|
+
"GET /webhooks/v2/webhook_subscriptions/{webhook_subscription_id}/events/{event_id}": safe("Webhook event names and delivery status are metadata; opaque payloads and headers are withheld globally."),
|
|
179
|
+
"GET /webhooks/v2/webhook_subscriptions/{webhook_subscription_id}/events/{event_id}/deliveries": redact("Stored credentials and opaque delivery headers stay withheld.", ["data[].attributes.request_headers", "data[].attributes.response_headers"]),
|
|
180
|
+
"GET /webhooks/v2/webhook_subscriptions/{webhook_subscription_id}/events/{event_id}/deliveries/{delivery_id}": redact("Stored credentials and opaque delivery headers stay withheld.", [
|
|
181
|
+
"data.attributes.request_headers",
|
|
182
|
+
"data.attributes.response_headers",
|
|
183
|
+
]),
|
|
184
|
+
"POST /webhooks/v2/webhook_subscriptions/{webhook_subscription_id}/events/{event_id}/ignore": safe("Webhook event names and delivery status are metadata; opaque payloads and headers are withheld globally."),
|
|
185
|
+
"POST /webhooks/v2/webhook_subscriptions/{webhook_subscription_id}/events/{event_id}/redeliver": safe("Webhook event names and delivery status are metadata; opaque payloads and headers are withheld globally."),
|
|
186
|
+
"POST /webhooks/v2/webhook_subscriptions/{webhook_subscription_id}/rotate_secret": safe("Webhook event names and delivery status are metadata; opaque payloads and headers are withheld globally."),
|
|
187
|
+
},
|
|
188
|
+
};
|
|
@@ -1,30 +1,5 @@
|
|
|
1
1
|
// Generated by scripts/generate-providers.mjs; do not edit.
|
|
2
2
|
export const skill = {
|
|
3
|
-
"content": "
|
|
4
|
-
"instructionsHeading": "Organization instructions"
|
|
5
|
-
"fragments": {
|
|
6
|
-
"heading": "# Planning Center usage\n\nPlanning Center Online church management — ",
|
|
7
|
-
"purpose": " — for: ",
|
|
8
|
-
"identity": "\n\n## Identity first\n\n- A person id is the join key across every product: the id `search_people` returns is the person id (`personId` argument, `person_id` field) for ",
|
|
9
|
-
"conventions": ". Resolve ids with list tools; never guess one.\n- A person id that used to resolve and now answers `not_found` was most likely merged. Read `/people/v2/person_mergers` with `where[person_to_remove_id]` and follow `person_to_keep_id`.\n- `get_me` names the user this token acts as. Every read and write runs with that user's permissions, product by product; a `provider_permission_denied` means an administrator must grant that user access to the product or record.\n\n## Results and paging\n\n- Records keep Planning Center's own snake_case attribute names; a relationship appears as `<relationship>_id`. Pass `raw: true` for the untouched JSON:API resources and `included`; `get_me` and `list_webhook_subscriptions` have no raw mode.\n- Lists page by offset: `perPage` up to 100, then pass `page.nextOffset` back as `offset` while `page.hasMore` is true. `page.totalCount` answers \"how many\" without paging — request `perPage: 1`.\n- A bare date in a date filter is the organization's local day; pass a full timestamp for exact bounds. Name filters are exact; end one with `%` for a prefix match.\n",
|
|
10
|
-
"plans": "- `get_plan` fetches the plan, its items, and its team in one call and sets `itemsTruncated`/`teamMembersTruncated` past 100 rows; page the rest with `pco_api_get`.\n",
|
|
11
|
-
"writes": "\n## What each product lets the API write\n\n",
|
|
12
|
-
"people": "- People: full read/write. `update_person` with `status: inactive` archives reversibly; a DELETE is permanent and only reachable through `pco_api_mutate`. `run_list` can fire list automations.\n",
|
|
13
|
-
"people_without_lists": "- People: full read/write, except lists. `update_person` with `status: inactive` archives reversibly; a DELETE is permanent and only reachable through `pco_api_mutate`.\n",
|
|
14
|
-
"services": "- Services: full read/write. A plan's dates come from its plan times. Scheduling needs a team.\n",
|
|
15
|
-
"groups": "- Groups: memberships and group settings are writable; groups cannot be created, and events and attendance are read-only.\n",
|
|
16
|
-
"check_ins_registrations": "- Check-Ins and Registrations: read-only. Nobody can be checked in or registered through the API.\n",
|
|
17
|
-
"check_ins": "- Check-Ins: read-only. Nobody can be checked in through the API.\n",
|
|
18
|
-
"registrations": "- Registrations: read-only. Nobody can be registered through the API.\n",
|
|
19
|
-
"calendar": "- Calendar: events, instances, and times are read-only; tags, resources, rooms, and folders are writable through `pco_api_mutate`.\n",
|
|
20
|
-
"giving": "- Giving: the named tools only read, amounts in integer cents. Creating or editing donations, refunds, and committing a batch move money and go through `pco_api_mutate`.\n",
|
|
21
|
-
"publishing_api": "- Publishing and the `api` product (organization, OAuth applications, personal access tokens) have no named tools; use the hatches.\n",
|
|
22
|
-
"publishing": "- Publishing has no named tools; use the hatches.\n",
|
|
23
|
-
"api": "- The `api` product (organization, OAuth applications, personal access tokens) has no named tools; use the hatches.\n",
|
|
24
|
-
"hatches": "\n## The hatches\n\n- `pco_api_get` reaches any GET; `pco_api_mutate` any POST, PATCH, or DELETE, always approval-gated. Paths start `/<app>/v2`, exactly as Planning Center documents them; the connector owns host, auth, content type, and the `X-PCO-API-Version` header.\n- Bodies are JSON:API documents: `{\"data\":{\"type\":\"Email\",\"attributes\":{...}}}`. `null` clears an attribute; an omitted key is left alone.\n- Each product is pinned to a reviewed API version: ",
|
|
25
|
-
"pins": ". Pass `version` only for an endpoint those versions lack.\n- Query parameters are name/value pairs with literal brackets: `where[status]`, `include`, `order`, `filter`, `fields[Person]`. Every list response's `meta` names the `can_query_by`, `can_order_by`, and `can_include` values for that endpoint; an unknown `where` key is ignored rather than refused.\n- File uploads go to a separate host (upload.planningcenteronline.com), which this connection does not reach.\n",
|
|
26
|
-
"disabled": "- This deployment disables some products, and the hatches refuse their paths before sending. While any product is disabled they also refuse People lists, list results, rules, and conditions, by path or `include`, because a list's conditions can draw on any product; webhook event and delivery payloads; and any change to an existing webhook subscription, whose id does not name its product. A new subscription must name a reachable product's event.\n",
|
|
27
|
-
"limits": "\n## Rate limits\n\nPlanning Center allows 100 requests per 20 seconds per user, shared by every integration running as that user. This connection admits 100 calls per 20 seconds, five at a time, per runtime — an approximation, not a guarantee. A `rate_limited` failure carries Planning Center's wait. Filter server-side and use `totalCount` rather than paging to count.\n",
|
|
28
|
-
"published": "# Planning Center usage\n\nPlanning Center Online church management — People, Services, Groups, Check-Ins, Calendar, Registrations, Giving, Publishing, Webhooks.\n\n## Identity first\n\n- A person id is the join key across every product: the id `search_people` returns is the person id (`personId` argument, `person_id` field) for Services schedules, Groups memberships, Giving donations, and Check-Ins. Resolve ids with list tools; never guess one.\n- A person id that used to resolve and now answers `not_found` was most likely merged. Read `/people/v2/person_mergers` with `where[person_to_remove_id]` and follow `person_to_keep_id`.\n- `get_me` names the user this token acts as. Every read and write runs with that user's permissions, product by product; a `provider_permission_denied` means an administrator must grant that user access to the product or record.\n\n## Results and paging\n\n- Records keep Planning Center's own snake_case attribute names; a relationship appears as `<relationship>_id`. Pass `raw: true` for the untouched JSON:API resources and `included`; `get_me` and `list_webhook_subscriptions` have no raw mode.\n- Lists page by offset: `perPage` up to 100, then pass `page.nextOffset` back as `offset` while `page.hasMore` is true. `page.totalCount` answers \"how many\" without paging — request `perPage: 1`.\n- A bare date in a date filter is the organization's local day; pass a full timestamp for exact bounds. Name filters are exact; end one with `%` for a prefix match.\n- `get_plan` fetches the plan, its items, and its team in one call and sets `itemsTruncated`/`teamMembersTruncated` past 100 rows; page the rest with `pco_api_get`.\n\n## What each product lets the API write\n\n- People: full read/write. `update_person` with `status: inactive` archives reversibly; a DELETE is permanent and only reachable through `pco_api_mutate`. `run_list` can fire list automations.\n- Services: full read/write. A plan's dates come from its plan times. Scheduling needs a team.\n- Groups: memberships and group settings are writable; groups cannot be created, and events and attendance are read-only.\n- Check-Ins and Registrations: read-only. Nobody can be checked in or registered through the API.\n- Calendar: events, instances, and times are read-only; tags, resources, rooms, and folders are writable through `pco_api_mutate`.\n- Giving: the named tools only read, amounts in integer cents. Creating or editing donations, refunds, and committing a batch move money and go through `pco_api_mutate`.\n- Publishing and the `api` product (organization, OAuth applications, personal access tokens) have no named tools; use the hatches.\n\n## The hatches\n\n- `pco_api_get` reaches any GET; `pco_api_mutate` any POST, PATCH, or DELETE, always approval-gated. Paths start `/<app>/v2`, exactly as Planning Center documents them; the connector owns host, auth, content type, and the `X-PCO-API-Version` header.\n- Bodies are JSON:API documents: `{\"data\":{\"type\":\"Email\",\"attributes\":{...}}}`. `null` clears an attribute; an omitted key is left alone.\n- Each product is pinned to a reviewed API version: people 2026-06-04, services 2018-11-01, groups 2023-07-10, check-ins 2025-05-28, calendar 2026-06-22, registrations 2025-05-01, giving 2019-10-18, publishing 2024-03-25, webhooks 2022-10-20, api 2026-09-24. Pass `version` only for an endpoint those versions lack.\n- Query parameters are name/value pairs with literal brackets: `where[status]`, `include`, `order`, `filter`, `fields[Person]`. Every list response's `meta` names the `can_query_by`, `can_order_by`, and `can_include` values for that endpoint; an unknown `where` key is ignored rather than refused.\n- File uploads go to a separate host (upload.planningcenteronline.com), which this connection does not reach.\n\n## Rate limits\n\nPlanning Center allows 100 requests per 20 seconds per user, shared by every integration running as that user. This connection admits 100 calls per 20 seconds, five at a time, per runtime — an approximation, not a guarantee. A `rate_limited` failure carries Planning Center's wait. Filter server-side and use `totalCount` rather than paging to count.\n"
|
|
29
|
-
}
|
|
3
|
+
"content": "## Identity first\n\nA People person id joins records across products. Resolve people by identity,\nthen join on `person_id`; names can repeat. A membership, scheduled person,\nworkflow card and person each have their own record id.\n\n`get_me` identifies the token's user and the organization's time zone. Bare\ndates mean the organization's local day; use a timestamp with an offset for\nan exact boundary. Name filters are exact unless their value ends in `%`.\n\nAn old person id may have been merged. Read `/people/v2/person_mergers` with\n`where[person_to_remove_id]`, follow `person_to_keep_id`, then read that profile.\nAn empty history does not establish that a person was merged.\n\nReduce pastoral information inside `execute_code` and return aggregates unless\nthe task needs named people. A named projection omits some safe vendor fields;\nread the indexed record when the task needs those fields.\n\n<!-- when: people -->\n## People and follow-up\n\nResolve a person before changing their profile. An omitted attribute leaves\nthe current value alone; `null` clears it. Archiving a person is reversible;\ndeleting a profile is permanent.\n\nWorkflow cards join people to a workflow and its ordered steps. Resolve both\nthe card id and its person id before acting on a card. Snoozing needs a duration;\npromoting a card completes its step, while skipping moves on without completing\nit. A workflow card note and a profile note are different records. Profile note\ncategories can notify their subscribers.\n\nCustom field values need their field-definition records to supply names and\ndata types. Form answers similarly join submissions, values and fields; the\nAPI cannot submit a form on someone's behalf.\n<!-- end -->\n\n<!-- when: lists -->\nSaved People lists are live cross-product queries. Their results are only as\nfresh as their last refresh. Refreshing a list can fire its automations, such\nas adding a person to a workflow, and is a write even when the task is a count.\n<!-- end -->\n\n<!-- when: services -->\n## Services plans and schedules\n\nResolve the service type before finding a dated plan. Plan times define the\nservice dates. `get_plan` combines the plan, order of service and scheduled\nteam; a cut section can be read through its indexed items or team-members path.\nItem durations are seconds, so divide by 60 when reporting minutes.\n\nScheduling needs a team and may need a position. `C` means confirmed, `U`\nunconfirmed and `D` declined. Preparing a notification and sending it are\ndifferent actions. A song item's identity comes from its song and arrangement;\nmusical keys are not credentials. Services cannot upload a file through this\nconnection.\n<!-- end -->\n\n<!-- when: groups -->\n## Groups membership joins\n\nUse a group's membership records to distinguish leaders from members. On this\nAPI version memberships carry no person attributes; `include=person` supplies\nnames, and the related person id supplies contact details and other product\nrecords. The API can change memberships and group settings, but cannot create\na group, create a meeting or record group attendance.\n<!-- end -->\n\n<!-- when: check-ins -->\n## Check-Ins occurrences\n\nAn event is recurring; its event period is a dated occurrence. Period counts\nare the efficient attendance answer. Individual check-ins join a person to a\nperiod, and date filtering uses the period's start, not the check-in's creation\ntime. The API cannot check anyone in or out.\n<!-- end -->\n\n<!-- when: calendar -->\n## Calendar occurrences\n\nEvent instances expand recurrence into occurrences. A booking can return a\n`BookedEvent` stub when the user lacks access to its event. Events, instances\nand times are read-only; tags, resources, rooms and folders have write APIs.\n<!-- end -->\n\n<!-- when: registrations -->\n## Registrations\n\nA signup describes a registration event. Its attendee records join back to\nPeople and distinguish active, waitlisted and canceled attendees. This API\ncannot register someone.\n<!-- end -->\n\n<!-- when: giving -->\n## Giving amounts and donor joins\n\nAmounts are integer cents with an explicit currency. A donation's designations\nallocate it across funds; do not count a donation once per designation. Join\ndonors by person id and funds by fund id. Recurring schedules and the donations\nthey produce are different records. Creating/editing a donation, refunding it\nor committing a batch changes financial records; named giving tools only read.\n<!-- end -->\n\n<!-- when: publishing -->\n## Publishing\n\nEpisodes, channels and resources are available through the indexed API. A public\nChurch Center link and a media resource are different things; use the record\nthe task asks for. Signed download URL generation is refused because the\nprivate link would remain withheld.\n<!-- end -->\n\n<!-- when: webhooks -->\n## Webhooks\n\nA subscription names an event and callback destination. Signing keys, private\ndownload destinations and opaque event/delivery payloads or headers remain\nwithheld. Status and event metadata are available for audits.\nWebhook signing-key rotation is refused: the new credential cannot be returned\nor installed on the receiver through this connection.\n<!-- end -->\n\n<!-- when: api -->\n## Organization API\n\nThe organization API includes application metadata and personal-access-token\ninventory. Inventory records describe tokens; they do not return their values.\nRevoking a token is a write and may interrupt another integration, including\nthis connection if its own token is revoked.\n<!-- end -->\n\n<!-- when: limited -->\n## Product boundary\n\nSome products are unavailable on this connection. People lists and their rules\nare unavailable because they can query another product. Webhook payloads and\nchanges to existing subscriptions are unavailable because their ids do not name\ntheir product. A new subscription must name a reachable product's event.\n\nStored workflow cards, notes, custom fields and form answers remain readable\nwhen reachable: staff or automations may have copied information into them.\nThe connection does not infer the provenance of those stored records.\n<!-- end -->\n\n## Not available\n\nOnly reviewed product versions and indexed operations are callable. File\nuploads use a separate host this connection does not reach. Credentials and\nprivate calendar access codes cannot be recovered through a tool.\n\n## Conventions\n\n- **Paging:** while `page.hasMore` is true, continue with `page.nextCursor` unchanged. For `list_person_field_data`, `list_person_notes`, `list_workflow_cards`, `list_workflows`, `pco_api_details`, `pco_api_search`, `search_people`, pass it as the top-level `cursor`; omit raw paging anchors on continuations. For `pco_api_read`, put it in `query[page.param]` or `body[page.param]`, as `page.in` specifies. Keep the original method, path, filters, page size, fields and headers. Paged `list_*` and `search_*` reads take `limit` (default 25, at most 100). The last page has no `nextCursor`. If `page.hasMore` is true without a cursor, the data is incomplete and continuation was withheld. When approaching execute_code's per-program call limit, return page.nextCursor before the call that would exceed it and continue in the next program; don't restart.\n<!-- when: services -->\n- **Paging:** For `list_person_schedules`, `list_plans`, `list_service_types`, `list_teams`, pass `page.nextCursor` as the top-level `cursor`.\n<!-- end -->\n<!-- when: groups -->\n- **Paging:** For `list_group_memberships`, `list_groups`, pass `page.nextCursor` as the top-level `cursor`.\n<!-- end -->\n<!-- when: giving -->\n- **Paging:** For `list_donations`, `list_funds`, pass `page.nextCursor` as the top-level `cursor`.\n<!-- end -->\n- **Results:** `fields` narrows a read's result to the dot paths you name. `truncated` lists the dot paths a result cut for size; the ids that fetch what was cut stay in the result.\n- **Hatch:** `pco_api_search` finds this API's operations and reads no account data, `pco_api_details` shows one operation's contract, and `pco_api_read` calls a reviewed read. `pco_api_write` calls a reviewed write; the host may ask the user to confirm it. An operation without a reviewed verdict is refused. 2 operations are refused by design; use `pco_api_details` with the method and path to inspect the original operation summary and its separate refusal. Use details for refused methods outside the read/write call schemas; those methods remain unavailable.\n- **Writes:** a write is sent once and never retried. When its outcome is unknown, read the target before repeating it. Writes take no idempotency key.\n- **Errors:** codes come from the vendor's statuses and error facts, never its prose. `not_found` means the record does not exist; this API tells absence from a permission gap. `conflict` means: HTTP 409 for duplicate records in People.\n- **Withheld values:** a value withheld for safety reads `\"[redacted]\"`. Writes refuse whole marker values and withheld links; longer prose may mention the marker. Paths and queries refuse any containment.",
|
|
4
|
+
"instructionsHeading": "Organization instructions"
|
|
30
5
|
};
|