@wildo-ai/saas-technical-doc 1.1.2 → 1.1.4
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/dist/esm/build/csp-emit.d.ts.map +1 -1
- package/dist/esm/build/load-materialized-frontend-providers.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/application-administration-documentation.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/application-administration-documentation.js.map +1 -1
- package/dist/esm/companion/application-documentation/application-authentication-documentation.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/application-connection-documentation.d.ts +25 -1
- package/dist/esm/companion/application-documentation/application-connection-documentation.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/application-connection-documentation.js +28 -1
- package/dist/esm/companion/application-documentation/application-connection-documentation.js.map +1 -1
- package/dist/esm/companion/application-documentation/application-domain-documentation.d.ts +133 -0
- package/dist/esm/companion/application-documentation/application-domain-documentation.d.ts.map +1 -0
- package/dist/esm/companion/application-documentation/application-domain-documentation.js +243 -0
- package/dist/esm/companion/application-documentation/application-domain-documentation.js.map +1 -0
- package/dist/esm/companion/application-documentation/application-integration-documentation.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/application-integration-documentation.js +23 -0
- package/dist/esm/companion/application-documentation/application-integration-documentation.js.map +1 -1
- package/dist/esm/companion/application-documentation/application-organization-role-documentation.d.ts +30 -0
- package/dist/esm/companion/application-documentation/application-organization-role-documentation.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/application-organization-role-documentation.js +38 -0
- package/dist/esm/companion/application-documentation/application-organization-role-documentation.js.map +1 -1
- package/dist/esm/companion/application-documentation/application-organization-unit-resource-documentation.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.d.ts +61 -1
- package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.js +255 -218
- package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.js.map +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-operational-evidence.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.d.ts +2 -0
- package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.js +1 -0
- package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.js.map +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.js +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.js.map +1 -1
- package/dist/esm/companion/content/application-consumer-documentation-content-loader.d.ts.map +1 -1
- package/dist/esm/companion/index.d.ts +2 -1
- package/dist/esm/companion/index.d.ts.map +1 -1
- package/dist/esm/companion/index.js +2 -1
- package/dist/esm/companion/index.js.map +1 -1
- package/dist/esm/companion/manual-controller-route-projection.d.ts +112 -0
- package/dist/esm/companion/manual-controller-route-projection.d.ts.map +1 -0
- package/dist/esm/companion/manual-controller-route-projection.js +249 -0
- package/dist/esm/companion/manual-controller-route-projection.js.map +1 -0
- package/dist/esm/companion/openapi-generator.d.ts +16 -0
- package/dist/esm/companion/openapi-generator.d.ts.map +1 -1
- package/dist/esm/companion/openapi-generator.js +493 -26
- package/dist/esm/companion/openapi-generator.js.map +1 -1
- package/dist/esm/companion/operation-projection.schemas.d.ts +44 -0
- package/dist/esm/companion/operation-projection.schemas.d.ts.map +1 -1
- package/dist/esm/companion/operation-projection.schemas.js +37 -0
- package/dist/esm/companion/operation-projection.schemas.js.map +1 -1
- package/dist/esm/companion/publish-result.types.d.ts +37 -4
- package/dist/esm/companion/publish-result.types.d.ts.map +1 -1
- package/dist/esm/companion/publish-result.types.js.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-authorized-bundle-reader.d.ts.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.d.ts +7 -1
- package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.d.ts.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.js +34 -18
- package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.js.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.d.ts.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.js +8 -1
- package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.js.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-openapi-renderer.d.ts.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-render-model.d.ts.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-render-model.js +30 -13
- package/dist/esm/companion/rendering/technical-documentation-render-model.js.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.d.ts +10 -0
- package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.d.ts.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.js +10 -15
- package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.js.map +1 -1
- package/dist/esm/companion/technical-documentation-asset-path.d.ts.map +1 -1
- package/dist/esm/companion/technical-documentation-capture-execution-port.d.ts +27 -1
- package/dist/esm/companion/technical-documentation-capture-execution-port.d.ts.map +1 -1
- package/dist/esm/companion/technical-documentation-capture-execution-port.js.map +1 -1
- package/dist/esm/companion/technical-documentation-diagram-definitions.d.ts +33 -0
- package/dist/esm/companion/technical-documentation-diagram-definitions.d.ts.map +1 -0
- package/dist/esm/companion/technical-documentation-diagram-definitions.js +54 -0
- package/dist/esm/companion/technical-documentation-diagram-definitions.js.map +1 -0
- package/dist/esm/companion/technical-documentation-diagram-materializer.d.ts +10 -18
- package/dist/esm/companion/technical-documentation-diagram-materializer.d.ts.map +1 -1
- package/dist/esm/companion/technical-documentation-diagram-materializer.js +9 -39
- package/dist/esm/companion/technical-documentation-diagram-materializer.js.map +1 -1
- package/dist/esm/companion/technical-documentation-placeholder-materializer.d.ts.map +1 -1
- package/dist/esm/companion/zod-to-openapi.d.ts.map +1 -1
- package/dist/esm/companion-exports.d.ts.map +1 -1
- package/dist/esm/config/define-tech-doc-config.d.ts.map +1 -1
- package/dist/esm/config/index.d.ts.map +1 -1
- package/dist/esm/config/wildo-tech-doc-config.schemas.d.ts +8 -4
- package/dist/esm/config/wildo-tech-doc-config.schemas.d.ts.map +1 -1
- package/dist/esm/config/wildo-tech-doc-config.schemas.js +8 -4
- package/dist/esm/config/wildo-tech-doc-config.schemas.js.map +1 -1
- package/dist/esm/content/application-consumer-documentation-content-manifest.schemas.d.ts.map +1 -1
- package/dist/esm/content/application-consumer-documentation-content.techdoc.d.ts +42 -64
- package/dist/esm/content/application-consumer-documentation-content.techdoc.d.ts.map +1 -1
- package/dist/esm/content/application-consumer-documentation-content.techdoc.js +164 -925
- package/dist/esm/content/application-consumer-documentation-content.techdoc.js.map +1 -1
- package/dist/esm/content.exports.d.ts.map +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/openapi/api-reference-link-index.d.ts.map +1 -1
- package/dist/esm/openapi/index.d.ts.map +1 -1
- package/dist/esm/openapi/openapi-generation-output.schemas.d.ts.map +1 -1
- package/dist/esm/openapi-reference-model.exports.d.ts.map +1 -1
- package/dist/esm/runtime/AuthExchangePage.d.ts.map +1 -1
- package/dist/esm/runtime/DocsAuthContext.d.ts +16 -1
- package/dist/esm/runtime/DocsAuthContext.d.ts.map +1 -1
- package/dist/esm/runtime/DocsAuthContext.js +18 -2
- package/dist/esm/runtime/DocsAuthContext.js.map +1 -1
- package/dist/esm/runtime/decode-jwt-claims.d.ts.map +1 -1
- package/dist/esm/runtime/docs-auth-client.d.ts.map +1 -1
- package/dist/esm/runtime/docs-auth-session.schemas.d.ts.map +1 -1
- package/dist/esm/runtime/frontend-provider-registry.techdoc.d.ts +35 -13
- package/dist/esm/runtime/frontend-provider-registry.techdoc.d.ts.map +1 -1
- package/dist/esm/runtime/frontend-provider-registry.techdoc.js +28 -19
- package/dist/esm/runtime/frontend-provider-registry.techdoc.js.map +1 -1
- package/dist/esm/runtime/index.d.ts +1 -0
- package/dist/esm/runtime/index.d.ts.map +1 -1
- package/dist/esm/runtime/index.js +1 -0
- package/dist/esm/runtime/index.js.map +1 -1
- package/dist/esm/runtime/openapi-reference-conservation.d.ts.map +1 -1
- package/dist/esm/runtime/use-docs-auth-session.d.ts.map +1 -1
- package/dist/esm/runtime/use-docs-frontend-provider-registry.d.ts.map +1 -1
- package/dist/esm/runtime/use-docs-provider-sdks.d.ts +21 -0
- package/dist/esm/runtime/use-docs-provider-sdks.d.ts.map +1 -0
- package/dist/esm/runtime/use-docs-provider-sdks.js +49 -0
- package/dist/esm/runtime/use-docs-provider-sdks.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +6 -5
- package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.d.ts +0 -9
- package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.d.ts.map +0 -1
- package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.js +0 -111
- package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.js.map +0 -1
|
@@ -7,9 +7,22 @@
|
|
|
7
7
|
* generated application may consume them.
|
|
8
8
|
*
|
|
9
9
|
* The fragments describe customer-facing product domains and integration
|
|
10
|
-
* journeys, not a generic “technical guides” catalogue.
|
|
11
|
-
*
|
|
12
|
-
*
|
|
10
|
+
* journeys, not a generic “technical guides” catalogue.
|
|
11
|
+
*
|
|
12
|
+
* This header used to say application-domain use cases were "deliberately absent until the
|
|
13
|
+
* app-creator flow owns their authoring and acceptance". That sentence is retired, and it is worth
|
|
14
|
+
* keeping the reason: stated as policy, the largest gap in the whole site read as a decision
|
|
15
|
+
* rather than a defect, and survived every review for exactly that long. A customer could learn
|
|
16
|
+
* how to verify a webhook signature before learning what the product manages.
|
|
17
|
+
*
|
|
18
|
+
* `what-this-application-manages.md` closes it WITHOUT anyone authoring per-application prose,
|
|
19
|
+
* which is what the original reservation was protecting: the page is engine-authored and every
|
|
20
|
+
* fact in it is projected from sources the application already accepted — its own resource
|
|
21
|
+
* registry, its declared API-reference categories, and each specification's purpose and lifecycle.
|
|
22
|
+
*
|
|
23
|
+
* What remains genuinely deferred is a page PER resource. Those need a variable unit set, and the
|
|
24
|
+
* renderer's route table is deliberately fixed (see `pathForUnit`), so an application-owned unit
|
|
25
|
+
* still fails closed rather than acquiring an implicit route.
|
|
13
26
|
*/
|
|
14
27
|
export const APPLICATION_CONSUMER_DOCUMENTATION_AUTHORED_CONTENT_V1 = [
|
|
15
28
|
{
|
|
@@ -27,6 +40,7 @@ This documentation is for the people who use, administer, integrate with or oper
|
|
|
27
40
|
|
|
28
41
|
| You need to | Start here | You will find |
|
|
29
42
|
| --- | --- | --- |
|
|
43
|
+
| Understand what this application is for | [What {{APPLICATION_NAME}} manages](/what-this-application-manages) | The things it manages, in its own words, and who may act on each |
|
|
30
44
|
| Sign in, set up a second factor, or get back into your account | [Access and identity](/access-and-identity/overview) | The sign-in methods, multifactor enrollment and recovery, and what a refusal means |
|
|
31
45
|
| Invite someone, change what they may do, or remove them | [User administration](/user-administration) | Memberships, the roles available in this application, organization units, single sign-on and directory provisioning |
|
|
32
46
|
| Call the API from your own code | [Send your first API request](/integrations/rest/send-request) | A working request in ten minutes, then the [conventions](/integrations/rest/conventions) every operation follows |
|
|
@@ -34,7 +48,6 @@ This documentation is for the people who use, administer, integrate with or oper
|
|
|
34
48
|
| Build in n8n, Zapier or Make | [Automation platforms](/integrations/automation-platforms) | The exact settings for each tool |
|
|
35
49
|
| Connect an AI assistant such as Cursor, Codex or Claude Code | [AI coding tools](/integrations/ai-coding-tools) | The MCP connection and what the assistant may do |
|
|
36
50
|
| Investigate who did what, or export security evidence | [Security and audit](/security-and-audit) | The audit trail, exports and delivery to your SIEM |
|
|
37
|
-
| Understand a plan, an invoice or why access changed | [Billing and subscriptions](/billing-and-subscriptions) | How billing state turns into access, and how to reconcile a change |
|
|
38
51
|
| Look up one operation, field or role | [API reference](/api) | The exact contract of every operation, generated from the application itself |
|
|
39
52
|
|
|
40
53
|
Sections appear in the navigation only when this application offers the capability. If a section named above is missing, the application does not expose that capability, and no setting on your side adds it.
|
|
@@ -54,6 +67,45 @@ Sections appear in the navigation only when this application offers the capabili
|
|
|
54
67
|
## When you ask for help
|
|
55
68
|
|
|
56
69
|
Give the organization, the page or operation you were using, the time, what you expected and what you saw. For an API call, add the HTTP status and the \`error.correlationId\` from the response; for a webhook, the delivery identifier and \`jti\`. Never include a password, an API key, a bearer token or another person's data.`,
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
managedPath: 'what-this-application-manages.md',
|
|
73
|
+
unitRef: 'technical-documentation:unit/what-this-application-manages',
|
|
74
|
+
sourceRefs: [
|
|
75
|
+
'saas-technical-doc:engine-content/what-this-application-manages',
|
|
76
|
+
'source:companion-projection:application-connection',
|
|
77
|
+
'source:companion-projection:application-domain',
|
|
78
|
+
],
|
|
79
|
+
markdown: `# What {{APPLICATION_NAME}} manages
|
|
80
|
+
|
|
81
|
+
Every other page here explains how to reach this application, administer it, integrate with it or
|
|
82
|
+
pay for it. This one says what it is FOR.
|
|
83
|
+
|
|
84
|
+
Everything below is the application's own: the things it stores, the words it uses for them, and
|
|
85
|
+
who may act on each. None of it is written by the framework — it is read from the application's own
|
|
86
|
+
resource definitions, so it says what this deployment actually publishes rather than what a product
|
|
87
|
+
of this kind usually does.
|
|
88
|
+
|
|
89
|
+
## What it manages
|
|
90
|
+
|
|
91
|
+
{{APPLICATION_DOMAIN:domainOverview}}
|
|
92
|
+
|
|
93
|
+
## Each one in detail
|
|
94
|
+
|
|
95
|
+
{{APPLICATION_DOMAIN:domainResourceDetails}}
|
|
96
|
+
|
|
97
|
+
## Where to go next
|
|
98
|
+
|
|
99
|
+
| You need to | Go to |
|
|
100
|
+
| --- | --- |
|
|
101
|
+
| Read or change any of this from your own code | [Send your first API request](/integrations/rest/send-request) |
|
|
102
|
+
| Look up the exact fields, arguments and responses | [API reference](/api) |
|
|
103
|
+
| Be notified when one of these changes | [Webhooks](/integrations/webhooks) |
|
|
104
|
+
| Let an AI assistant work with them | [AI coding tools](/integrations/ai-coding-tools) |
|
|
105
|
+
| Change who may act on them | [Roles in this application](/user-administration/roles-and-permissions) |
|
|
106
|
+
|
|
107
|
+
The names above are the API's own, so a name you read here is the one you will send, the one an
|
|
108
|
+
error message will quote back, and the one a webhook payload will carry.`,
|
|
57
109
|
},
|
|
58
110
|
{
|
|
59
111
|
managedPath: 'access-and-identity/overview.md',
|
|
@@ -1663,6 +1715,7 @@ value or a screenshot containing them.`,
|
|
|
1663
1715
|
unitRef: 'technical-documentation:unit/oauth-provider',
|
|
1664
1716
|
sourceRefs: [
|
|
1665
1717
|
'saas-technical-doc:engine-content/oauth-provider',
|
|
1718
|
+
'source:companion-projection:application-connection',
|
|
1666
1719
|
'source:consumer-fact:access-oauth-clients',
|
|
1667
1720
|
],
|
|
1668
1721
|
markdown: `# OAuth provider and delegated access
|
|
@@ -1739,12 +1792,16 @@ token, key, user-information, revocation and logout endpoints belong to the API
|
|
|
1739
1792
|
issuer. They are deliberately not all under one hand-constructed path.
|
|
1740
1793
|
|
|
1741
1794
|
~~~bash
|
|
1742
|
-
APPLICATION_OAUTH_ISSUER="https://api.example.invalid"
|
|
1743
|
-
|
|
1744
1795
|
curl --fail --silent --show-error \
|
|
1745
|
-
"
|
|
1796
|
+
"{{APPLICATION_CONNECTION_VALUE:oauthMetadataUrl}}"
|
|
1746
1797
|
~~~
|
|
1747
1798
|
|
|
1799
|
+
That URL is not the issuer with the well-known segment appended, and the difference matters. RFC
|
|
1800
|
+
8414 inserts \`/.well-known/oauth-authorization-server\` **between the host and the issuer's path**,
|
|
1801
|
+
while OpenID Connect discovery appends its suffix to the issuer — the opposite construction. This
|
|
1802
|
+
application's issuer is \`{{APPLICATION_CONNECTION_VALUE:oauthIssuer}}\`, and it serves the same
|
|
1803
|
+
metadata document at both locations, so a client that derives either way finds it.
|
|
1804
|
+
|
|
1748
1805
|
Check the returned \`issuer\` exactly. Then read the advertised grants,
|
|
1749
1806
|
\`code_challenge_methods_supported\`, token authentication methods, registration
|
|
1750
1807
|
endpoint and resource-indicator support before configuring the client. A
|
|
@@ -3524,6 +3581,7 @@ same membership or unit assignment.`,
|
|
|
3524
3581
|
unitRef: 'technical-documentation:unit/scim-protocol-and-payloads',
|
|
3525
3582
|
sourceRefs: [
|
|
3526
3583
|
'saas-technical-doc:engine-content/scim-protocol-and-payloads',
|
|
3584
|
+
'source:companion-projection:application-connection',
|
|
3527
3585
|
'source:consumer-fact:organization-scim-provisioning',
|
|
3528
3586
|
],
|
|
3529
3587
|
markdown: `# SCIM protocol and payload reference
|
|
@@ -3599,11 +3657,10 @@ and does not prove that the person can complete SSO.
|
|
|
3599
3657
|
|
|
3600
3658
|
## Understand the base URL
|
|
3601
3659
|
|
|
3602
|
-
|
|
3603
|
-
\`/api/v1/scim/v2\`. A provider needs the complete public URL:
|
|
3660
|
+
This is the complete base URL a provider needs. Everything below hangs off it:
|
|
3604
3661
|
|
|
3605
3662
|
~~~text
|
|
3606
|
-
|
|
3663
|
+
{{APPLICATION_CONNECTION_VALUE:scimBaseUrl}}
|
|
3607
3664
|
~~~
|
|
3608
3665
|
|
|
3609
3666
|
The organization is not encoded in that URL. The bearer token identifies the
|
|
@@ -3706,6 +3763,7 @@ application’s discovery response to understand the implemented profile.`,
|
|
|
3706
3763
|
unitRef: 'technical-documentation:unit/scim-configure',
|
|
3707
3764
|
sourceRefs: [
|
|
3708
3765
|
'saas-technical-doc:engine-content/scim-configure',
|
|
3766
|
+
'source:companion-projection:application-connection',
|
|
3709
3767
|
'source:consumer-fact:organization-scim-provisioning',
|
|
3710
3768
|
],
|
|
3711
3769
|
markdown: `# Configure SCIM provisioning
|
|
@@ -4455,6 +4513,8 @@ is not misread as self-service.
|
|
|
4455
4513
|
from retries and dead-letter state.
|
|
4456
4514
|
- [Protect and retain audit evidence](/security-and-audit/protect-evidence)
|
|
4457
4515
|
without turning a diagnostic copy into an uncontrolled data store.
|
|
4516
|
+
- [Respond to a leaked credential](/security-and-audit/respond-to-leaked-credential)
|
|
4517
|
+
in the order an incident requires: contain, then assess, then recover.
|
|
4458
4518
|
|
|
4459
4519
|
Close each task with the question, organization/environment, filters and time
|
|
4460
4520
|
boundary, event and correlation identifiers, current-state comparison, reviewer
|
|
@@ -5411,6 +5471,89 @@ Close the incident with source event ID, organization/environment, destination,
|
|
|
5411
5471
|
filter decision, failure class, attempts, configuration correction, retry/purge
|
|
5412
5472
|
decision, receiver lookup and correlation evidence. Exclude authentication
|
|
5413
5473
|
secrets, raw Authorization headers and unnecessary event personal data.`,
|
|
5474
|
+
},
|
|
5475
|
+
{
|
|
5476
|
+
managedPath: 'security-and-audit/respond-to-leaked-credential.md',
|
|
5477
|
+
unitRef: 'technical-documentation:unit/respond-to-leaked-credential',
|
|
5478
|
+
sourceRefs: ['saas-technical-doc:engine-content/respond-to-leaked-credential'],
|
|
5479
|
+
markdown: `# Respond to a leaked credential
|
|
5480
|
+
|
|
5481
|
+
A credential of this application has been exposed — an API key in a public repository, a token in a
|
|
5482
|
+
support ticket or a log, an OAuth client secret in a screenshot, or a person's password reused on a
|
|
5483
|
+
service that was breached.
|
|
5484
|
+
|
|
5485
|
+
Every other page in this section explains ONE capability well. This one exists because an incident
|
|
5486
|
+
is not one capability: it is an ORDER. The costly mistakes here are not doing the wrong thing, they
|
|
5487
|
+
are doing the right things in the wrong sequence — investigating before containing, or revoking
|
|
5488
|
+
before you know what the credential reached.
|
|
5489
|
+
|
|
5490
|
+
**Contain first. Assess second. Recover third.** Work down the page.
|
|
5491
|
+
|
|
5492
|
+
## Before you start
|
|
5493
|
+
|
|
5494
|
+
Write down the exposure time you will use as the window's lower bound — when the credential first
|
|
5495
|
+
became readable by someone who should not have it, NOT when you found out. If you cannot establish
|
|
5496
|
+
it, use the credential's creation time. Every step below is bounded by that instant, and widening it
|
|
5497
|
+
later means redoing the assessment.
|
|
5498
|
+
|
|
5499
|
+
## 1 · Contain
|
|
5500
|
+
|
|
5501
|
+
Do this before anything else, including before you finish reading the rest of this page. A credential
|
|
5502
|
+
you are still investigating is a credential still being used.
|
|
5503
|
+
|
|
5504
|
+
| What leaked | Do this |
|
|
5505
|
+
| --- | --- |
|
|
5506
|
+
| An API key | Revoke it — see [API key lifecycle](/access-and-identity/api-keys-lifecycle). Revocation takes effect for new requests; it does not retract a request already in flight |
|
|
5507
|
+
| An OAuth client secret, or a token issued to a client | [Operate and revoke delegated access](/access-and-identity/oauth-operate-and-revoke), and revoke the client's outstanding grants, not only the secret |
|
|
5508
|
+
| A person's password | Suspend the account — see [Suspend or remove a user](/user-administration/suspend-or-remove-user). Suspending ends their sessions; a password reset alone does not tell you whether someone else is already signed in |
|
|
5509
|
+
| A SCIM or directory token | Rotate at the identity provider, then in [SCIM configuration](/user-administration/scim-configure). Until both sides carry the new value, provisioning is stopped — that is the correct trade during containment |
|
|
5510
|
+
|
|
5511
|
+
**Do not delete anything yet.** Deleting the API key, the client or the user removes rows the next
|
|
5512
|
+
step reads. Revoke and suspend, which stop use while keeping the record.
|
|
5513
|
+
|
|
5514
|
+
If you do not yet know which credential leaked, suspend the narrowest thing that certainly covers it
|
|
5515
|
+
and widen only if the assessment says so. An over-broad containment is recoverable in minutes; a
|
|
5516
|
+
missed one runs for as long as you are investigating.
|
|
5517
|
+
|
|
5518
|
+
## 2 · Assess
|
|
5519
|
+
|
|
5520
|
+
Only now, and only inside the window you wrote down.
|
|
5521
|
+
|
|
5522
|
+
1. **What did it reach?** [Investigate an audit event](/security-and-audit/investigate-event),
|
|
5523
|
+
filtered to the credential's own identifier rather than to a person — a leaked key acts under its
|
|
5524
|
+
own identity, and filtering by the human who created it will not show you its requests.
|
|
5525
|
+
2. **Did it change access?** [Review access and privileged changes](/security-and-audit/review-access-changes).
|
|
5526
|
+
This is the question that decides whether containment is finished: a credential that granted a
|
|
5527
|
+
role, added a member or registered a client has left something behind that revoking it does not
|
|
5528
|
+
remove.
|
|
5529
|
+
3. **Take the evidence out.** [Export a bounded audit window](/security-and-audit/export-audit-records)
|
|
5530
|
+
for the window, before retention or an investigation of your own moves it. Handle the export as
|
|
5531
|
+
the sensitive artefact it is — [Protect and retain audit evidence](/security-and-audit/protect-evidence).
|
|
5532
|
+
|
|
5533
|
+
If step 2 found a change, treat every artefact it created as also compromised and return to
|
|
5534
|
+
**Contain** for each one. That loop is the point of the ordering: a leaked key that minted a second
|
|
5535
|
+
key is only half-contained when the first is revoked.
|
|
5536
|
+
|
|
5537
|
+
## 3 · Recover
|
|
5538
|
+
|
|
5539
|
+
- Issue the replacement credential and store it where the leaked one was not —
|
|
5540
|
+
[Create and store an API key](/access-and-identity/api-keys-create-and-store) states where a
|
|
5541
|
+
secret may and may not live.
|
|
5542
|
+
- Give the replacement the SMALLEST role that works. An incident is the cheapest moment to correct
|
|
5543
|
+
an over-broad credential, because whatever breaks is being watched.
|
|
5544
|
+
- Lift the containment you widened, narrowest first, confirming after each one.
|
|
5545
|
+
- If the account is a person's, require a second factor before returning it to service —
|
|
5546
|
+
[Multifactor enrollment and recovery](/access-and-identity/mfa-enrollment-and-recovery).
|
|
5547
|
+
|
|
5548
|
+
## What this application cannot tell you
|
|
5549
|
+
|
|
5550
|
+
The audit trail records what reached THIS application. A credential leaked in one place is usually
|
|
5551
|
+
leaked for others: if the same secret, or a password reused from it, opens anything else you run,
|
|
5552
|
+
this page's window is a lower bound on the incident, not its boundary.
|
|
5553
|
+
|
|
5554
|
+
Nor can the trail prove absence. A window with no suspicious request means nothing suspicious
|
|
5555
|
+
**reached this application** during it — not that the credential was unused, and not that your lower
|
|
5556
|
+
bound was early enough.`,
|
|
5414
5557
|
},
|
|
5415
5558
|
{
|
|
5416
5559
|
managedPath: 'security-and-audit/protect-evidence.md',
|
|
@@ -5509,913 +5652,6 @@ change the application's authoritative audit retention.
|
|
|
5509
5652
|
- remove temporary local copies and ticket attachments that are no longer
|
|
5510
5653
|
required;
|
|
5511
5654
|
- keep credentials and unrelated personal data out of the evidence package.`,
|
|
5512
|
-
},
|
|
5513
|
-
{
|
|
5514
|
-
managedPath: 'billing-and-subscriptions/billing.md',
|
|
5515
|
-
unitRef: 'technical-documentation:unit/billing',
|
|
5516
|
-
sourceRefs: [
|
|
5517
|
-
'saas-technical-doc:engine-content/billing',
|
|
5518
|
-
'source:consumer-fact:billing-lifecycle',
|
|
5519
|
-
],
|
|
5520
|
-
markdown: `# Billing and subscriptions
|
|
5521
|
-
|
|
5522
|
-
Use this section when you are responsible for an organization's plan, invoices,
|
|
5523
|
-
usage or access after a billing change. You do not need to know which billing
|
|
5524
|
-
provider the application uses. You do need to distinguish three records:
|
|
5525
|
-
|
|
5526
|
-
- the **product and price** describe what can be bought and on which terms;
|
|
5527
|
-
- the **subscription** records the current recurring relationship;
|
|
5528
|
-
- the application's **billing-derived access** records which features and limits
|
|
5529
|
-
the current subscription actually grants.
|
|
5530
|
-
|
|
5531
|
-
| Before you begin | Successful result |
|
|
5532
|
-
| --- | --- |
|
|
5533
|
-
| Know the organization being billed, who approved the commercial decision, the current product and the application access expected afterwards | The intended billing record reaches a known state, the resulting access is verified in the same organization, and payment evidence remains protected |
|
|
5534
|
-
|
|
5535
|
-
{{CONSUMER_FACT:source:consumer-fact:billing-lifecycle#markdown}}
|
|
5536
|
-
|
|
5537
|
-
## Keep the four billing views separate
|
|
5538
|
-
|
|
5539
|
-
| View | Question it answers | Do not use it as proof of |
|
|
5540
|
-
| --- | --- | --- |
|
|
5541
|
-
| Product and price | What is offered, at what amount and interval, with which intended grants? | A purchase or active access |
|
|
5542
|
-
| Checkout or billing portal | Where are payment details, tax information and provider documents handled? | The final application subscription state |
|
|
5543
|
-
| Subscription and invoice summary | What recurring relationship and payment evidence did the application record? | Every feature currently available to the organization |
|
|
5544
|
-
| Resolved application access | Which features and limits can the organization actually use now? | Why that access exists without checking billing and other allowed sources |
|
|
5545
|
-
|
|
5546
|
-
For organization billing, the standard management operations accept
|
|
5547
|
-
**Organization Owner** and **Organization Admin** authority. A custom role may
|
|
5548
|
-
inherit effective authority in an application-specific role graph; review
|
|
5549
|
-
[Roles and permissions](/user-administration/roles-and-permissions) and the
|
|
5550
|
-
exact operation contract rather than granting a broad role merely to expose the
|
|
5551
|
-
Billing area.
|
|
5552
|
-
|
|
5553
|
-
~~~mermaid
|
|
5554
|
-
flowchart LR
|
|
5555
|
-
accTitle: From a billing decision to usable application access
|
|
5556
|
-
accDescr: An authorized administrator selects a product and price, completes hosted checkout, waits for verified billing state, then confirms the subscription and billing-derived access in the application. Invoice and usage records remain separate evidence.
|
|
5557
|
-
choice["Choose product, price and billed scope"] --> checkout["Complete hosted checkout"]
|
|
5558
|
-
checkout --> verify["Application verifies billing result"]
|
|
5559
|
-
verify --> subscription["Subscription state is updated"]
|
|
5560
|
-
subscription --> access["Features and limits are recomputed"]
|
|
5561
|
-
verify --> invoice["Invoice and payment state is recorded"]
|
|
5562
|
-
usage["Metered application usage"] --> invoice
|
|
5563
|
-
~~~
|
|
5564
|
-
|
|
5565
|
-
The important boundary is after checkout: **returning to the application is not
|
|
5566
|
-
proof that access changed**. Read the current subscription and verify the feature
|
|
5567
|
-
or limit you expected before telling people the change is complete.
|
|
5568
|
-
|
|
5569
|
-
The diagram has two evidence branches for a reason. Invoice/payment state
|
|
5570
|
-
explains the commercial event, while subscription state drives the billing
|
|
5571
|
-
access recomputation. A paid invoice and an unavailable feature can therefore
|
|
5572
|
-
both be true during a mismatch that still needs reconciliation.
|
|
5573
|
-
|
|
5574
|
-
## Choose the task you need
|
|
5575
|
-
|
|
5576
|
-
| Your task | Start here | You are finished when |
|
|
5577
|
-
| --- | --- | --- |
|
|
5578
|
-
| Decide what to buy | [Understand plans, prices and access](/billing-and-subscriptions/plans-and-access) | The billed scope, price terms and expected access are explicit before approval |
|
|
5579
|
-
| Create the recurring relationship | [Start a subscription](/billing-and-subscriptions/start-subscription) | The application records Active or Trialing state and the intended access works |
|
|
5580
|
-
| Upgrade, downgrade, add capacity or end access | [Change, resume or end a subscription](/billing-and-subscriptions/change-or-end-subscription) | Effective timing, charge/credit and access consequences match the approved decision |
|
|
5581
|
-
| Review a charge, payment state, document or measured quantity | [Billing records and usage](/billing-and-subscriptions/billing-records) | The question is routed to its owning record and matched to the correct scope and period |
|
|
5582
|
-
| Resolve a mismatch | [Reconcile billing and application access](/billing-and-subscriptions/reconcile-access) | Provider evidence, application records and the original application action agree |
|
|
5583
|
-
| Recover from an unclear result | [Troubleshoot a billing change](/billing-and-subscriptions/troubleshoot) | The failing layer is identified without a duplicate purchase or hidden access grant |
|
|
5584
|
-
|
|
5585
|
-
## Close every billing task with evidence
|
|
5586
|
-
|
|
5587
|
-
Retain the billed organization, product/price identity, subscription or invoice
|
|
5588
|
-
identifier, observed state, effective period, approval reference and correlation
|
|
5589
|
-
information needed for support. Do not retain card details, payment-method data,
|
|
5590
|
-
provider secrets, complete invoice documents or capability-style invoice URLs in
|
|
5591
|
-
ordinary logs and tickets.`,
|
|
5592
|
-
},
|
|
5593
|
-
{
|
|
5594
|
-
managedPath: 'billing-and-subscriptions/plans-and-access.md',
|
|
5595
|
-
unitRef: 'technical-documentation:unit/understand-billing-plans-and-access',
|
|
5596
|
-
sourceRefs: [
|
|
5597
|
-
'saas-technical-doc:engine-content/understand-billing-plans-and-access',
|
|
5598
|
-
'source:consumer-fact:billing-lifecycle',
|
|
5599
|
-
],
|
|
5600
|
-
markdown: `# Understand plans, prices and access
|
|
5601
|
-
|
|
5602
|
-
Before approving a purchase, identify **what is being bought, who will be
|
|
5603
|
-
billed, when the charge repeats and which application access should change**.
|
|
5604
|
-
The current Billing area is authoritative for the products and prices offered by
|
|
5605
|
-
this application. The supported product-kind inventory is not proof that every
|
|
5606
|
-
kind is offered here.
|
|
5607
|
-
|
|
5608
|
-
| Before you begin | Successful result |
|
|
5609
|
-
| --- | --- |
|
|
5610
|
-
| Have the intended organization, business owner, expected users or workload, required features/capacity and approved spending boundary | One current product and price satisfy the outcome without unnecessary capacity, and the expected access can be verified after purchase |
|
|
5611
|
-
|
|
5612
|
-
## Start from the work, not the plan name
|
|
5613
|
-
|
|
5614
|
-
Write down the outcome before comparing offers—for example, “the Support
|
|
5615
|
-
organization needs ten additional automated runs this month.” Then ask:
|
|
5616
|
-
|
|
5617
|
-
- Is the requirement a continuing base capability, optional recurring capacity,
|
|
5618
|
-
measured use, a one-time item or prepaid credits?
|
|
5619
|
-
- Does the purchase belong to this organization, and will everybody who needs
|
|
5620
|
-
it operate in that same scope?
|
|
5621
|
-
- Which exact feature or limit should change, and what current application
|
|
5622
|
-
action will prove it?
|
|
5623
|
-
- When should the commercial and access change take effect?
|
|
5624
|
-
- Who owns renewal, usage review and cancellation?
|
|
5625
|
-
|
|
5626
|
-
{{CONSUMER_FACT:source:consumer-fact:billing-lifecycle#productTypesMarkdown}}
|
|
5627
|
-
|
|
5628
|
-
The table lists product kinds the application can support. Only products and
|
|
5629
|
-
prices shown in this application's current Billing area are purchasable offers.
|
|
5630
|
-
Do not ask support to create a missing kind from this list.
|
|
5631
|
-
|
|
5632
|
-
## Understand how quantity changes the amount
|
|
5633
|
-
|
|
5634
|
-
The product kind explains **what you are buying**. The pricing model explains
|
|
5635
|
-
**how the selected quantity becomes a charge**. Do not use the words “tiered”
|
|
5636
|
-
and “graduated” interchangeably: they produce different totals.
|
|
5637
|
-
|
|
5638
|
-
{{CONSUMER_FACT:source:consumer-fact:billing-lifecycle#pricingModelsMarkdown}}
|
|
5639
|
-
|
|
5640
|
-
### Worked example: 240 units
|
|
5641
|
-
|
|
5642
|
-
The following numbers are illustrative, not an offer from this application.
|
|
5643
|
-
They show why the pricing model must be recorded with the amount:
|
|
5644
|
-
|
|
5645
|
-
| Model | Illustrative terms | Result for 240 units |
|
|
5646
|
-
| --- | --- | --- |
|
|
5647
|
-
| Flat | €100 for the line item | €100 |
|
|
5648
|
-
| Per unit | €0.50 per unit | 240 × €0.50 = €120 |
|
|
5649
|
-
| Volume tiered | Up to 100 at €0.50; above 100 at €0.40 for all units | 240 × €0.40 = €96 |
|
|
5650
|
-
| Graduated | First 100 at €0.50; remaining units at €0.40 | (100 × €0.50) + (140 × €0.40) = €106 |
|
|
5651
|
-
| Package | €10 per block of 25, rounded up | 10 packages × €10 = €100 |
|
|
5652
|
-
|
|
5653
|
-
For a tiered or package offer, keep the tier boundaries, flat additions and
|
|
5654
|
-
package size with the approval. A headline unit price is not enough to
|
|
5655
|
-
reconstruct the expected invoice.
|
|
5656
|
-
|
|
5657
|
-
## Read a price as a complete offer
|
|
5658
|
-
|
|
5659
|
-
Check the product name and description together with:
|
|
5660
|
-
|
|
5661
|
-
- the billed scope—usually an organization, or a person only when the
|
|
5662
|
-
application explicitly offers personal billing;
|
|
5663
|
-
- currency and amount;
|
|
5664
|
-
- monthly or yearly interval for recurring prices;
|
|
5665
|
-
- whether tax is included in the displayed amount or added at checkout;
|
|
5666
|
-
- trial duration and whether a payment method is required;
|
|
5667
|
-
- included features, capacity limits and any metered usage;
|
|
5668
|
-
- promotion eligibility and the date on which the offer expires.
|
|
5669
|
-
|
|
5670
|
-
For a recurring price, read both the interval and its count. “Month” with an
|
|
5671
|
-
interval count of 3 means every three months, not monthly:
|
|
5672
|
-
|
|
5673
|
-
{{CONSUMER_FACT:source:consumer-fact:billing-lifecycle#billingIntervalsMarkdown}}
|
|
5674
|
-
|
|
5675
|
-
Currency codes should be interpreted using the maintained
|
|
5676
|
-
[ISO 4217 currency list](https://www.iso.org/iso-4217-currency-codes.html).
|
|
5677
|
-
The displayed currency does not determine whether tax is included:
|
|
5678
|
-
|
|
5679
|
-
{{CONSUMER_FACT:source:consumer-fact:billing-lifecycle#taxDisplayModesMarkdown}}
|
|
5680
|
-
|
|
5681
|
-
If the hosted billing screen is Stripe, its maintained
|
|
5682
|
-
[tax-behaviour guide](https://docs.stripe.com/tax/products-prices-tax-codes-tax-behavior)
|
|
5683
|
-
explains the provider-side inclusive/exclusive distinction. The application
|
|
5684
|
-
offer and checkout total remain the evidence for this purchase.
|
|
5685
|
-
|
|
5686
|
-
An **add-on** changes the same subscription without replacing its primary plan.
|
|
5687
|
-
A **credit pack** adds a consumable balance. Neither should be described as a
|
|
5688
|
-
plan upgrade unless that is what the product screen actually presents.
|
|
5689
|
-
|
|
5690
|
-
## Trace an offer to application access
|
|
5691
|
-
|
|
5692
|
-
~~~mermaid
|
|
5693
|
-
flowchart TD
|
|
5694
|
-
accTitle: Evaluate a billing offer from commercial terms to application access
|
|
5695
|
-
accDescr: The administrator starts with a required business outcome, chooses an offered product and price for one billed scope, reviews trial, timing and usage terms, identifies the promised feature or limit, then records how that access will be verified after purchase.
|
|
5696
|
-
outcome["Name the required business outcome"] --> scope["Confirm billed organization or person"]
|
|
5697
|
-
scope --> offer["Choose one currently offered product and price"]
|
|
5698
|
-
offer --> terms["Review interval, tax, trial, quantity and promotion"]
|
|
5699
|
-
terms --> grants["Identify expected features, limits or credits"]
|
|
5700
|
-
grants --> proof["Define one application action that proves access"]
|
|
5701
|
-
proof --> approval["Record approval and lifecycle owner"]
|
|
5702
|
-
~~~
|
|
5703
|
-
|
|
5704
|
-
The important handoff is from **grants** to **proof**. A product description can
|
|
5705
|
-
state what should be included; the original application action verifies what is
|
|
5706
|
-
actually usable after the billing state is processed.
|
|
5707
|
-
|
|
5708
|
-
## Understand how access is assembled
|
|
5709
|
-
|
|
5710
|
-
One active plan supplies the base features and limits. Active add-ons can add
|
|
5711
|
-
features or capacity. The application recomputes that billing-derived access
|
|
5712
|
-
from subscriptions in **Active** or **Trialing** state. Other subscription states
|
|
5713
|
-
do not contribute billing-derived access.
|
|
5714
|
-
|
|
5715
|
-
Manual or broader-scope access can also exist. A feature remaining available
|
|
5716
|
-
after a downgrade therefore does not, by itself, prove that billing
|
|
5717
|
-
reconciliation failed. Compare the expected product grants with the resolved
|
|
5718
|
-
application access for the billed scope.
|
|
5719
|
-
|
|
5720
|
-
Base-plan and add-on limits can combine according to the offered product policy:
|
|
5721
|
-
an add-on may add capacity or establish a higher limit. “Unlimited” capacity
|
|
5722
|
-
remains unlimited when combined. Do not calculate the final limit from marketing
|
|
5723
|
-
labels alone; read the resolved limit in the billed scope.
|
|
5724
|
-
|
|
5725
|
-
{{CONSUMER_FACT:source:consumer-fact:billing-lifecycle#limitGrantModesMarkdown}}
|
|
5726
|
-
|
|
5727
|
-
For example, a plan can establish 50 scheduled runs, while an add-on adds 20.
|
|
5728
|
-
The expected result is 70. If instead the add-on establishes a limit of 100,
|
|
5729
|
-
the expected result is 100—not 150. Verify the resolved value after purchase,
|
|
5730
|
-
because access can also come from a broader scope or an approved manual source.
|
|
5731
|
-
|
|
5732
|
-
## Treat a promotion as conditional until checkout accepts it
|
|
5733
|
-
|
|
5734
|
-
{{CONSUMER_FACT:source:consumer-fact:billing-lifecycle#promotionVocabularyMarkdown}}
|
|
5735
|
-
|
|
5736
|
-
A promotion shown in Billing can still be refused for the selected purchase.
|
|
5737
|
-
Before relying on it, verify its validity dates, remaining redemptions, eligible
|
|
5738
|
-
products, discount currency when fixed, and duration. The checkout result is the
|
|
5739
|
-
positive proof; visibility in a list is only a reason to evaluate it.
|
|
5740
|
-
|
|
5741
|
-
## Approve with a reviewable record
|
|
5742
|
-
|
|
5743
|
-
Record the selected product and price, currency, interval, quantity, tax/trial
|
|
5744
|
-
terms, expected effective date, billed scope, expected grants and the person who
|
|
5745
|
-
approved them. Keep payment instruments and provider credentials out of that
|
|
5746
|
-
record. Continue to [Start a subscription](/billing-and-subscriptions/start-subscription)
|
|
5747
|
-
only after the expected application proof is clear.`,
|
|
5748
|
-
},
|
|
5749
|
-
{
|
|
5750
|
-
managedPath: 'billing-and-subscriptions/start-subscription.md',
|
|
5751
|
-
unitRef: 'technical-documentation:unit/start-billing-subscription',
|
|
5752
|
-
sourceRefs: [
|
|
5753
|
-
'saas-technical-doc:engine-content/start-billing-subscription',
|
|
5754
|
-
],
|
|
5755
|
-
markdown: `# Start a subscription
|
|
5756
|
-
|
|
5757
|
-
Start a subscription only when you can approve billing for the selected scope.
|
|
5758
|
-
For organization billing, organization owners and administrators are the
|
|
5759
|
-
standard authorized roles. Confirm your application exposes Billing and the
|
|
5760
|
-
intended product before beginning.
|
|
5761
|
-
|
|
5762
|
-
| Before you begin | Successful result |
|
|
5763
|
-
| --- | --- |
|
|
5764
|
-
| Have the approved organization, current product and price, expected access, spending approval, protected payment owner and a way to reconcile an unclear result | One checkout creates the intended subscription, the application records its current state and the expected feature or limit works in the billed scope |
|
|
5765
|
-
|
|
5766
|
-
> **One checkout attempt can complete even when the browser never returns.**
|
|
5767
|
-
> Keep its identifiers and reconcile the application state before opening a
|
|
5768
|
-
> replacement checkout.
|
|
5769
|
-
|
|
5770
|
-
## Before checkout
|
|
5771
|
-
|
|
5772
|
-
1. Select the intended organization before opening Billing. Do not rely on the
|
|
5773
|
-
organization that happened to be active in a previous browser session.
|
|
5774
|
-
2. Confirm the product, price, currency, interval, quantity, tax display, trial
|
|
5775
|
-
terms and expected access against the approval.
|
|
5776
|
-
3. Check whether the displayed promotion applies to this exact product and
|
|
5777
|
-
price. Visibility of a promotion does not guarantee that every item accepts it.
|
|
5778
|
-
4. Record the approver, expected effective date and application action that will
|
|
5779
|
-
prove the resulting access.
|
|
5780
|
-
5. Continue once to the hosted checkout presented by the application.
|
|
5781
|
-
|
|
5782
|
-
Payment details, billing address and tax identifiers belong on that hosted
|
|
5783
|
-
billing surface. Do not send them through application support, an API metadata
|
|
5784
|
-
field or a screenshot.
|
|
5785
|
-
|
|
5786
|
-
When you enter a promotion code, stop if checkout refuses it. Do not compensate
|
|
5787
|
-
by changing quantity, selecting another organization or asking support to copy
|
|
5788
|
-
the discount manually. Recheck the product, validity period, redemption limit
|
|
5789
|
-
and discount currency against the approved offer.
|
|
5790
|
-
|
|
5791
|
-
~~~mermaid
|
|
5792
|
-
sequenceDiagram
|
|
5793
|
-
accTitle: Start and verify a subscription
|
|
5794
|
-
accDescr: The administrator opens checkout from the application, completes provider-hosted payment, returns to the application, then verifies the application subscription and resulting access instead of trusting the redirect alone.
|
|
5795
|
-
participant A as Administrator
|
|
5796
|
-
participant App as Application
|
|
5797
|
-
participant B as Hosted billing
|
|
5798
|
-
A->>App: Select product and price for the intended scope
|
|
5799
|
-
App-->>A: Open authorized checkout
|
|
5800
|
-
A->>B: Confirm payment and billing details
|
|
5801
|
-
B-->>A: Return to application
|
|
5802
|
-
App->>App: Verify billing result and update subscription
|
|
5803
|
-
A->>App: Read subscription state and expected access
|
|
5804
|
-
~~~
|
|
5805
|
-
|
|
5806
|
-
The browser return is only navigation. The application updates its billing
|
|
5807
|
-
records from the verified provider result, then recomputes access. Closing the
|
|
5808
|
-
browser, losing the redirect or receiving a timeout does not establish whether
|
|
5809
|
-
the provider completed the checkout.
|
|
5810
|
-
|
|
5811
|
-
If the hosted screen identifies itself as Stripe, see Stripe's maintained
|
|
5812
|
-
[subscription Checkout journey](https://docs.stripe.com/billing/subscriptions/build-subscriptions)
|
|
5813
|
-
for the provider-side steps. That reference explains the hosted screen; the
|
|
5814
|
-
application subscription and resulting access remain the completion evidence.
|
|
5815
|
-
|
|
5816
|
-
## Confirm success
|
|
5817
|
-
|
|
5818
|
-
Do not use the success URL as the success criterion. In the application, verify:
|
|
5819
|
-
|
|
5820
|
-
- a subscription exists for the intended billing account;
|
|
5821
|
-
- its product, price and period are correct;
|
|
5822
|
-
- its state is **Active** or **Trialing**;
|
|
5823
|
-
- the expected feature or limit is available in the intended organization;
|
|
5824
|
-
- any first invoice has the expected total and state.
|
|
5825
|
-
|
|
5826
|
-
Use the maintained subscription meanings when reading the result:
|
|
5827
|
-
|
|
5828
|
-
The subscription states and what each one means for access are listed under
|
|
5829
|
-
[Reconcile access after a billing change](/billing-and-subscriptions/reconcile-access).
|
|
5830
|
-
|
|
5831
|
-
If the state remains incomplete, past due, unpaid or absent, do not create a
|
|
5832
|
-
second checkout immediately. Use the troubleshooting and reconciliation pages
|
|
5833
|
-
to determine whether the first attempt is still being processed.
|
|
5834
|
-
|
|
5835
|
-
### Example: the browser closes after payment
|
|
5836
|
-
|
|
5837
|
-
Suppose an administrator approves a paid plan, completes the hosted
|
|
5838
|
-
payment, and the browser closes before returning. Reopen Billing in the same
|
|
5839
|
-
organization and read the current subscription. If the approved plan is Active
|
|
5840
|
-
and the expected limit works, record that result and close the task. If the
|
|
5841
|
-
subscription is absent or Incomplete, preserve the first checkout identifier and
|
|
5842
|
-
reconcile it; **do not start another purchase merely to obtain a success page**.
|
|
5843
|
-
|
|
5844
|
-
## Verify access, not only billing
|
|
5845
|
-
|
|
5846
|
-
Repeat the application action identified before checkout. Confirm it in the
|
|
5847
|
-
same organization and with an ordinary intended user—not only with the billing
|
|
5848
|
-
administrator. Also verify one limit or unavailable action that should remain
|
|
5849
|
-
unchanged, so the proof does not hide an unexpectedly broad grant.
|
|
5850
|
-
|
|
5851
|
-
## Retain safe completion evidence
|
|
5852
|
-
|
|
5853
|
-
Keep the organization, product/price identity, checkout or subscription
|
|
5854
|
-
identifier, visible status, period dates, first-invoice summary, approver,
|
|
5855
|
-
correlation data and access-verification result. Do not retain card details,
|
|
5856
|
-
payment-method data, complete invoice documents, provider secrets or the full
|
|
5857
|
-
checkout URL.`,
|
|
5858
|
-
},
|
|
5859
|
-
{
|
|
5860
|
-
managedPath: 'billing-and-subscriptions/change-or-end-subscription.md',
|
|
5861
|
-
unitRef: 'technical-documentation:unit/change-or-end-billing-subscription',
|
|
5862
|
-
sourceRefs: [
|
|
5863
|
-
'saas-technical-doc:engine-content/change-or-end-billing-subscription',
|
|
5864
|
-
'source:consumer-fact:billing-lifecycle',
|
|
5865
|
-
],
|
|
5866
|
-
markdown: `# Change, resume or end a subscription
|
|
5867
|
-
|
|
5868
|
-
A plan change is both a commercial decision and an access decision. Before
|
|
5869
|
-
confirming it, review the new price, effective date, prorated charge or credit,
|
|
5870
|
-
and the features or limits that will be added or removed.
|
|
5871
|
-
|
|
5872
|
-
| Before you begin | Successful result |
|
|
5873
|
-
| --- | --- |
|
|
5874
|
-
| Have the current subscription, approved target product/add-on, desired effective timing, expected charge or credit, and named access consequences | The application subscription reflects the approved change, access changes at the intended time, and no scheduled cancellation or stale item remains unexplained |
|
|
5875
|
-
|
|
5876
|
-
{{CONSUMER_FACT:source:consumer-fact:billing-lifecycle#changeTimingMarkdown}}
|
|
5877
|
-
|
|
5878
|
-
> **A requested policy is not proof of the applied charge or date.** Some billing
|
|
5879
|
-
> providers cannot schedule every change. Review any preview the application
|
|
5880
|
-
> presents, then verify the returned subscription, invoice or credit and the
|
|
5881
|
-
> resulting access. If those disagree with the approval, stop and reconcile the
|
|
5882
|
-
> change instead of applying another one.
|
|
5883
|
-
|
|
5884
|
-
## Choose the lifecycle action
|
|
5885
|
-
|
|
5886
|
-
~~~mermaid
|
|
5887
|
-
flowchart TD
|
|
5888
|
-
accTitle: Choose how a subscription should change
|
|
5889
|
-
accDescr: An administrator decides whether the organization needs a different base plan, an add-on change, end-of-period cancellation, immediate cancellation or reversal of a still-pending cancellation, then verifies the returned subscription and access consequence.
|
|
5890
|
-
need{"What business decision was approved?"}
|
|
5891
|
-
need -->|Replace base offer| plan["Change plan with product policy timing"]
|
|
5892
|
-
need -->|Add or remove capacity| addon["Change subscription add-on"]
|
|
5893
|
-
need -->|Stop at renewal| period["Schedule cancellation at period end"]
|
|
5894
|
-
need -->|Stop now| immediate["Cancel immediately if policy permits"]
|
|
5895
|
-
need -->|Undo pending cancellation| resume["Resume before the subscription ends"]
|
|
5896
|
-
plan --> verify["Re-read subscription, charge evidence and access"]
|
|
5897
|
-
addon --> verify
|
|
5898
|
-
period --> verify
|
|
5899
|
-
immediate --> verify
|
|
5900
|
-
resume --> verify
|
|
5901
|
-
~~~
|
|
5902
|
-
|
|
5903
|
-
Do not choose from the wording “upgrade” or “downgrade” alone. Determine which
|
|
5904
|
-
base product and add-ons will remain, when the provider applies the commercial
|
|
5905
|
-
change, and when users should gain or lose the corresponding application access.
|
|
5906
|
-
|
|
5907
|
-
## Change the plan or its add-ons
|
|
5908
|
-
|
|
5909
|
-
1. Read the current subscription, including its items, state and period end.
|
|
5910
|
-
2. Choose the new plan or add-on from the current application catalogue.
|
|
5911
|
-
3. Confirm that the selected price belongs to that product and applies to the
|
|
5912
|
-
billed scope.
|
|
5913
|
-
4. Review the presented timing and proration before approving the change.
|
|
5914
|
-
5. After confirmation, re-read the subscription and verify the expected access.
|
|
5915
|
-
|
|
5916
|
-
For an add-on change, verify the base plan remains present and the intended
|
|
5917
|
-
add-on appears or disappears exactly once. For a plan replacement, verify that
|
|
5918
|
-
the returned base item is the approved product and price. Do not infer the
|
|
5919
|
-
result from a checkout or portal confirmation message.
|
|
5920
|
-
|
|
5921
|
-
Do not assume every billing connector can defer a downgrade. The **returned
|
|
5922
|
-
application subscription** is the source of truth for what was applied.
|
|
5923
|
-
|
|
5924
|
-
If the hosted billing provider is Stripe, use its maintained
|
|
5925
|
-
[proration explanation](https://docs.stripe.com/billing/subscriptions/prorations)
|
|
5926
|
-
to interpret provider invoice lines. In particular, a credit line is not by
|
|
5927
|
-
itself proof that money was refunded, and a positive proration is not by itself
|
|
5928
|
-
proof that it was collected immediately. Match the application change, invoice
|
|
5929
|
-
state and payment evidence.
|
|
5930
|
-
|
|
5931
|
-
### Worked example: increase capacity mid-period
|
|
5932
|
-
|
|
5933
|
-
The figures below are illustrative; your own limits are shown in Billing.
|
|
5934
|
-
Suppose an organization's plan allows 50 automated runs and it needs 20 more
|
|
5935
|
-
immediately. Before confirming an add-on, record:
|
|
5936
|
-
|
|
5937
|
-
- the current 50-run limit and current billing-period end;
|
|
5938
|
-
- the add-on price and whether the presented adjustment is immediate;
|
|
5939
|
-
- the expected resolved limit of 70;
|
|
5940
|
-
- the application operation that will prove the extra capacity.
|
|
5941
|
-
|
|
5942
|
-
After confirmation, verify that the base plan is still present, the add-on
|
|
5943
|
-
appears once, any provider adjustment matches the presented currency and period,
|
|
5944
|
-
and the resolved limit is 70. If the request times out, re-read those records
|
|
5945
|
-
before trying to add the same item again.
|
|
5946
|
-
|
|
5947
|
-
## End at period end or cancel immediately
|
|
5948
|
-
|
|
5949
|
-
- **End at period end** keeps the subscription active through its current
|
|
5950
|
-
period and marks it for cancellation. Access normally continues while the
|
|
5951
|
-
subscription remains Active or Trialing.
|
|
5952
|
-
- **Cancel immediately** marks the subscription Cancelled now and removes its
|
|
5953
|
-
contribution to billing-derived access when access is recomputed.
|
|
5954
|
-
|
|
5955
|
-
Immediate cancellation is not always allowed by the product policy. Use it only
|
|
5956
|
-
when the business decision includes the immediate access consequence.
|
|
5957
|
-
|
|
5958
|
-
Before immediate cancellation, identify workflows, exports or administrative
|
|
5959
|
-
actions that depend on billing-derived access. Do not use a temporary manual
|
|
5960
|
-
role or feature override to disguise the resulting loss; if continuity is
|
|
5961
|
-
required, approve the alternative access source explicitly.
|
|
5962
|
-
|
|
5963
|
-
## Resume a scheduled cancellation
|
|
5964
|
-
|
|
5965
|
-
A subscription can be resumed only while it is pending end-of-period
|
|
5966
|
-
cancellation. Resume clears that pending cancellation and returns the local
|
|
5967
|
-
subscription to Active. Verify both the next period date and the resulting
|
|
5968
|
-
access; a subscription that already ended needs a new approved purchase rather
|
|
5969
|
-
than resume.
|
|
5970
|
-
|
|
5971
|
-
## Verify by action and by time
|
|
5972
|
-
|
|
5973
|
-
1. Confirm the returned subscription items, state, period end and cancellation
|
|
5974
|
-
flag in the billed scope.
|
|
5975
|
-
2. Match any immediate invoice or credit to the selected currency, quantity,
|
|
5976
|
-
proration and period.
|
|
5977
|
-
3. Repeat the application action affected by the change.
|
|
5978
|
-
4. For a deferred change, record what stays active now and schedule a check at
|
|
5979
|
-
the effective boundary.
|
|
5980
|
-
5. Verify an expected unaffected capability so the change did not alter a
|
|
5981
|
-
broader scope.
|
|
5982
|
-
|
|
5983
|
-
Retain the approval, old and new product/price identities, selected timing,
|
|
5984
|
-
visible proration evidence, subscription state and access proof. If the request
|
|
5985
|
-
times out, read the subscription before repeating it; an absent response is not
|
|
5986
|
-
evidence that the change failed.`,
|
|
5987
|
-
},
|
|
5988
|
-
{
|
|
5989
|
-
managedPath: 'billing-and-subscriptions/billing-records.md',
|
|
5990
|
-
unitRef: 'technical-documentation:unit/billing-records-and-usage',
|
|
5991
|
-
sourceRefs: ['saas-technical-doc:engine-content/billing-records-and-usage'],
|
|
5992
|
-
markdown: `# Billing records and usage
|
|
5993
|
-
|
|
5994
|
-
Use this journey when you need to explain **what was bought, what was charged,
|
|
5995
|
-
what was measured, or why application access differs from the commercial
|
|
5996
|
-
record**. Those questions use related records, but they do not have the same
|
|
5997
|
-
authority.
|
|
5998
|
-
|
|
5999
|
-
| Before you begin | Successful result |
|
|
6000
|
-
| --- | --- |
|
|
6001
|
-
| Know the environment, organization, product, billing period and the exact question being investigated | The question is answered from the record that owns it, then checked against the adjacent records without exposing payment data or duplicating a charge |
|
|
6002
|
-
|
|
6003
|
-
## Choose the record that owns the answer
|
|
6004
|
-
|
|
6005
|
-
| Question | Start with | Then compare |
|
|
6006
|
-
| --- | --- | --- |
|
|
6007
|
-
| Which recurring product is current? | Subscription items, status and period | Product/price offer and resolved access |
|
|
6008
|
-
| Was a charge created or paid? | Application invoice summary | Complete document in the authenticated provider portal |
|
|
6009
|
-
| Why is the invoice quantity different? | Local usage rows for the same period | Reported state and provider meter result |
|
|
6010
|
-
| Why is a feature unavailable after payment? | Current subscription and resolved access | Invoice/payment evidence only if the subscription state requires it |
|
|
6011
|
-
|
|
6012
|
-
~~~mermaid
|
|
6013
|
-
flowchart LR
|
|
6014
|
-
accTitle: Use each billing record for the question it owns
|
|
6015
|
-
accDescr: The product and price describe the offer. The subscription records the recurring relationship and drives billing-derived access. Metered activity becomes local usage records and is reported to the provider. The provider creates the invoice; the application stores a safe summary while the complete document and payment methods remain in the authenticated provider portal.
|
|
6016
|
-
offer["Product and price"] --> subscription["Subscription"]
|
|
6017
|
-
subscription --> access["Billing-derived access"]
|
|
6018
|
-
activity["Metered activity"] --> usage["Local usage records"]
|
|
6019
|
-
usage --> provider["Provider meter"]
|
|
6020
|
-
subscription --> invoice["Provider invoice"]
|
|
6021
|
-
provider --> invoice
|
|
6022
|
-
invoice --> summary["Application invoice summary"]
|
|
6023
|
-
invoice --> portal["Authenticated provider portal"]
|
|
6024
|
-
~~~
|
|
6025
|
-
|
|
6026
|
-
The useful boundary is between **operational summary** and **protected source
|
|
6027
|
-
document**. The application exposes enough invoice state and total information
|
|
6028
|
-
for reconciliation, but complete tax documents and payment methods stay behind
|
|
6029
|
-
the provider's authenticated portal. Usage remains separately traceable so a
|
|
6030
|
-
quantity can be explained before it becomes an invoice line.
|
|
6031
|
-
|
|
6032
|
-
## Choose your task
|
|
6033
|
-
|
|
6034
|
-
- [Manage invoices and payment details](/billing-and-subscriptions/invoices-and-payments)
|
|
6035
|
-
when the question concerns payment state, currency, tax or the complete invoice.
|
|
6036
|
-
- [Understand metered usage](/billing-and-subscriptions/metered-usage) when the
|
|
6037
|
-
question concerns measured quantity, reporting delay or a provider meter.
|
|
6038
|
-
- [Reconcile billing and application access](/billing-and-subscriptions/reconcile-access)
|
|
6039
|
-
when the commercial record is correct but the application outcome is not.
|
|
6040
|
-
- [Troubleshoot a billing change](/billing-and-subscriptions/troubleshoot) when
|
|
6041
|
-
the first durable record or failing boundary is still unclear.
|
|
6042
|
-
|
|
6043
|
-
Retain identifiers, totals, states, periods and correlation evidence. Do not
|
|
6044
|
-
copy card data, payment-method details, complete invoice documents, temporary
|
|
6045
|
-
portal URLs or personal data from usage metadata into ordinary tickets.`,
|
|
6046
|
-
},
|
|
6047
|
-
{
|
|
6048
|
-
managedPath: 'billing-and-subscriptions/invoices-and-payments.md',
|
|
6049
|
-
unitRef: 'technical-documentation:unit/manage-invoices-and-payments',
|
|
6050
|
-
sourceRefs: [
|
|
6051
|
-
'saas-technical-doc:engine-content/manage-invoices-and-payments',
|
|
6052
|
-
'source:consumer-fact:billing-lifecycle',
|
|
6053
|
-
],
|
|
6054
|
-
markdown: `# Manage invoices and payment details
|
|
6055
|
-
|
|
6056
|
-
An invoice is evidence of a charge, not the subscription itself. The application
|
|
6057
|
-
stores a small invoice summary—state, total and timestamps—while the billing
|
|
6058
|
-
provider keeps the complete tax document and payment methods behind its
|
|
6059
|
-
authenticated portal.
|
|
6060
|
-
|
|
6061
|
-
| Before you begin | Successful result |
|
|
6062
|
-
| --- | --- |
|
|
6063
|
-
| Know the billed organization, product, billing period and question being investigated; use an authorized billing administrator for provider documents | The application summary and provider document refer to the same charge, payment state and period without exposing payment data |
|
|
6064
|
-
|
|
6065
|
-
## Know which record answers which question
|
|
6066
|
-
|
|
6067
|
-
~~~mermaid
|
|
6068
|
-
flowchart LR
|
|
6069
|
-
accTitle: Separate the application invoice summary from the protected provider document
|
|
6070
|
-
accDescr: A subscription defines the recurring product and billing period. The provider creates an invoice and owns payment methods and the complete tax document. The application retains a safe status and total summary for operational review, while an authorized administrator opens the authenticated portal for the full document or payment change.
|
|
6071
|
-
subscription["Subscription and billing period"] --> invoice["Provider invoice"]
|
|
6072
|
-
invoice --> summary["Application invoice summary"]
|
|
6073
|
-
invoice --> portal["Authenticated billing portal"]
|
|
6074
|
-
portal --> document["Complete invoice or receipt"]
|
|
6075
|
-
portal --> payment["Payment methods and billing details"]
|
|
6076
|
-
~~~
|
|
6077
|
-
|
|
6078
|
-
The application summary is designed for status checks and reconciliation. It is
|
|
6079
|
-
not a replacement for the provider's full tax document.
|
|
6080
|
-
|
|
6081
|
-
{{CONSUMER_FACT:source:consumer-fact:billing-lifecycle#invoiceStatusesMarkdown}}
|
|
6082
|
-
|
|
6083
|
-
Open complete invoice documents through the authenticated billing portal. Direct
|
|
6084
|
-
provider document URLs are deliberately not exposed in the application API:
|
|
6085
|
-
they can act like bearer links to documents containing names and billing
|
|
6086
|
-
addresses.
|
|
6087
|
-
|
|
6088
|
-
Use the provider portal only from the application's Billing area and return to
|
|
6089
|
-
the intended environment afterwards. Do not copy a complete invoice into an
|
|
6090
|
-
ordinary ticket when its identifier, total, currency, period and state are
|
|
6091
|
-
sufficient to investigate.
|
|
6092
|
-
|
|
6093
|
-
If the portal identifies itself as Stripe, use Stripe's maintained
|
|
6094
|
-
[customer-portal guide](https://docs.stripe.com/customer-management/integrate-customer-portal)
|
|
6095
|
-
to understand the provider handoff and its
|
|
6096
|
-
[Hosted Invoice Page guide](https://docs.stripe.com/invoicing/hosted-invoice-page)
|
|
6097
|
-
to understand the complete document surface. Always open a fresh portal session
|
|
6098
|
-
from the application; do not preserve or redistribute its temporary URL.
|
|
6099
|
-
|
|
6100
|
-
## Read payment and subscription state together
|
|
6101
|
-
|
|
6102
|
-
- An **Open** or **Uncollectible** invoice explains a payment problem, but the
|
|
6103
|
-
current subscription state determines whether billing-derived access remains.
|
|
6104
|
-
- A **Paid** invoice proves settlement of that invoice; still verify that the
|
|
6105
|
-
corresponding subscription and access update reached the intended scope.
|
|
6106
|
-
- A **Void** invoice should not be treated as a successful payment or as a new
|
|
6107
|
-
entitlement.
|
|
6108
|
-
|
|
6109
|
-
An invoice can change after it is first created—for example from Draft to Open
|
|
6110
|
-
or Paid. Record the state and observation time when using it as evidence. The
|
|
6111
|
-
latest application summary is appropriate for operational review; the provider
|
|
6112
|
-
portal owns the complete document.
|
|
6113
|
-
|
|
6114
|
-
## Interpret currency, tax and payment state separately
|
|
6115
|
-
|
|
6116
|
-
{{CONSUMER_FACT:source:consumer-fact:billing-lifecycle#taxDisplayModesMarkdown}}
|
|
6117
|
-
|
|
6118
|
-
Inclusive or exclusive describes the **displayed price**. It does not prove the
|
|
6119
|
-
tax rate, jurisdiction, payment success or final amount. Compare the invoice
|
|
6120
|
-
currency, subtotal, tax, total and period with the approved offer and the
|
|
6121
|
-
provider document. For an unfamiliar currency code, use the
|
|
6122
|
-
[ISO 4217 currency list](https://www.iso.org/iso-4217-currency-codes.html).
|
|
6123
|
-
|
|
6124
|
-
When the invoice is Open or Uncollectible, an authorized administrator should
|
|
6125
|
-
open Billing, enter the authenticated provider portal and review the available
|
|
6126
|
-
payment action. Do not ask the person to send card numbers, bank details or a
|
|
6127
|
-
screenshot of the payment instrument to application support.
|
|
6128
|
-
|
|
6129
|
-
### Example: a paid invoice but unchanged access
|
|
6130
|
-
|
|
6131
|
-
A Paid invoice proves that **that invoice** was settled. It does not prove that
|
|
6132
|
-
the application processed the corresponding subscription update or recomputed
|
|
6133
|
-
access. Confirm the subscription is Active or Trialing, then repeat the
|
|
6134
|
-
application action that should now be available. If that action still fails,
|
|
6135
|
-
continue with [Reconcile billing and application access](/billing-and-subscriptions/reconcile-access).
|
|
6136
|
-
|
|
6137
|
-
## Protect financial evidence
|
|
6138
|
-
|
|
6139
|
-
Invoice summaries remain financial history even when the billed scope is later
|
|
6140
|
-
retired. Limit access to administrators who need it, keep exports in protected
|
|
6141
|
-
storage, and apply the organization's retention and legal-hold rules. Retain
|
|
6142
|
-
the invoice identifier, currency, total, state, period and observation time in
|
|
6143
|
-
ordinary support evidence—not the complete document or payment details.`,
|
|
6144
|
-
},
|
|
6145
|
-
{
|
|
6146
|
-
managedPath: 'billing-and-subscriptions/metered-usage.md',
|
|
6147
|
-
unitRef: 'technical-documentation:unit/understand-metered-usage',
|
|
6148
|
-
sourceRefs: [
|
|
6149
|
-
'saas-technical-doc:engine-content/understand-metered-usage',
|
|
6150
|
-
'source:consumer-fact:billing-lifecycle',
|
|
6151
|
-
],
|
|
6152
|
-
markdown: `# Understand metered usage
|
|
6153
|
-
|
|
6154
|
-
This page applies only if a plan or add-on you hold charges for a measured
|
|
6155
|
-
quantity. If everything you subscribe to is a flat recurring price, no usage is
|
|
6156
|
-
recorded and no usage line appears on an invoice — check
|
|
6157
|
-
[Understand plans, prices and access](/billing-and-subscriptions/plans-and-access)
|
|
6158
|
-
to see which of the two you have.
|
|
6159
|
-
|
|
6160
|
-
A metered product charges for a measured quantity, such as processed documents,
|
|
6161
|
-
automated runs or storage consumed. The application records the activity first;
|
|
6162
|
-
the billing provider receives grouped usage later and uses its configured meter
|
|
6163
|
-
when preparing the invoice.
|
|
6164
|
-
|
|
6165
|
-
| Before you begin | Successful result |
|
|
6166
|
-
| --- | --- |
|
|
6167
|
-
| Know the organization, metered product, billing period, unit being counted and application action that produces it | Local records, reported state, provider quantity and invoice use the same product, scope, period and unit without duplicating usage |
|
|
6168
|
-
|
|
6169
|
-
## Follow one quantity through the system
|
|
6170
|
-
|
|
6171
|
-
~~~mermaid
|
|
6172
|
-
sequenceDiagram
|
|
6173
|
-
accTitle: Follow metered usage from application activity to an invoice
|
|
6174
|
-
accDescr: A successful application action creates a local usage row. The Billing area can show the local total while the row is pending. A scheduled flush groups pending rows by billing account and product, reports the quantity to the provider, then marks the local rows as reported. Provider processing is asynchronous, so the invoice can lag behind the newest local activity.
|
|
6175
|
-
participant U as User or workload
|
|
6176
|
-
participant App as Application
|
|
6177
|
-
participant Store as Local usage records
|
|
6178
|
-
participant Job as Billing reporter
|
|
6179
|
-
participant P as Billing provider
|
|
6180
|
-
U->>App: Complete a metered action
|
|
6181
|
-
App->>Store: Record product, quantity and occurrence time
|
|
6182
|
-
Note over Store: reportedToProvider = false
|
|
6183
|
-
Job->>Store: Read pending rows by account + product
|
|
6184
|
-
Job->>P: Report grouped quantity
|
|
6185
|
-
P-->>Job: Accept report
|
|
6186
|
-
Job->>Store: Mark included rows as reported
|
|
6187
|
-
P->>P: Process meter and prepare invoice asynchronously
|
|
6188
|
-
~~~
|
|
6189
|
-
|
|
6190
|
-
The two delays in the diagram are different:
|
|
6191
|
-
|
|
6192
|
-
- **Pending locally** means the application has recorded the activity but has
|
|
6193
|
-
not yet marked it as reported to the provider.
|
|
6194
|
-
- **Accepted by the provider** still does not mean an invoice or provider usage
|
|
6195
|
-
summary has updated immediately. Provider meter processing is asynchronous.
|
|
6196
|
-
|
|
6197
|
-
The application does not promise a universal flush interval. Record the last
|
|
6198
|
-
local occurrence time and the reported state instead of saying “billing updates
|
|
6199
|
-
every hour”.
|
|
6200
|
-
|
|
6201
|
-
## Understand what created the record
|
|
6202
|
-
|
|
6203
|
-
{{CONSUMER_FACT:source:consumer-fact:billing-lifecycle#usageSourceTypesMarkdown}}
|
|
6204
|
-
|
|
6205
|
-
The source helps an administrator locate the business action that produced the
|
|
6206
|
-
quantity. It is not a reason to store a person's name, email or free-text notes
|
|
6207
|
-
in usage metadata. These records are retained as financial history.
|
|
6208
|
-
|
|
6209
|
-
## Worked example: local usage is temporarily ahead
|
|
6210
|
-
|
|
6211
|
-
Three application actions create quantities of 40, 25 and 10 for the same
|
|
6212
|
-
product and billing period. The local total is **75**. The first two rows have
|
|
6213
|
-
already been reported, while the last row remains pending, so the provider can
|
|
6214
|
-
temporarily show **65**.
|
|
6215
|
-
|
|
6216
|
-
Do not manually send the missing 10 or recreate the application action. First
|
|
6217
|
-
wait for the normal reporting boundary and verify that the original row becomes
|
|
6218
|
-
reported. Re-sending a quantity that the normal flush later sends can create a
|
|
6219
|
-
duplicate charge.
|
|
6220
|
-
|
|
6221
|
-
## Reconcile a usage difference
|
|
6222
|
-
|
|
6223
|
-
| Check | What to compare | What it rules out |
|
|
6224
|
-
| --- | --- | --- |
|
|
6225
|
-
| Scope | Environment, organization and billing account | Usage from another tenant or test environment |
|
|
6226
|
-
| Product | Product key and the unit described by the offer | Comparing requests with storage, seats or another meter |
|
|
6227
|
-
| Period | Local occurrence timestamps and provider invoice period | Correct usage assigned to a different billing cycle |
|
|
6228
|
-
| Local total | Every row in the period, including pending rows | A dashboard total that omitted recent activity |
|
|
6229
|
-
| Reporting state | **Reported to provider** and **reported at** values | Treating pending activity as already invoiced |
|
|
6230
|
-
| Provider result | Meter quantity and invoice state after processing | A provider-side delay or rejected meter event |
|
|
6231
|
-
|
|
6232
|
-
Close the investigation only when the same records explain both totals, or when
|
|
6233
|
-
a named correction owner has accepted the difference. Preserve the product,
|
|
6234
|
-
period, local total, reported total, pending row identifiers and correlation
|
|
6235
|
-
evidence. Do not retain provider credentials or personal data.
|
|
6236
|
-
|
|
6237
|
-
If the hosted provider is Stripe, its maintained
|
|
6238
|
-
[usage-based billing overview](https://docs.stripe.com/billing/subscriptions/usage-based/how-it-works),
|
|
6239
|
-
[meter-event recording guide](https://docs.stripe.com/billing/subscriptions/usage-based/recording-usage-api)
|
|
6240
|
-
and [meter configuration guide](https://docs.stripe.com/billing/subscriptions/usage-based/meters/configure)
|
|
6241
|
-
explain the provider side. Use those references to interpret provider processing;
|
|
6242
|
-
use the application's local records to identify what was actually measured.`,
|
|
6243
|
-
},
|
|
6244
|
-
{
|
|
6245
|
-
managedPath: 'billing-and-subscriptions/reconcile-access.md',
|
|
6246
|
-
unitRef: 'technical-documentation:unit/reconcile-billing-and-access',
|
|
6247
|
-
sourceRefs: [
|
|
6248
|
-
'saas-technical-doc:engine-content/reconcile-billing-and-access',
|
|
6249
|
-
'source:consumer-fact:billing-lifecycle',
|
|
6250
|
-
],
|
|
6251
|
-
markdown: `# Reconcile billing and application access
|
|
6252
|
-
|
|
6253
|
-
Use reconciliation when the provider, the application subscription and the
|
|
6254
|
-
person's visible access do not tell the same story. Keep those layers separate;
|
|
6255
|
-
changing a role to conceal a billing problem creates a second access problem.
|
|
6256
|
-
|
|
6257
|
-
| Before you begin | Successful result |
|
|
6258
|
-
| --- | --- |
|
|
6259
|
-
| Have the environment, billed organization, subscription and invoice identities, expected product grants, original application action and approximate change time | The first inconsistent layer is identified, repaired through its normal workflow and verified against current application state without a duplicate charge or unrelated access grant |
|
|
6260
|
-
|
|
6261
|
-
{{CONSUMER_FACT:source:consumer-fact:billing-lifecycle#subscriptionStatusesMarkdown}}
|
|
6262
|
-
|
|
6263
|
-
## Name the layer that disagrees
|
|
6264
|
-
|
|
6265
|
-
| Layer | Evidence to read | Typical question |
|
|
6266
|
-
| --- | --- | --- |
|
|
6267
|
-
| Commercial offer | Current product, price, quantity and behavior policy shown by the application | Was the approved item actually offered for this scope? |
|
|
6268
|
-
| Provider transaction | Authenticated checkout/portal and invoice evidence | Did the provider complete, refuse or leave payment incomplete? |
|
|
6269
|
-
| Application billing state | Subscription items, status, period dates, invoice summary and usage reporting state | Did the verified result reach the intended billing account? |
|
|
6270
|
-
| Billing-derived access | Product grants and resolved feature/limit in the billed scope | Did the application recompute the access that this state should contribute? |
|
|
6271
|
-
| Original user action | The operation the person or workload tried to perform | Is the intended outcome now genuinely usable? |
|
|
6272
|
-
|
|
6273
|
-
Move down the table in order. A role change at the final layer cannot repair an
|
|
6274
|
-
incomplete provider transaction, and a paid invoice does not by itself prove
|
|
6275
|
-
that the application's subscription or feature state was updated.
|
|
6276
|
-
|
|
6277
|
-
~~~mermaid
|
|
6278
|
-
flowchart TD
|
|
6279
|
-
accTitle: Reconcile a billing change from scope to entitlement
|
|
6280
|
-
accDescr: The reviewer confirms the billed scope, reads the application subscription and invoice, checks whether the subscription state contributes billing access, compares product grants with resolved access, and then repairs the failing layer.
|
|
6281
|
-
symptom["Expected access differs from visible access"] --> scope["Confirm billed organization or person"]
|
|
6282
|
-
scope --> subscription["Read current application subscription"]
|
|
6283
|
-
subscription --> state{"Active or Trialing?"}
|
|
6284
|
-
state -->|No| payment["Inspect invoice and payment state"]
|
|
6285
|
-
state -->|Yes| grants["Compare plan and add-on grants"]
|
|
6286
|
-
grants --> resolved["Check resolved feature and limit"]
|
|
6287
|
-
payment --> repair["Repair billing or wait for verified update"]
|
|
6288
|
-
resolved --> repair
|
|
6289
|
-
repair --> verify["Repeat the original application action"]
|
|
6290
|
-
~~~
|
|
6291
|
-
|
|
6292
|
-
Notice that the flow checks **Active or Trialing** before comparing grants.
|
|
6293
|
-
Those are the only maintained subscription states that contribute billing-
|
|
6294
|
-
derived access. Payment repair belongs before feature repair when the
|
|
6295
|
-
subscription is in another state.
|
|
6296
|
-
|
|
6297
|
-
## Reconciliation checklist
|
|
6298
|
-
|
|
6299
|
-
1. Confirm the environment and billed scope.
|
|
6300
|
-
2. Read the current application subscription; do not rely on a provider email
|
|
6301
|
-
or redirect.
|
|
6302
|
-
3. Verify its product items, status, period dates and cancellation flag.
|
|
6303
|
-
4. If payment is involved, match the invoice total, currency and state.
|
|
6304
|
-
5. Compare the plan and add-on grants with the resolved feature or limit.
|
|
6305
|
-
6. Repeat the original application operation to prove access, not merely the
|
|
6306
|
-
Billing screen.
|
|
6307
|
-
7. Record the final subscription state and the evidence used to close the case.
|
|
6308
|
-
|
|
6309
|
-
Where a change may still be processing, preserve the first attempt and allow a
|
|
6310
|
-
bounded observation window instead of opening a replacement checkout. Where a
|
|
6311
|
-
write returned no response, re-read current subscription state before deciding
|
|
6312
|
-
whether a retry is safe.
|
|
6313
|
-
|
|
6314
|
-
Only Active and Trialing subscriptions contribute billing-derived access. A
|
|
6315
|
-
feature can still come from another allowed source, and a finite application
|
|
6316
|
-
limit can combine with plan and add-on limits. Explain the actual resolved
|
|
6317
|
-
result instead of assuming one plan label owns all access.
|
|
6318
|
-
|
|
6319
|
-
## Choose the repair by the failing layer
|
|
6320
|
-
|
|
6321
|
-
- **Wrong scope or offer:** return to the intended organization and select a
|
|
6322
|
-
current product/price through the normal Billing journey.
|
|
6323
|
-
- **Incomplete or failed payment:** use the authenticated billing portal; do not
|
|
6324
|
-
send payment details to application support.
|
|
6325
|
-
- **Stale application subscription:** preserve transaction and correlation
|
|
6326
|
-
evidence for support rather than patching the subscription record.
|
|
6327
|
-
- **Correct subscription but wrong grants:** compare the product and add-on
|
|
6328
|
-
definitions with the resolved feature/limit; do not add a broad role as a
|
|
6329
|
-
substitute.
|
|
6330
|
-
- **Correct resolved access but failed action:** troubleshoot the operation's
|
|
6331
|
-
organization, role, resource visibility and request separately from billing.
|
|
6332
|
-
|
|
6333
|
-
Close with the organization, original symptom, responsible layer, correction,
|
|
6334
|
-
final subscription/invoice state and the repeated application action. Exclude
|
|
6335
|
-
card details, provider secrets and complete invoice documents.`,
|
|
6336
|
-
},
|
|
6337
|
-
{
|
|
6338
|
-
managedPath: 'billing-and-subscriptions/troubleshoot.md',
|
|
6339
|
-
unitRef: 'technical-documentation:unit/troubleshoot-billing-change',
|
|
6340
|
-
sourceRefs: [
|
|
6341
|
-
'saas-technical-doc:engine-content/troubleshoot-billing-change',
|
|
6342
|
-
],
|
|
6343
|
-
markdown: `# Troubleshoot a billing change
|
|
6344
|
-
|
|
6345
|
-
Begin with what the administrator or user can observe. Repeating checkout,
|
|
6346
|
-
granting a broader role or manually changing access before identifying the
|
|
6347
|
-
failed layer can create duplicate charges or hide the original problem.
|
|
6348
|
-
|
|
6349
|
-
| Before you begin | Successful result |
|
|
6350
|
-
| --- | --- |
|
|
6351
|
-
| Preserve the environment, organization, first attempt, product/price, subscription or invoice identifier, approximate time, visible status and original application symptom | One failing boundary is identified and repaired without duplicating a purchase, exposing payment data or leaving unrelated access in place |
|
|
6352
|
-
|
|
6353
|
-
## Diagnose from the first durable record
|
|
6354
|
-
|
|
6355
|
-
~~~mermaid
|
|
6356
|
-
flowchart TD
|
|
6357
|
-
accTitle: Troubleshoot a billing change without repeating it blindly
|
|
6358
|
-
accDescr: The administrator starts from the first checkout or subscription evidence, confirms the billed scope, reads current subscription and invoice state, compares product grants with resolved access, then repeats the original application action after repairing only the failing layer.
|
|
6359
|
-
symptom["Billing or access result is unexpected"] --> scope["Confirm environment and billed scope"]
|
|
6360
|
-
scope --> attempt["Preserve first checkout or change evidence"]
|
|
6361
|
-
attempt --> subscription{"Application subscription present?"}
|
|
6362
|
-
subscription -->|No or incomplete| payment["Check invoice/provider evidence and processing state"]
|
|
6363
|
-
subscription -->|Yes| status{"State contributes billing access?"}
|
|
6364
|
-
status -->|No| payment
|
|
6365
|
-
status -->|Yes| grants["Compare product/add-on grants with resolved access"]
|
|
6366
|
-
grants --> action["Repeat original application action"]
|
|
6367
|
-
payment --> repair["Repair payment or reconcile verified provider result"]
|
|
6368
|
-
repair --> subscription
|
|
6369
|
-
~~~
|
|
6370
|
-
|
|
6371
|
-
Do not begin from a success redirect, provider email or plan label. Begin from
|
|
6372
|
-
the application billing account and current subscription for the intended
|
|
6373
|
-
scope, then correlate provider evidence only where the state requires it.
|
|
6374
|
-
|
|
6375
|
-
Use these maintained state meanings while diagnosing:
|
|
6376
|
-
|
|
6377
|
-
The full list of subscription states, and what each one means for access, is under
|
|
6378
|
-
[Reconcile access after a billing change](/billing-and-subscriptions/reconcile-access).
|
|
6379
|
-
|
|
6380
|
-
## Start from the symptom
|
|
6381
|
-
|
|
6382
|
-
| Symptom | First checks | Safe next step |
|
|
6383
|
-
| --- | --- | --- |
|
|
6384
|
-
| Returned from checkout but no subscription appears | Intended scope, existing incomplete subscription, processing delay and the first attempt's billing evidence | Reconcile the first attempt before opening checkout again |
|
|
6385
|
-
| Subscription is Active but feature is unavailable | Product and price, expected grants, current organization, resolved feature/limit and the original operation | Repair grant/access reconciliation; do not broaden the person's role |
|
|
6386
|
-
| Subscription is Past due, Unpaid or Paused | Current invoice state and the authenticated billing portal; these states do not contribute billing-derived access | Resolve payment in the portal, then wait for verified application state |
|
|
6387
|
-
| Downgrade or cancellation appears immediate | Returned subscription items, status, period end and cancellation flag; do not rely only on the requested timing | Compare the applied product policy and access consequence with the approval |
|
|
6388
|
-
| Cancellation was requested but access remains | End-of-period cancellation may intentionally keep an Active subscription until period end | Record the effective boundary and verify again when the period ends |
|
|
6389
|
-
| Invoice total differs from expectation | Currency, tax display, quantity, proration, promotion and billing period | Compare the selected offer and applied adjustment before disputing the charge |
|
|
6390
|
-
| Metered usage differs from provider | Local period total, last recorded time, reported state and aggregation delay | Wait for the bounded reporting window, then compare the same product and period |
|
|
6391
|
-
| Resume is refused | The subscription must still be pending end-of-period cancellation | If it already ended, use a newly approved purchase instead of resume |
|
|
6392
|
-
| Billing screen is correct but the application action fails | Resolved feature/limit, organization, role and exact operation | Troubleshoot authorization or resource scope separately from billing |
|
|
6393
|
-
|
|
6394
|
-
## Recover without making the record harder to understand
|
|
6395
|
-
|
|
6396
|
-
- Keep the first checkout or change identifiers and do not create a replacement
|
|
6397
|
-
until its state is known.
|
|
6398
|
-
- Use the authenticated billing portal for payment methods and invoice documents.
|
|
6399
|
-
- Correct the product, price or scope through the normal billing operation; do
|
|
6400
|
-
not patch subscription status directly.
|
|
6401
|
-
- After recovery, verify both the billing record and the application action that
|
|
6402
|
-
depends on it.
|
|
6403
|
-
- Share invoice identifiers, status, timestamps and correlation evidence with
|
|
6404
|
-
support—not card details, full invoice documents or provider secrets.
|
|
6405
|
-
|
|
6406
|
-
If the application record and provider evidence still disagree, preserve both
|
|
6407
|
-
views and escalate the reconciliation. The application retains subscriptions,
|
|
6408
|
-
invoice references and usage records as financial history rather than deleting
|
|
6409
|
-
them when a scope is retired.
|
|
6410
|
-
|
|
6411
|
-
## Escalate a reproducible case
|
|
6412
|
-
|
|
6413
|
-
Provide the environment, billed organization, product/price identity, first
|
|
6414
|
-
attempt or subscription identifier, invoice summary, timestamps, current state,
|
|
6415
|
-
expected access, observed application action and correlation identifier. State
|
|
6416
|
-
whether payment, subscription state or access changed between observations.
|
|
6417
|
-
Never attach card data, payment-method details, complete invoice documents,
|
|
6418
|
-
hosted invoice URLs, provider secrets or unrestricted personal data.`,
|
|
6419
5655
|
},
|
|
6420
5656
|
{
|
|
6421
5657
|
managedPath: 'integrations.md',
|
|
@@ -6564,6 +5800,7 @@ business effect occurred without blindly repeating it.`,
|
|
|
6564
5800
|
unitRef: 'technical-documentation:unit/connect-n8n',
|
|
6565
5801
|
sourceRefs: [
|
|
6566
5802
|
'saas-technical-doc:engine-content/connect-n8n',
|
|
5803
|
+
'source:companion-projection:application-connection',
|
|
6567
5804
|
'source:consumer-fact:access-api-keys',
|
|
6568
5805
|
],
|
|
6569
5806
|
markdown: `# Connect n8n
|
|
@@ -6613,7 +5850,7 @@ the same API-reference operation:
|
|
|
6613
5850
|
| n8n field | Value to use | How to verify it |
|
|
6614
5851
|
| --- | --- | --- |
|
|
6615
5852
|
| **Method** | The operation's documented HTTP method, initially **GET** | It matches the operation heading in the API reference |
|
|
6616
|
-
| **URL** |
|
|
5853
|
+
| **URL** | \`{{APPLICATION_CONNECTION_VALUE:baseUrl}}\` followed by the operation's documented path | The origin appears once and the API path appears once |
|
|
6617
5854
|
| **Authentication** | **Generic Credential Type**, then **Header Auth** | The key is stored as an n8n credential, not in the URL or workflow data |
|
|
6618
5855
|
| **Send Headers** | Add **Accept** with value **application/json** | The request asks for the documented JSON response |
|
|
6619
5856
|
| Query/path values | Only values required by the selected operation | Organization and resource identifiers are in the locations defined by the reference |
|
|
@@ -6749,6 +5986,7 @@ HTTP response needs deeper diagnosis.
|
|
|
6749
5986
|
unitRef: 'technical-documentation:unit/connect-zapier',
|
|
6750
5987
|
sourceRefs: [
|
|
6751
5988
|
'saas-technical-doc:engine-content/connect-zapier',
|
|
5989
|
+
'source:companion-projection:application-connection',
|
|
6752
5990
|
'source:consumer-fact:access-api-keys',
|
|
6753
5991
|
],
|
|
6754
5992
|
markdown: `# Connect Zapier
|
|
@@ -6809,7 +6047,7 @@ Complete the API Request action from one operation in the current reference:
|
|
|
6809
6047
|
| Zapier field | Value to use | Verification |
|
|
6810
6048
|
| --- | --- | --- |
|
|
6811
6049
|
| Method | The documented method, initially **GET** | It matches the operation heading |
|
|
6812
|
-
| URL |
|
|
6050
|
+
| URL | \`{{APPLICATION_CONNECTION_VALUE:baseUrl}}\` plus the operation's documented path | Origin and API prefix each appear once |
|
|
6813
6051
|
| Headers | **Accept: application/json** plus connection-managed authentication | No API key is visible in the Zap step |
|
|
6814
6052
|
| Parameters | Only required query/path values | Organization and record values are in the documented locations |
|
|
6815
6053
|
| Body | Empty for the selected read unless the operation explicitly documents one | No response field was copied back as an invented request field |
|
|
@@ -6917,6 +6155,7 @@ flowchart TD
|
|
|
6917
6155
|
unitRef: 'technical-documentation:unit/connect-make',
|
|
6918
6156
|
sourceRefs: [
|
|
6919
6157
|
'saas-technical-doc:engine-content/connect-make',
|
|
6158
|
+
'source:companion-projection:application-connection',
|
|
6920
6159
|
'source:consumer-fact:access-api-keys',
|
|
6921
6160
|
],
|
|
6922
6161
|
markdown: `# Connect Make
|
|
@@ -6968,7 +6207,7 @@ Complete the remaining module fields from the same API-reference operation:
|
|
|
6968
6207
|
|
|
6969
6208
|
| Make field | Value to use | Verification |
|
|
6970
6209
|
| --- | --- | --- |
|
|
6971
|
-
| URL |
|
|
6210
|
+
| URL | \`{{APPLICATION_CONNECTION_VALUE:baseUrl}}\` plus the operation's documented path | The scheme, origin and API prefix each appear once |
|
|
6972
6211
|
| Method | The documented method, initially **GET** | It matches the operation heading |
|
|
6973
6212
|
| Headers | Add **Accept: application/json** | Authentication remains in **Credentials**, not duplicated here |
|
|
6974
6213
|
| Query parameters | Only parameters accepted by the operation | Organization and record values are in documented locations |
|
|
@@ -7769,8 +7008,8 @@ unclear operation contract.
|
|
|
7769
7008
|
|
|
7770
7009
|
## Step 2: send the request once
|
|
7771
7010
|
|
|
7772
|
-
|
|
7773
|
-
path from the
|
|
7011
|
+
The origin below is this application's own, so the only thing left to supply is
|
|
7012
|
+
the operation path from the API reference and your key. The authorization line
|
|
7774
7013
|
is the application's maintained API-key transport contract.
|
|
7775
7014
|
|
|
7776
7015
|
~~~bash
|
|
@@ -8024,7 +7263,7 @@ Give the request a name in your notes before you send it. "List the members of t
|
|
|
8024
7263
|
The safest first call reads the organization the key belongs to. It needs no other identifier and changes nothing.
|
|
8025
7264
|
|
|
8026
7265
|
~~~bash
|
|
8027
|
-
BASE_URL="
|
|
7266
|
+
BASE_URL="{{APPLICATION_CONNECTION_VALUE:baseUrl}}" # this application's own origin
|
|
8028
7267
|
ORGANIZATION_ID="7c1f6f0a-4b1e-4d8f-9a0c-2e5b3c9d1f42" # from the application's organization settings
|
|
8029
7268
|
ORGANIZATION_API_KEY="sk_org_…" # the key you created
|
|
8030
7269
|
|
|
@@ -8034,7 +7273,7 @@ curl --fail-with-body \\
|
|
|
8034
7273
|
--header "accept: application/json"
|
|
8035
7274
|
~~~
|
|
8036
7275
|
|
|
8037
|
-
Replace the
|
|
7276
|
+
Replace the organization id and the key with yours; the base URL above is already this application's. Leave the header exactly as shown. {{CONSUMER_FACT:source:consumer-fact:access-api-keys#markdown}}
|
|
8038
7277
|
|
|
8039
7278
|
A successful answer is **200** with the organization record: its \`_id\` is the identifier you sent, and \`name\` is the organization you expected. Anything else, read the [failure table](#if-it-fails) below before changing more than one thing.
|
|
8040
7279
|
|
|
@@ -8264,7 +7503,7 @@ The application knows who is calling and refuses this operation in this scope.
|
|
|
8264
7503
|
|
|
8265
7504
|
- Compare the roles on the key with the roles the operation lists in the API reference.
|
|
8266
7505
|
- A collection under an organization the key is not a member of is refused with 403; confirm the organization identifier.
|
|
8267
|
-
- \`FEATURE_NOT_AVAILABLE\` and \`FEATURE_LIMIT_EXCEEDED\` are plan refusals, not role refusals
|
|
7506
|
+
- \`FEATURE_NOT_AVAILABLE\` and \`FEATURE_LIMIT_EXCEEDED\` are plan refusals, not role refusals: the organization's subscription does not include the capability, or has reached its limit for it. Changing a role will not clear either one.
|
|
8268
7507
|
|
|
8269
7508
|
## 404: the record is not visible here
|
|
8270
7509
|
|