Coorpacademy · OpenAPI Overlay 1.0.0
Coorpacademy SCIM API — API Evangelist corrections
6 actions
6 updates
documentation
Generated by API Evangelist
Written by API Evangelist tooling for Coorpacademy's API. It is a proposal applied on top of the contract, not a document Coorpacademy publishes.
What the actions change
descriptionoperationId
Targets 6
$.servers
$.paths['/{brand}/Users'].post
$.paths['/{brand}/Users/{userId}'].get
$.paths['/{brand}/Users'].get
$.paths['/{brand}/Users/{userId}'].patch
$.components.securitySchemes.token
OpenAPI Overlay
overlay: 1.0.0
info:
title: Coorpacademy SCIM API — API Evangelist corrections
version: 1.0.0
x-provenance:
generated: '2026-08-17'
method: generated
source: openapi/coorpacademy-scim-openapi.json
extends: openapi/coorpacademy-scim-openapi.json
note: >-
Overlay only. The harvested specification in openapi/ is never mutated. Every correction below is
justified against evidence recorded in the x-rationale of the action.
actions:
- target: $.servers
description: >-
CORRECT THE BASE URL. The published spec declares servers[0].url as
https://api.coorpacademy.com with paths of the form /{brand}/Users, which resolves to
https://api.coorpacademy.com/{brand}/Users — a path that does not exist. The real base carries a
/scim prefix, as the Swagger UI index itself declares (host 'api', path '/scim') and as a live
probe confirms: GET https://api.coorpacademy.com/scim/coorp/Users returned HTTP 400 with the SCIM
2.0 error envelope {"schemas":["urn:ietf:params:scim:api:messages:2.0:Error"],...} on 2026-08-17,
while the spec-derived URL is not served.
update:
- url: https://api.coorpacademy.com/scim
description: production
- url: https://api-staging.coorpacademy.com/scim
description: staging (host pattern declared by the Swagger UI index; not probed)
x-rationale: verified-live-2026-08-17
- target: $.paths['/{brand}/Users'].post
description: >-
FIX A COPY-PASTED operationId. The published spec names this operation `onboardingPOST`, which is
the operationId of POST /api/v1/onboarding in the UNRELATED email API
(openapi/coorpacademy-mail-openapi.json). A generated client would produce a method called
`onboardingPOST` that creates a SCIM user.
update:
operationId: createScimUser
x-rationale: duplicate-operationid-across-specs
- target: $.paths['/{brand}/Users/{userId}'].get
description: >-
FIX A COPY-PASTED operationId, and a worse one. The published spec names this GET operation
`recommendedCoursePOST` — the operationId of POST /api/v1/recommendedCourse in the email API. The
name says POST, the method is GET, and the noun is from a different product. Any code generator
run against this spec emits a method whose name actively misleads.
update:
operationId: getScimUser
x-rationale: duplicate-operationid-across-specs
- target: $.paths['/{brand}/Users'].get
description: Document the missing pagination and filtering contract.
update:
description: >-
Lists provisioned users for the brand. The published spec declares no pagination or filtering
parameters, so the SCIM 2.0 `startIndex`, `count` and `filter` query parameters an identity
provider normally sends are undocumented — an IdP cannot tell from this contract whether they
are honoured. Verify with Coorpacademy before relying on them.
- target: $.paths['/{brand}/Users/{userId}'].patch
description: Record the missing SCIM error discriminator.
update:
description: >-
SCIM PATCH. Error bodies use the RFC 7644 error envelope but omit the `scimType` field, which is
the value an identity provider reads to distinguish `invalidValue` from `uniqueness` from
`mutability`. Without it, an IdP cannot classify a 400 and will surface a generic failure.
- target: $.components.securitySchemes.token
description: >-
Record what the live surface actually validates. The scheme is declared as an apiKey in a `token`
header, but the live 400 body reports "JWTError: Expecting type: string at key: authorization but
instead got: undefined" — i.e. the implementation reads an `authorization` header and expects a
JWT, not the `token` header the contract names.
update:
description: >-
DECLARED: apiKey in a `token` header. OBSERVED 2026-08-17: an unauthenticated request returns
"JWTError: Expecting type: string at key: authorization but instead got: undefined", which
indicates the service validates a JWT read from an `authorization` header. The declared scheme
and the observed behaviour disagree; confirm with Coorpacademy which header is authoritative.
x-rationale: verified-live-2026-08-17
x-gaps-not-fixable-by-overlay:
- >-
Only the /Users resource is published. SCIM /Groups, /ServiceProviderConfig, /Schemas and
/ResourceTypes are absent, so group provisioning is unsupported and an IdP cannot self-configure by
discovery. No DELETE operation is published either, so de-provisioning presumably relies on a PATCH
to `active: false` — which the contract does not state.
Work with this as data
Every overlay here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for openapi overlays
4 MCP tools reach this
find_overlaysBrowse and filter every overlay in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This overlay
curl "https://apis.io/api/v1/overlays/coorpacademy-scim-overlay"
All openapi overlays
curl "https://apis.io/api/v1/overlays?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.