JCAM

Integration for the Joint Cybersecurity Authorization Management (JCAM)

Reference: DoJ JCAM

Overview

The JCAM integration connects RegScale to the Department of Justice's JCAM GRC tool (formerly CSAM). It brings System Security Plan content, control implementations, POA&Ms, assessments, and artifacts out of JCAM and into RegScale, and can push a limited set of updates back.

DirectionCommandsWhat moves
JCAM → RegScaleimport_*System front matter, privacy, authorization, continuity, POCs, information types, interconnections, FISMA rollups, control implementations, POA&Ms, assessments, artifacts
RegScale → JCAMexport_*System front matter, authorization record, POA&Ms

The export_* commands overwrite data in JCAM. There is no conflict resolution between the two systems. Decide which system is authoritative for each data domain before enabling exports, and read Exporting to JCAM first.

The CSAM → JCAM rename

DoJ renamed the product from CSAM to JCAM. The CLI accommodates both spellings:

ItemCurrentStill accepted
Command groupregscale jcamregscale csam (hidden, logs a deprecation warning)
Config keysjcamToken, jcamURL, jcamFilter, …csamToken, csamURL, csamFilter, … (warns once per key)
Connection testregscale jcam test_jcamregscale jcam test_csam
SSP custom fieldJCAM IdCSAM Id (used automatically if JCAM Id does not exist)
API base path/CSAM/api— the served route genuinely did not change

Migrate to the jcam* spellings when convenient; nothing breaks in the meantime.


Prerequisites

  1. RegScale CLI installed and initialized (regscale init)
  2. A JCAM API token with the access described in Access & Permission Requirements
  3. Your JCAM host URL — e.g. https://jcam.example.gov
  4. Network access from the CLI host to the JCAM host over HTTPS (see Network access)
  5. RegScale custom fields created — see below. This is a hard prerequisite.
  6. NIST 800-53 Rev 4 and/or Rev 5 catalogs loaded in RegScale, for import_controls

Required RegScale custom fields

The integration stores JCAM-specific data in Security Plan custom fields. The CLI does not create these for you — if a field is missing, the command logs the missing field names and you must add them in RegScale before re-running.

The most important one is the linkage field:

TabFieldTypePurpose
Basic InfoJCAM IdtextLinks a RegScale SSP to its JCAM system. Without this field populated, no system can be matched.

The full field set, by tab:

Basic Info
acronym (text), FISMA Id (text), JCAM Id (text), Sub Organization (text), Classification (select: Sensitive But Unclassified, Unclassified, Secret, Top Secret), Contractor System (select: Yes/No), FISMA Reportable (select: Yes/No), Critical Infrastructure (select: Yes/No), Mission Essential (select: Yes/No)

Agency Defined Data Items (new tab)
HVA Identifier (text), CFO Designation (Yes/No), AI-ML Components (select: None, Generative AI, Machine Learning), IOT-OT (select), External Web Interface (Yes/No), Law Enforcement Sensitive (Yes/No)

Financial Info (new tab)
Financial System (Yes/No), omb Exhibit (text), uii Code (text), Investment Name (text), Portfolio (text), Prior Fy Funding (dollar), Current Fy Funding (dollar), Next Fy Funding (dollar), Funding Import Status (text)

Status and Archive (new tab)
Risk Assessment Completed, Risk Assessment Next Due Date, Risk Assessment Expiration Date, SSP Completed, SSP Next Due Date, CM Completed, CM Next Due Date

Recovery Targets and Outcomes (new tab)
MTD (text), RTO (text), RPO (text)

Privacy Info (new tab)
PIA Date (date), PII (text), PTA Date (date), SORN Date (date), SORN Status (text), SORN Id (text)

Authorization (new tab)
Authorization Process (text), Initial Authorization Date (date), ATO Date (date), Authorization Next Due Date (date)

Continuity and Incident Response (new tab)
BIA Completed, BIA Next Due Date, CP Completed, CP Next Due Date, CP Training Completed, CP Training Next Due Date, CP Test Next Due Date, IRP Completed, IRP Next Due Date, IRP Training Completed, IRP Training Due Date, IRP Test Next Due Date, CPR Completed, CPR Next Due Date, CPR Expiration Date, Doc Review Completed, Doc Review Next Due Date, Doc Review Expiration Date (all date)

Continuity Tests (new tab)
CP Test Type (select: TableTop, Functional, Real-world, Call Tree), CP Date Tested (date), CP Test Outcome (select: Success, Failure), CP RPO Achieved (text), CP RTO Achieved (text), and the matching IRP * fields

Points of Contact (new tab) — all of type user
Certifying Official, Risk Executive, Co Authorizing Official, Chief Information Security Officer, Senior Information Security Officer, Alternate Information System Security Manager, Alternate Information System Security Officer, Senior Information Systems Security Officer, Technical Advisor, Technical Lead

Interconnection and Issue records use additional fields — Active and Classification on interconnections; External, Protection, Transfer Method on connections; User Identified Criticality and Delay - Dependency Reason on issues.

Tip: create the Basic Info fields first and run import_ssp. The command reports exactly which fields are missing, so you can add the remaining tabs iteratively rather than building all of them up front.


Access & Permission Requirements

JCAM credentials

ItemWhere it comes fromNotes
API tokenIssued by your JCAM administratorA bearer token. Store as jcamToken. The CLI adds the Bearer prefix if you omit it.
JCAM URLYour JCAM host, e.g. https://jcam.example.govHost only. Store as jcamURL.
Base pathDefaults to /CSAM/apiOverride with jcamBasePath only if your tenant is on a renamed route.

JCAM tokens carry the permissions of the account they were issued for, and JCAM enforces per-system authorization. The token only ever sees the systems its underlying account is authorized for — which is also your primary scoping control.

Request the token against a dedicated service account rather than a named person, so the integration's access is independently auditable and survives staff changes.

Choosing a permission level

The decision is whether RegScale should be able to write to JCAM.

Import-only (recommended starting point)

Request a read-only token. Every import_* command and test_jcam work; every export_* command fails safely at the JCAM API rather than depending on an operator remembering not to run it.

Grant read access to:

  • System inventory and system detail for the systems in scope
  • Control implementations and inherited/common controls
  • POA&Ms, including their control and milestone sub-records
  • Control assessments
  • Artifacts, including artifact file download
  • The two reports listed in the endpoint table below — JCAM's System_Implementation_Statements_Query and Common Control Inheritance Report. Report execution is often a separate permission from system read; confirm it explicitly.

Export-enabled

Only needed if RegScale is authoritative for system front matter, the authorization record, or POA&Ms. Requires an ISSO / ISSM-level role able to update systems and create POA&Ms — write access to:

  • System front matter (update)
  • Security authorization record (update)
  • POA&Ms (create)

Recommendation: if you only intend to import, use a read-only token. Permissions are a stronger guardrail than process.

System scope

The CLI reads the full system list the token can see, then narrows it locally using the jcamFilter in init.yaml. Filtering happens client-side, so a broadly authorized token still retrieves everything before filtering. If least privilege matters for your deployment, scope the token's authorization to the intended systems as well.

API endpoints used

All paths are relative to <jcamURL>/CSAM/api.

Read — test_jcam and the import_* commands

EndpointMethodEffectRequired by
v1/componentsGETRead (connectivity probe only)test_jcam
v1/systemsGETRead — system inventory, filtered locally by jcamFilterEvery import_* / export_* command; this builds the run scope
v1/systems/{id}GETRead — system front matterimport_ssp, export_ssp (drift check)
v1/systems/{id}/statusGETReadimport_ssp
v1/systems/{id}/additionalstatusGETReadimport_ssp
v1/systems/{id}/agencydefineddataitemsGETReadimport_ssp
v1/systems/{id}/securityauthorizationGETReadimport_ssp, export_ssp
v1/systems/{id}/privacyGETReadimport_ssp
v1/systems/{id}/sornGETReadimport_ssp
v1/systems/{id}/continuityresponseGETReadimport_ssp
v1/systems/{id}/continuitytestGETReadimport_ssp
v1/systems/{id}/systempointsofcontactGETReadimport_ssp
v1/systems/{id}/infotypesGETReadimport_ssp
v1/systems/{id}/interconnectionsGETReadimport_ssp
v1/systems/{id}/FISMArollupGETReadimport_ssp
v1/systems/{id}/controls/AC-1GETRead — probe to detect Rev 4 vs Rev 5import_controls
v1/systems/{id}/controls/{control_id}GETRead — control implementationimport_controls
v1/systems/{id}/inheritedcontrolsGETReadimport_controls
v1/reports/System_Implementation_Statements_QueryPOSTRead — report executionimport_controls
v1/reports/Common Control Inheritance ReportPOSTRead — report executionimport_controls
v1/systems/{id}/poamsGETReadimport_poam, export_poams (duplicate detection)
v1/systems/{id}/poams/{poam_id}/controlsGETReadimport_poam
v1/systems/{id}/poams/{poam_id}/milestonesGETReadimport_poam
v1/systems/{id}/controls/{control_id}/assessmentsGETReadimport_assessments
v1/systems/{id}/artifactsGETRead — artifact metadataimport_artifacts
v1/artifacts/{artifact_id}GETRead — file downloadimport_artifacts

POST on the two report paths is a read. JCAM takes report query criteria in the request body; those calls execute a report and return rows. They do not create or modify records.

Write — export_* commands only

EndpointMethodEffectRequired by
v1/systems/{id}PUTWrite — overwrites JCAM system front matterexport_ssp
v1/systems/{id}/securityauthorizationPUTWrite — overwrites the JCAM authorization recordexport_ssp
v1/systems/{id}/poamsPOSTWrite — creates POA&Ms in JCAMexport_poams

Network access

FromToProtocol / Port
Host running the RegScale CLIJCAM hostHTTPS / TCP 443

JCAM typically runs on restricted government infrastructure. Expect to coordinate one or more of the following with your network and JCAM teams:

  • Allow-listing the CLI host's egress IP on the JCAM side
  • Access from inside a government network or over VPN
  • An outbound proxy allowance for the JCAM hostname
  • Trust for an internal certificate authority on the CLI host

TLS verification follows the CLI's sslVerify setting and is on by default. Install your internal CA in the CLI host's trust store rather than disabling verification.

The CLI keeps a pooled HTTP/2 connection with a 60-second request timeout and retries transient failures (408, 429, 500, 502, 503, 504) up to five times. Some JCAM report endpoints are slow by design; a report that consistently times out is a JCAM performance matter, not a permissions one.

RegScale-side access

The RegScale account whose token is in init.yaml must be able to:

  • Read and create Security Plansimport_ssp creates a plan for any in-scope JCAM system that has no matching JCAM Id
  • Update Security Plans — front matter, categorization, status, deployment model
  • Read and write Custom Fields / Form Field Values on Security Plans
  • Read Catalogs and Security Controls — for Rev 4 / Rev 5 control matching
  • Create and update Control Implementations
  • Create and update Issues (POA&Ms) and their milestones
  • Create Assessments
  • Create Files and upload attachments (artifacts)
  • Read Users — for Points of Contact mapping
  • Create Interconnections and parent/child plan relationships

export_* additionally requires read access to whatever RegScale data is being pushed; it does not need any additional RegScale write permission.


Configuration

Add the JCAM keys to init.yaml:

jcamToken: "Bearer AAAA...."
jcamURL: "https://jcam.example.gov"
jcamBasePath: "/CSAM/api"

jcamFilter:
  organization: MGMT
  systemType: Major Application, General Support Service
  operationalStatus: Operational

jcamArtifactTypes:
  - Security Authorization
  - Business Impact Analysis
  - Contingency Plan

jcamAgencyDefinedDataItems:
  AI/ML Components: AI-ML Components

jcamFrameworkCatalog:
  800-53r5: 12
  800-53r4: 9

Configuration reference

KeyTypeDescription
jcamTokenstringJCAM bearer token. The Bearer prefix is optional.
jcamURLstringJCAM host URL
jcamBasePathstringAPI base path. Defaults to /CSAM/api — leave it alone unless your tenant differs.
jcamFilterdictSelects which JCAM systems are in scope. Required in practice.
jcamArtifactTypeslistJCAM artifact-type labels to import. Case-sensitive; must match JCAM exactly.
jcamAgencyDefinedDataItemsdictMaps a JCAM agency-defined data item name to the RegScale custom field that receives it
jcamFrameworkCatalogdictMaps 800-53r5 / 800-53r4 to the RegScale catalog IDs to match controls against
sslVerifybooleanGlobal CLI setting; also governs the JCAM connection

jcamFilter

Filtering is AND across keys, OR within a comma-separated value. The example above selects systems in the MGMT organization and of type Major Application or General Support Service and with operational status Operational.

Valid filter keys:

id, name, acronym, organization, systemType, financialSystem, classification, contractorSystem, fismaReportable, criticalInfrastructure, missionCritical, uiiCode, portfolio, categorization, fundingStatus, operationalStatus

If no systems match, the command stops with No results match filter in JCAM rather than proceeding against an empty scope.

jcamFrameworkCatalog

Use the lowercase keys 800-53r5 and 800-53r4. If the setting is absent, the CLI looks the two NIST catalogs up by their built-in identifiers — which works only if those catalogs are loaded in your RegScale instance.


CLI Commands

regscale jcam test_jcam            # Verify connectivity and credentials
regscale jcam import_ssp           # Import system records and all front-matter domains
regscale jcam import_controls      # Import control implementations and inheritance
regscale jcam import_poam          # Import POA&Ms, their controls and milestones
regscale jcam import_assessments   # Import control assessments
regscale jcam import_artifacts     # Import and attach artifact files
regscale jcam export_ssp           # Push front matter + authorization to JCAM (OVERWRITES)
regscale jcam export_poams         # Push POA&Ms to JCAM (OVERWRITES)

Command names accept underscores or hyphens — import_ssp and import-ssp are equivalent.

None of these commands take a Security Plan ID. Scope always comes from jcamFilter plus the JCAM Id values already stored on your RegScale plans. To narrow a run to one system, narrow the filter:

jcamFilter:
  id: "1234"

export_controls and export_assessment are registered but not yet implemented; they exit with Future Feature.


test_jcam

Probes the JCAM API and reports the outcome. It validates the token, URL, base path, network path, and TLS trust. It does not validate jcamFilter.

regscale jcam test_jcam

import_ssp

The workhorse command. For each JCAM system matching jcamFilter:

  1. Creates a RegScale Security Plan if no plan carries that JCAM Id, otherwise updates the existing one
  2. Saves system front matter — name, categorization, status, type, purpose
  3. Imports agency-defined data items, per jcamAgencyDefinedDataItems
  4. Imports the authorization process and status
  5. Imports privacy data (PTA, PIA, PII, SORN)
  6. Imports continuity and incident-response data, including test records
  7. Imports Points of Contact, matched to RegScale users
  8. Imports additional status and information types
  9. Imports interconnections
  10. Imports FISMA parent/child rollups
regscale jcam import_ssp

Each domain is reported separately at the end of the run. A domain that failed is reported as a failure and the command exits nonzero — a partial run cannot be mistaken for a clean sync. A domain with nothing to import is reported as skipped, which is normal (many systems have no SORN, for example).

Run this first: the other import commands rely on the JCAM Id linkage it establishes.


import_controls

Imports control implementations for every in-scope system, plus inherited and common controls.

regscale jcam import_controls

The command probes AC-1 to determine whether the system is on NIST 800-53 Rev 4 or Rev 5, then matches JCAM controls against the corresponding RegScale catalog. A system on any other framework is skipped with a warning.

Requires the relevant catalog to be loaded in RegScale and, ideally, jcamFrameworkCatalog to be set.

Implementation statements come from a JCAM report endpoint. Reports can be slow — allow the command time to complete rather than interrupting it.


import_poam

Imports POA&Ms as RegScale Issues, including their associated controls and milestones.

regscale jcam import_poam

import_assessments

Imports control assessments from JCAM as RegScale Assessments, linked to the control they assess.

regscale jcam import_assessments

import_artifacts

Downloads artifact files from JCAM and attaches them to the corresponding RegScale Security Plan.

regscale jcam import_artifacts

Only artifact types listed in jcamArtifactTypes are imported. The labels are case-sensitive and must match JCAM's artifactType values exactly. If none are configured, the command stops with No artifacts types configured to be imported.

Already-attached files are detected and not re-downloaded.


Exporting to JCAM

⚠️ Exports overwrite JCAM data

export_ssp and export_poams write into JCAM. There is no conflict resolution — if JCAM has been edited since your last import, those edits can be lost.

Both commands:

  1. Prompt for confirmation before doing anything. Pass --yes to skip the prompt in automation — only after you have validated a manual run.
  2. Run pre-flight drift detection. Before writing, the CLI compares the current JCAM record against what it is about to send. If a write would replace a non-empty JCAM value with a different one, the command reports the affected fields and stops.
  3. Honor --force to write anyway. Drift detection is deliberately conservative and will occasionally flag a harmless change (a date moving by one day); --force is the override.

export_ssp

Pushes system front matter and the security authorization record from RegScale to JCAM.

regscale jcam export_ssp                 # prompts, stops on drift
regscale jcam export_ssp --force         # prompts, overwrites drifted fields
regscale jcam export_ssp --yes --force   # unattended overwrite — be certain
OptionEffect
--yesSkip the overwrite confirmation prompt
--forceBypass drift detection and overwrite JCAM values that differ

export_poams

Pushes POA&Ms from RegScale to JCAM.

regscale jcam export_poams
OptionEffect
--yesSkip the overwrite confirmation prompt
--forceBypass duplicate-title detection and POST every POA&M to JCAM

Without --force, POA&Ms whose title already exists in JCAM are treated as duplicates and skipped. --force will create duplicates — use it only when you know the existing JCAM records should be superseded.

Recommended practice

Run regscale jcam import_ssp immediately before any export. That way you know what is in JCAM, and drift detection compares against current data rather than a stale picture.


Recommended rollout

  1. Create the Basic Info custom fields, especially JCAM Id
  2. regscale jcam test_jcam — prove credentials, network, and TLS
  3. Set jcamFilter to a single system (id: "<one system>")
  4. regscale jcam import_ssp — add any custom fields it reports as missing, then re-run
  5. Add import_controls, import_poam, import_assessments, import_artifacts one at a time, reviewing results after each
  6. Widen jcamFilter to the full intended scope
  7. Schedule the imports; leave exports disabled unless RegScale is the authoritative source

Troubleshooting

SymptomLikely causeResolution
Failure to retrieve plans from JCAMBad or expired token, wrong URL, wrong base path, or no network pathRun test_jcam; confirm jcamToken, jcamURL, jcamBasePath
No results match filter in JCAMjcamFilter matches nothing, or the token is not authorized for those systemsCheck filter values against the systems the account can see in the JCAM UI
The following custom fields are missing: [...]Required RegScale custom fields not createdAdd the listed fields on the named tab, then re-run
Nothing imports even though systems matchedRegScale plans have no JCAM Id populatedRun import_ssp first; it creates plans and establishes the linkage
Warning about the legacy CSAM Id fieldTenant predates the renameWorking as intended. Rename the field to JCAM Id when convenient.
Warning that a csam* config key is deprecatedinit.yaml still uses pre-rename keysWorking as intended. Rename to the jcam* spelling.
A domain reports "skipped" for most systemsJCAM has no data for that domain on those systemsUsually normal — confirm in the JCAM UI
A domain reports "failure" and the command exits nonzeroAPI or authorization error on that endpointCheck the run summary for the specific message; often a missing read permission on one endpoint
import_controls says the framework is unsupportedSystem is on neither 800-53 Rev 4 nor Rev 5Not currently supported
import_controls produces no implementationsCatalog not loaded, or jcamFrameworkCatalog points at the wrong catalog IDLoad the NIST catalog and set jcamFrameworkCatalog with lowercase 800-53r5 / 800-53r4 keys
No artifacts types configured to be importedjcamArtifactTypes unset or still the placeholderSet it to the exact, case-sensitive JCAM artifact-type labels
Report-backed imports time outJCAM report endpoints are slow under loadRetry off-peak; raise with your JCAM administrators if persistent
Export stops reporting driftJCAM holds different non-empty values than RegScaleImport first and review. Use --force only when RegScale is authoritative.
Export fails with an authorization errorToken is read-onlyExpected on an import-only deployment. Request write access only if you intend to export.


Did this page help you?