PJM Interconnection · Authentication Profile

Pjm Authentication

Authentication

PJM Interconnection secures its APIs with apiKey, custom-session-token, mutualTLS, and none across 5 declared security schemes, as derived from its OpenAPI definitions.

EnergyUnited StatesEnergy MarketsElectricityGridSystem OperatorWholesale ElectricityTransmissionMarket DataDemand Response
Methods: apiKey, custom-session-token, mutualTLS, none Schemes: 5 OAuth flows: API key in: header, query

Security Schemes

DataMinerSubscriptionKey apiKey
· in: header (Ocp-Apim-Subscription-Key)
DataMinerSubscriptionKeyQuery apiKey
· in: query (subscription-key)
PJMSingleSignOnToken custom-session-token
· in: cookie (pjmauth)
PJMClientCertificate mutualTLS
PublicAnonymous none

Source

Authentication Profile

pjm-authentication.yml Raw ↑
generated: '2026-07-27'
method: searched
source: >-
  PJM Data Miner API Guide (v15, 02/10/2026), PJM Browserless Authentication Guide,
  PJM PKI-Based Authentication Guide, PJM OASIS API User Guide (Rev 04, 2023-01-27),
  plus anonymous probes of api.pjm.com, sso.pjm.com, apiportal.pjm.com and
  messages.pjm.com on 2026-07-27.
docs: https://www.pjm.com/markets-and-operations/etools/security.aspx
summary:
  types: [apiKey, custom-session-token, mutualTLS, none]
  api_key_in: [header, query]
  oauth2_flows: []
  openid_connect: false
  note: >-
    PJM publishes no OAuth 2.0 or OpenID Connect surface. GET
    https://sso.pjm.com/.well-known/openid-configuration returned HTTP 404 and
    https://www.pjm.com/.well-known/openid-configuration returned the pjm.com HTML
    shell (soft 404). Authentication is split three ways: an Azure API Management
    subscription key for Data Miner 2, a ForgeRock OpenAM session token (with an
    optional/required PKI client certificate) for the eTools surfaces, and fully
    anonymous access for the public Messages web service.
schemes:
- name: DataMinerSubscriptionKey
  type: apiKey
  in: header
  parameter: Ocp-Apim-Subscription-Key
  applies_to:
  - PJM Data Miner 2 API (https://api.pjm.com/api/v1)
  - PJM Data Miner 2 training API (https://api-train.pjm.com/api/v1)
  platform: Azure API Management
  cost: free
  provisioning: >-
    Requires a PJM Tools username provisioned for Data Miner. Member companies
    request access via PJM Account Manager > Account Access > Request Access > Data
    Miner API. Non-member companies email accountmanager@pjm.com with the statement
    "I confirm that the PJM Data will be used for internal business purposes only",
    their Account Manager user id and their subscribing email address. A Customer
    Account Manager approves; the key is then read from View Profile > Your
    Subscriptions.
  constraint: >-
    One subscription key is bound to one unique email address; unlike other PJM
    tools, no other user accounts may be tied to that email address (Data Miner FAQ).
    System accounts are allowed provided a valid email address is attached to the
    user id and the company CAM provisions it for traceability.
  source: https://www.pjm.com/-/media/DotCom/etools/data-miner-2/data-miner-2-api-guide.ashx
  verified: 'GET https://api.pjm.com/api/v1/gen_by_fuel returned HTTP 401 anonymously on 2026-07-27'
- name: DataMinerSubscriptionKeyQuery
  type: apiKey
  in: query
  parameter: subscription-key
  applies_to:
  - PJM Data Miner 2 API (https://api.pjm.com/api/v1)
  note: >-
    Same credential as the header form; the guide documents appending
    &subscription-key=<yourkey> to a request URL for browser/Excel/data-connection
    use.
  source: https://www.pjm.com/-/media/DotCom/etools/data-miner-2/data-miner-2-api-guide.ashx
- name: PJMSingleSignOnToken
  type: custom-session-token
  in: cookie
  parameter: pjmauth
  training_parameter: pjmauthtrain
  applies_to:
  - PJM OASIS Template API
  - PJM InSchedule Browserless API
  - PJM eDART Browserless API
  - other PJM eTools browserless interfaces
  platform: ForgeRock OpenAM
  flow: >-
    POST https://sso.pjm.com/access/authenticate/ with the headers X-OpenAM-Username
    and X-OpenAM-Password. The JSON response carries a tokenId, which is presented as
    the pjmauth cookie on subsequent tool API calls and released with POST
    https://sso.pjm.com/access/logout/.
  token_endpoint: https://sso.pjm.com/access/authenticate/
  revocation_endpoint: https://sso.pjm.com/access/logout/
  source: https://www.pjm.com/-/media/DotCom/etools/pjm-browserless-authentication-guide.pdf
  verified: 'GET https://sso.pjm.com/access/authenticate/ returned HTTP 405 Method Not Allowed on 2026-07-27, confirming the documented POST-only endpoint'
- name: PJMClientCertificate
  type: mutualTLS
  applies_to:
  - Custom-code REST clients against PJM eTools
  flow: >-
    Two-way TLS with a PJM-issued client certificate against the
    access/authenticate/pjmauthcert endpoint, presented alongside credentials to
    obtain the SSO token.
  source: https://www.pjm.com/-/media/DotCom/etools/security/pki-authentication-guide.pdf
- name: PublicAnonymous
  type: none
  applies_to:
  - PJM Messages Public Web Service (https://messages.pjm.com/messages/rest/public)
  - PJM OASIS public information page (https://pjmoasis.pjm.com/OASIS/PJM/INFO.HTM)
  note: >-
    The Messages public web service and the NAESB WEQ-002-4.5.2 mandated OASIS
    Online Resources posting are served with no credential of any kind.
  verified: 'GET https://messages.pjm.com/messages/rest/public/messages returned HTTP 200 anonymously on 2026-07-27'
transport:
  tls_minimum: TLS 1.2
  note: >-
    "In general, Tls1.2 is required for all PJM tools, including Data Miner." PJM
    retired TLS 1.0/1.1 from internet-facing applications in the April 2022 Data
    Miner release, and its security appliance began enforcing strict HTTP protocol
    rules on 2025-11-01 (an HTTP GET carrying a body is rejected).
  source: https://www.pjm.com/-/media/DotCom/etools/data-miner-2/data-miner-2-api-guide.ashx