Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/kratos/organizations/organizations.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -412,7 +412,7 @@ curl -X PATCH --location "https://api.console.ory.com/projects/$PROJECT_ID" \
```

The SAML application callback URL to set as the SAML Identity Provider is:
`https://$PROJECT_SLUG.projects.oryapis.com/saml/api/oauth/saml`
`https://$PROJECT_SLUG.projects.oryapis.com/saml/api/oauth/saml/$PROVIDER_ID`

#### Data mapping

Expand Down
122 changes: 87 additions & 35 deletions docs/polis/reference/api.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"openapi": "3.0.3",
"info": {
"title": "Enterprise SSO & Directory Sync",
"version": "1.52.2",
"version": "26.2.0",
"description": "This is the API documentation for Polis.",
"termsOfService": "/tos",
"contact": {
Expand Down Expand Up @@ -110,6 +110,10 @@
"type": "string",
"description": "Override the global ACS URL on a per connection basis"
},
"acsUrlId": {
"type": "string",
"description": "An identifier that allows multiple SAML connections to share the same IdP entity ID. When set, the ACS URL includes this ID to route responses to the correct connection."
},
"samlAudienceOverride": {
"type": "string",
"description": "Override the global SAML Audience on a per connection basis"
Expand Down Expand Up @@ -141,7 +145,8 @@
"401": {
"description": "Unauthorized"
}
}
},
"x-ory-ratelimit-bucket": "polis-public-medium"
},
"patch": {
"tags": ["Single Sign-On"],
Expand Down Expand Up @@ -233,6 +238,10 @@
"type": "string",
"description": "Override the global ACS URL on a per connection basis"
},
"acsUrlId": {
"type": "string",
"description": "An identifier that allows multiple SAML connections to share the same IdP entity ID. When set, the ACS URL includes this ID to route responses to the correct connection."
},
"samlAudienceOverride": {
"type": "string",
"description": "Override the global SAML Audience on a per connection basis"
Expand All @@ -248,6 +257,16 @@
"required": true
},
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Connection"
}
}
}
},
"204": {
"description": "Success",
"content": {}
Expand All @@ -263,7 +282,8 @@
"description": "Please set OpenID response handler path (oidcPath) on Jackson",
"content": {}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-medium"
},
"get": {
"tags": ["Single Sign-On"],
Expand Down Expand Up @@ -323,7 +343,8 @@
"401": {
"$ref": "#/components/responses/401Get"
}
}
},
"x-ory-ratelimit-bucket": "polis-public-high"
},
"delete": {
"tags": ["Single Sign-On"],
Expand Down Expand Up @@ -381,7 +402,8 @@
"401": {
"description": "Unauthorized"
}
}
},
"x-ory-ratelimit-bucket": "polis-public-medium"
}
},
"/api/v1/sso/product": {
Expand Down Expand Up @@ -413,7 +435,8 @@
"401": {
"$ref": "#/components/responses/401Get"
}
}
},
"x-ory-ratelimit-bucket": "polis-public-high"
Comment on lines +438 to +439

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== locate api.json =="
fd -a 'api\.json$' . | sed 's#^\./##'

echo "== excerpts around docs/polis/reference/api.json lines 400-480 =="
sed -n '400,480p' docs/polis/reference/api.json | nl -ba -v400

echo "== search setuplinks =="
rg -n '/api/v1/sso/setuplinks|x-ory-ratelimit-bucket|rate-limit endpoint table|setuplinks' docs/polis/reference/api.json docs || true

echo "== relevant operations count/buckets =="
python3 - <<'PY'
import json
from pathlib import Path
p=Path('docs/polis/reference/api.json')
data=json.loads(p.read_text())
paths=data.get('paths',{})
for path,ops in paths.items():
    if '/api/v1/sso/setuplinks' in path:
        print(f'PATH {path}')
        for method,e in ops.items():
            print(f' {method} bucket={e.get("x-ory-ratelimit-bucket")!r}')
print('directory sync setuplinks:')
for path,ops in paths.items():
    if '/api/v1/sso/dirsync' in path or 'dirsync' in path.lower() or 'setuplinks' in path:
        pass
PY

Repository: ory/docs

Length of output: 1405


🏁 Script executed:

#!/bin/bash
set -euo pipefail

file='docs/polis/reference/api.json'
echo "== lines 400-490 =="
sed -n '400,490p' "$file" | cat -n | sed 's#^\s*##'

echo "== setuplinks occurrences =="
grep -nE '/api/v1/sso/setuplinks|x-ory-ratelimit-bucket|rate-limit|rate limit|rate-limit endpoint' "$file" || true

echo "== summary of /api/v1/sso/setuplinks operations and buckets =="
python3 - <<'PY'
import json
from pathlib import Path
p=Path('docs/polis/reference/api.json')
data=json.loads(p.read_text())
for path in sorted(data.get('paths', {}).keys()):
    if '/api/v1/sso/setuplinks' in path:
        print('PATH', path)
        for method, op in data['paths'][path].items():
            bucket = op.get('x-ory-ratelimit-bucket')
            print(f' {method} bucket={bucket!r}')
PY

Repository: ory/docs

Length of output: 5462


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== policy/reference rate-limit bucket and table references =="
rg -n "x-ory-ratelimit-bucket|rate-limit.*endpoint|rate.*limit.*endpoint|generated.*rate|rate-limit" docs src .github workflows -g '!*.map' || true

echo "== local scripts containing generate/rate/convert terms =="
rg -n "generate|rate|limit|ratelimit|metadata|reference|api.json|doc" README* docs src .github workflows -g '!*.map' | head -n 200 || true

Repository: ory/docs

Length of output: 50365


🏁 Script executed:

#!/bin/bash
set -euo pipefail

file='docs/polis/reference/api.json'

echo "== /api/v1/sso/setuplinks blocks =="
python3 - <<'PY'
import json, re
p='docs/polis/reference/api.json'
s=open(p, encoding='utf-8').read()
for m in re.finditer(r'([{/]\s*"\s*/api/v1/sso/(?:dirsync|setuplinks)[^"]*":\s*\{|"\s*/api/v1/sso/(?:dirsync|setuplinks)[^"]*":\s*\{)', s):
    start=m.start()-200
    if start<0: start=0
    end=s.find('\n    },', m.end())
    block=s[m.start()+1:end].replace('\n', ' ')[:500]
    print(block)
PY

echo "== JSON slice around setuplinks paths =="
sed -n '576,600p' "$file"
sed -n '902,915p' "$file"

Repository: ory/docs

Length of output: 2322


Add x-ory-ratelimit-bucket to the SSO setup-link operations.

The /api/v1/sso/setuplinks POST/DELETE/GET operations and /api/v1/sso/setuplinks/product GET are classified under rate-limit endpoint documentation, but they currently have no bucket. Add the appropriate polis-public-medium/polis-public-high values so these routes show up in the generated rate-limit table.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/polis/reference/api.json` around lines 438 - 439, Add the
x-ory-ratelimit-bucket extension to the SSO setup-link operation definitions for
POST, DELETE, and GET /api/v1/sso/setuplinks and GET
/api/v1/sso/setuplinks/product. Assign the appropriate polis-public-medium or
polis-public-high value consistent with the documented rate-limit classification
so all four operations appear in the generated rate-limit table.

}
},
"/oauth/token": {
Expand Down Expand Up @@ -492,7 +515,8 @@
}
}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-medium"
}
},
"/oauth/userinfo": {
Expand Down Expand Up @@ -553,7 +577,8 @@
}
}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-high"
}
},
"/api/v1/sso/setuplinks": {
Expand Down Expand Up @@ -780,7 +805,8 @@
}
}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-medium"
},
"delete": {
"tags": ["Setup Links | Directory Sync"],
Expand Down Expand Up @@ -828,7 +854,8 @@
}
}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-medium"
},
"get": {
"tags": ["Setup Links | Directory Sync"],
Expand Down Expand Up @@ -873,7 +900,8 @@
}
}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-high"
}
},
"/api/v1/sso/setuplinks/product": {
Expand Down Expand Up @@ -945,7 +973,8 @@
}
}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-high"
}
},
"/api/v1/sso-traces": {
Expand Down Expand Up @@ -974,7 +1003,8 @@
}
}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-high"
}
},
"/api/v1/sso-traces/product": {
Expand Down Expand Up @@ -1018,7 +1048,8 @@
}
}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-high"
}
},
"/api/v1/dsync": {
Expand Down Expand Up @@ -1073,7 +1104,8 @@
}
}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-medium"
},
"get": {
"tags": ["Directory Sync"],
Expand Down Expand Up @@ -1110,7 +1142,8 @@
}
}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-high"
}
},
"/api/v1/dsync/{directoryId}": {
Expand Down Expand Up @@ -1139,7 +1172,8 @@
}
}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-high"
},
"patch": {
"tags": ["Directory Sync"],
Expand Down Expand Up @@ -1206,7 +1240,8 @@
}
}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-medium"
},
"delete": {
"tags": ["Directory Sync"],
Expand All @@ -1227,7 +1262,8 @@
"description": "Success",
"content": {}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-medium"
}
},
"/api/v1/dsync/product": {
Expand Down Expand Up @@ -1271,7 +1307,8 @@
}
}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-high"
}
},
"/api/v1/dsync/groups/{groupId}": {
Expand Down Expand Up @@ -1324,7 +1361,8 @@
}
}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-high"
}
},
"/api/v1/dsync/groups": {
Expand Down Expand Up @@ -1374,7 +1412,8 @@
}
}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-high"
}
},
"/api/v1/dsync/groups/{groupId}/members": {
Expand Down Expand Up @@ -1423,7 +1462,8 @@
}
}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-high"
}
},
"/api/v1/dsync/users/{userId}": {
Expand Down Expand Up @@ -1476,7 +1516,8 @@
}
}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-high"
}
},
"/api/v1/dsync/users": {
Expand Down Expand Up @@ -1526,7 +1567,8 @@
}
}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-high"
}
},
"/api/v1/dsync/events": {
Expand Down Expand Up @@ -1576,7 +1618,8 @@
}
}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-high"
}
},
"/api/v1/identity-federation": {
Expand Down Expand Up @@ -1605,7 +1648,8 @@
}
}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-medium"
},
"get": {
"tags": ["Identity Federation"],
Expand Down Expand Up @@ -1648,7 +1692,8 @@
}
}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-high"
},
"patch": {
"tags": ["Identity Federation"],
Expand All @@ -1675,7 +1720,8 @@
}
}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-medium"
},
"delete": {
"tags": ["Identity Federation"],
Expand Down Expand Up @@ -1723,7 +1769,8 @@
}
}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-medium"
}
},
"/api/v1/identity-federation/product": {
Expand Down Expand Up @@ -1776,7 +1823,8 @@
}
}
}
}
},
"x-ory-ratelimit-bucket": "polis-public-high"
}
}
},
Expand Down Expand Up @@ -1846,6 +1894,10 @@
"type": "string",
"description": "Override the global ACS URL on a per connection basis"
},
"acsUrlId": {
"type": "string",
"description": "An identifier that allows multiple SAML connections to share the same IdP entity ID. When set, the ACS URL includes this ID to route responses to the correct connection."
},
"samlAudienceOverride": {
"type": "string",
"description": "Override the global SAML Audience on a per connection basis"
Expand All @@ -1862,12 +1914,12 @@
"loginType": "idp",
"provider": "okta.com"
},
"defaultRedirectUrl": "https://hoppscotch.io/",
"redirectUrl": ["https://hoppscotch.io/"],
"tenant": "hoppscotch.io",
"defaultRedirectUrl": "http://localhost:3000/default",
"redirectUrl": ["http://localhost:3000/default"],
"tenant": "example.com",
"product": "API Engine",
"name": "Hoppscotch-SP",
"description": "SP for hoppscotch.io",
"description": "SP for example.com",
"clientID": "Xq8AJt3yYAxmXizsCWmUBDRiVP1iTC8Y/otnvFIMitk",
"clientSecret": "00e3e11a3426f97d8000000738300009130cd45419c5943",
"deactivated": false
Expand Down
Loading