Flockjay · Authentication Profile

Flockjay Authentication

Authentication

Flockjay runs two authentication paths against one API host. Human/first-party clients use a DRF token ("Basic token authentication required" is the literal 401 body). Agents and third-party clients use OAuth 2.1 authorization-code + PKCE against api.flockjay.com, with dynamic client registration — this is the path the MCP server requires. There is no published developer portal, no key self-service page, and no OpenAPI securitySchemes block to derive from; every fact below was observed on the wire.

Flockjay declares 2 security scheme(s) across its OpenAPI definitions.

CompanySales EnablementSales TrainingLearning ManagementRevenue OperationsAI CoachingContent ManagementSaaSMCPAgent NativeOAuth
Methods: Schemes: 2 OAuth flows: API key in:

Security Schemes

http
scheme: token · in: header ()
oauth2

Source

Authentication Profile

flockjay-authentication.yml Raw ↑
generated: '2026-08-14'
method: probed
source: >-
  https://api.flockjay.com/.well-known/openid-configuration,
  https://api.flockjay.com/.well-known/oauth-protected-resource, and live
  unauthenticated probes of the Django REST Framework collections under
  https://api.flockjay.com/api/ on 2026-08-14.
name: Flockjay authentication profile
description: >-
  Flockjay runs two authentication paths against one API host. Human/first-party
  clients use a DRF token ("Basic token authentication required" is the literal
  401 body). Agents and third-party clients use OAuth 2.1 authorization-code +
  PKCE against api.flockjay.com, with dynamic client registration — this is the
  path the MCP server requires. There is no published developer portal, no key
  self-service page, and no OpenAPI securitySchemes block to derive from; every
  fact below was observed on the wire.

schemes:
- id: drf-token
  type: http
  scheme: token
  in: header
  header: Authorization
  format: 'Token <token>'
  applies_to: https://api.flockjay.com/api/
  issuance: >-
    Not self-service. No public signup or key page was found; tokens appear to be
    issued to a provisioned Flockjay tenant.
  evidence:
    url: https://api.flockjay.com/api/users/
    http_status: 401
    body: '{"detail":"Basic token authentication required."}'
  observed_variants:
  - body: '{"detail":"Basic token authentication required."}'
    seen_on:
    - /api/users/
    - /api/events/
    - /api/assignment_submissions/
    - /api/v2/user/
    - /api/v2/learning-content/
    - /api/v2/search/
    - /api/v2/sharedcontent/
    - /api/v2/event/
    - /api/v2/task/
    - /api/v2/user_certificate/
    - /api/v2/assignment-submission/
  - body: '{"detail":"Authentication credentials were not provided."}'
    seen_on:
    - /api/questions/
    - /api/groups/
    - /api/module/
    - /api/submodule/
    - /api/rubrics/
    - /api/assignments/
    - /api/live_sessions/
    note: >-
      Stock DRF message. Two different 401 bodies across sibling collections means
      the v1 surface mixes at least two permission/authentication classes.

- id: oauth2-authorization-code
  type: oauth2
  flow: authorizationCode
  pkce: S256
  pkce_required: true
  authorization_endpoint: https://flockjay.com/oauth/authorize
  token_endpoint: https://api.flockjay.com/oauth/token/
  revocation_endpoint: https://api.flockjay.com/oauth/revoke/
  registration_endpoint: https://api.flockjay.com/oauth/register/
  jwks_uri: https://api.flockjay.com/oauth/.well-known/jwks.json
  issuer: https://api.flockjay.com
  grant_types:
  - authorization_code
  - refresh_token
  response_types:
  - code
  token_endpoint_auth_methods:
  - none
  scopes:
  - read
  - offline_access
  id_token_signing_alg:
  - RS256
  subject_types:
  - public
  applies_to: https://api.flockjay.com/mcp
  dynamic_client_registration: true
  dcr_spec: RFC 7591
  evidence:
    url: https://api.flockjay.com/.well-known/oauth-authorization-server
    http_status: 200

anonymous_surfaces:
- path: /api/
  http_status: 200
  note: >-
    Browsable DRF API root. Returns a JSON map of 20 collection URLs. The only
    self-describing thing Flockjay publishes about its REST API.
- path: /api/course/
  http_status: 200
  note: >-
    Returns an empty paginated envelope {"count":0,...} without credentials. Reads
    as an unauthenticated-but-tenant-scoped-to-nothing response rather than an open
    collection.
- path: /api/v2/sharedcontent/{linkId}/
  http_status: 200
  note: >-
    Public share links resolve anonymously — this is the product feature behind
    flockjay.com/share?linkId=..., including the link the Trust Center page uses to
    serve its own PDF. Payload not captured here (contains named individuals).

notes:
- >-
  token_endpoint_auth_methods_supported is ["none"], i.e. public clients only. Paired
  with mandatory PKCE and dynamic client registration, this is a correctly-shaped
  OAuth 2.1 public-client profile for agent use.
- >-
  The discovery document is served at BOTH /.well-known/openid-configuration and
  /.well-known/oauth-authorization-server with identical bytes, but scopes_supported
  does not include "openid" and there is no userinfo_endpoint — so it advertises
  OIDC-shaped metadata without being a usable OIDC provider. Recorded as a deviation,
  not as OIDC conformance.
- >-
  No API key scheme, no mTLS, no HMAC request signing was observed or documented.
- >-
  No public documentation of any of this exists. Flockjay publishes no auth guide,
  no developer portal, and no OpenAPI. An integrator can only learn this by probing
  the host, which is what API Evangelist did.

related:
  scopes: scopes/flockjay-scopes.yml
  well_known: well-known/flockjay-well-known.yml
  mcp: mcp/flockjay-mcp.yml
  conventions: conventions/flockjay-conventions.yml