This page is synced from each SDK’s customer-facing changelog (
CHANGELOG.public.md).TypeScript
2.21.2
- Fixed
protectStream()to send the request body shape the streaming evaluate endpoint expects: a single-itemitemsarray ({action_type, actor_id, context}). The API key is now sent in theAuthorizationheader and no longer in the request body. parseSseStream()now treats theevent: completeframe as end-of-stream, in addition toevent: done.parseSseStream()error frames now read theerror_codefield, falling back tocode.- Decision frames now prefer the
permit_tokenfield over the legacydecision_id.
2.21.1
- Fixed
evaluate()silently droppingevaluation_profile,override, andcompletion_proofsfrom the request. These fields are now sent when set. Callers not using them are unaffected.
2.21.0
- New
AtlaSentClient.explainAuthority({ principalId, requestedScope, resourceId? })read-only method. It returnspaths(each matching authority mechanism:direct_grant,delegation, orrole_capability) andunresolvedfindings. - New
client.authorityIntelligence.integrityAudit(query?)method, with an optionaldecisionWindowDaysoption (integer, 1–3650). Requires an API key with theauthority_intelligence:readscope. Adds thecountFindingsByClassification()helper andIntegrityReportand related types. EvaluateResponsegains optionalhumanApprovalRequiredandhumanApprovalStatusfields (not_required,pending,satisfied,rejected,expired,revoked). They areundefinedon runtimes that do not emit them.CrossOrgPermissionCheckResultgainstrust_precheck_passed,authorizes_execution(alwaysfalse),requires_local_authority_evaluation(alwaystrue), andconditions_evaluated. NewsummarizeTrustPrecheck()helper.- Deprecated:
allowedandsummarizeCrossOrgPermission()on cross-org permission checks, andCrossOrgPermissionCheckRequest.identity_id, which the server does not read. - Added
NO_EXECUTION_WINDOWandOUTSIDE_EXECUTION_WINDOWtoDENY_CODES. FixedcheckCrossOrgPermission()andlistCrossOrgPermissionChecks(), which called a path that returned 404. They now use/v1/federation/permission-check[s].
2.20.0
EvaluateRequestnow uses the canonicalactor_idandaction_typefield names.- Deprecated:
agentandactiononEvaluateRequest. They are still accepted as aliases and emit a one-timeconsole.warn. They will be removed in a future major release. The request sent over the wire is unchanged. - New
resolveEvaluateIdentity(input)helper resolves{ action_type, actor_id }from either the canonical or the legacy input shape.evaluate(),evaluatePreflight(), andprotectStream()all accept both shapes.
2.19.0
- New
client.clinicalTrialssub-client for the clinical trial unblinding gate. It provideslist,get, andhistory(requireclinical:read), plusblind,requestUnblind,emergencyUnblind, andverifyPermit(requireclinical:manage).
2.18.0
- New
AtlaSentClient.complianceControls({ framework?, from?, to? })method. It reads the compliance control catalog with a live enforcement status for each clause (enforced,partial,not_enforced,no_data,attested). Requires thecompliance:readscope. - New
AtlaSentClient.complianceEvidencePack({ framework, from?, to? })method. It fetches a signed compliance evidence pack for one framework. The returnedbundlecan be hashed offline againstsha256, andsignature,signingStatus, andkeyIdcarry the signing state.
2.17.0 — 2026-06-10
- New
client.smsOtpsub-client withsend()andverify()for one-time-passcode step-up authentication (break_glass,api_key_create,governance_hold_approve). It requires JWT session auth and does not accept API keys. - New
client.usageMeteringsub-client withlist()for paginated billable evaluation records andsummary()for usage aggregated by billing period. Requires theusage:readscope.
2.16.0 — 2026-06-04
- New optional
evaluation_profilefield (EvaluationProfile) onEvaluateRequestcontrols which evaluation layers run. Pass"basic"to skip snapshot enforcement. Unknown values fall back to"standard"on the server. - New optional
overridefield (EmergencyOverrideV1) onEvaluateRequestfor an emergency override that clears snapshot hard blocks. It is only evaluated whenevaluation_profileis"advanced"or"enterprise", andauthority_actor_idmust differ fromactor_id.
2.15.0 — 2026-06-04
- New
client.submitAssertion()submits a point-in-time fact from an external source (e.g. GitHub, Stripe, Slack) so that policy rules can gate on it during evaluation. It returnsassertion_id,payload_hash, andreused. Requires theassertions:writescope.
2.14.0 — 2026-06-03
- New optional
state_snapshotfield onEvaluateRequest. Action classes that require a state snapshot returndecision: "deny"withdeny_code: "SNAPSHOT_REQUIRED"when it is omitted. The snapshot is recorded in the audit chain alongside the permit.
2.13.0 — 2026-06-03
- New
client.getLicense()andclient.verifyLicense(blob)methods for self-hosted and air-gapped deployments, with newLicenseStatusandLicenseVerifyResulttypes. Avalid: falseverification result is returned, not thrown.
2.12.0 — 2026-05-28
- The SDK now includes a trust-root snapshot and a
TrustRootManagerthat refreshes it in the background every 4 hours.getGlobalTrustRootManager()returns a shared instance, andcheckExpiry()reports"ok","half_life", or"expired". verifyBundle()uses the global trust-root snapshot automatically when notrustRootoption is passed.- Breaking:
verifyAuditBundle()now throwsBundleVerificationErrorwhen the trust snapshot has expired, instead of returning{ verified: false }. PassallowExpiredSnapshot: trueto opt out, e.g. in air-gapped environments. - Revoked signing keys and keys with the wrong role are now rejected with
BundleVerificationError(reason: "key_revoked"or"key_role_mismatch"). Adds the"permit_signing_key_revoked"PermitOutcomeand theAtlaSentDeniedError.isSigningKeyRevokedgetter.
2.11.0 — 2026-05-27
- New sub-clients:
client.auth(refresh,refreshWithIdp,listIdpConnections),client.scim(SCIM 2.0 users and groups), andclient.evidenceBundles(create,get,download). - New exported
Decisiontype ("allow" | "deny" | "hold" | "escalate"),Permit.permitExpiresAt, andEvaluateResult.reasons(astring[]alongsidereason). - New
verifyEvidenceBundle(bundle)function verifies an evidence bundle offline. - Retries on transient errors now use full-jitter exponential back-off.
- The SDK now warns when it runs in a browser, because API keys should not be used client-side. Suppress the warning with
suppressBrowserWarning: true.
2.9.0 — 2026-05-25
AtlaSentDeniedErrornow carries anoutcomefield (PermitOutcome) with theisRevoked,isExpired,isConsumed, andisNotFoundpredicates. Also adds thenormalizePermitOutcome(raw)helper.protect()andprotectWithEvidence()now validate theactionformat before making a network call, and throwAtlaSentErrorwithcode: "bad_request"if it is invalid.- Evaluate responses now include a
riskEnvelopewith the composite risk score. Passexplain: trueto get the per-factor breakdown inriskEnvelope.factors.
2.8.0 — 2026-05-24
- New
client.replay({ evaluationId })re-evaluates a recorded decision against its originally pinned policy bundle. It reports variance kinds such asPOLICY_DRIFT,ENGINE_DRIFT, andBUNDLE_MISSINGwithout throwing.
2.7.0 — 2026-05-24
- New
client.replayDecision(decisionId)re-evaluates a recorded decision against its originally pinned policy bundle and engine version. It reports avarianceofNONE,DECISION_CHANGED, orENVELOPE_DRIFT. No permit is issued. The underlying endpoint is alpha, so its shapes may change.
Python
2.20.0
- Added the
AtlaSentClient.clinical_trialssub-client (ClinicalTrialsClient, in the newatlasent.clinical_clientmodule) for the clinical trial unblinding gate. - Read methods
list,get, andhistoryrequire theclinical:readscope. - Write methods
blind,request_unblind,emergency_unblind, andverify_permitrequire theclinical:managescope.
2.19.0
- Added clinical trial blinding and unblinding wire types in
atlasent.clinical:ClinicalTrialBlind,ClinicalUnblindingEvent,ClinicalBlindRequest,ClinicalBlindResponse,ClinicalUnblindRequest,ClinicalEmergencyRequest,ClinicalMutationResponse,ClinicalTrialListResponse,ClinicalTrialGetResponse, andClinicalHistoryResponse. - Added the
ClinicalBlindingStatusandClinicalUnblindingEventTypeliterals. - Added the helpers
is_unblinded()andlatest_unblinding_event(). - All of these are exported from the top-level
atlasentpackage.
2.18.0
- Added
AtlaSentClient.compliance_controls(*, framework=None, from_=None, to=None)and itsAsyncAtlaSentClientcounterpart. They read the compliance control catalog, with live enforcement status per regulatory clause (enforced,partial,not_enforced,no_data, orattested). Requires thecompliance:readscope. - Added
AtlaSentClient.compliance_evidence_pack(*, framework, from_=None, to=None)and its async counterpart, which fetch a signed compliance evidence pack for one framework. You can hash the returnedbundleoffline and compare it withsha256. Thesignature,signing_status, andkey_idfields report the signing state. - Added the result models
ComplianceControlsResult,ComplianceEvidencePackResult,ComplianceControl,ComplianceEvidenceControl,ComplianceEvidenceBundle,ComplianceSummary, andComplianceWindow, plus theComplianceControlStatusliteral.
2.17.0 — 2026-06-10
- Added
SmsOtpClient(atlasent.sms_otp) for SMS OTP step-up authentication, withsend()andverify()methods. It uses JWT session auth only, not API keys. Supportedaction_contextvalues are"break_glass","api_key_create", and"governance_hold_approve". - Added
UsageMeteringClient(atlasent.usage_metering) for listing billable evaluation records (list()) and fetching aggregated usage summaries (summary()). Requires theusage:readscope. - Both clients can be imported directly with
from atlasent import SmsOtpClient, UsageMeteringClient.
2.16.0 — 2026-06-04
- Added the optional
EvaluateRequest.evaluation_profilefield ("basic","standard","advanced", or"enterprise"). With"basic", snapshot enforcement is skipped, while policy, risk envelope, and audit still run. The server treats unknown values as"standard". - Added the optional
EvaluateRequest.overridefield for emergency overrides of snapshot hard blocks. It is only evaluated whenevaluation_profileis"advanced"or"enterprise". Theauthority_actor_idmust hold theoverride:executescope and must be different fromactor_id.
2.15.0 — 2026-06-03
- Added the optional
EvaluateRequest.state_snapshotfield for attaching a system state snapshot to evaluate calls. - The snapshot is required when the action class has
requires_state_snapshot=True. If you omit it for such a class, the call returnsdecision="deny"with the deny codeSNAPSHOT_REQUIRED.
2.14.0 — 2026-06-03
- Added
AtlaSentClient.get_license(), which returns aLicenseStatusfor self-hosted and air-gapped deployments. It reportsstatus,org_slug,posture,expires_at,grace_until,features, and the capacity limitseval_limitandseat_limit. - Added
AtlaSentClient.verify_license(blob), which returns aLicenseVerifyResult. A result withvalid=Falseis returned rather than raised. LicenseStatusandLicenseVerifyResultare exported from the top-levelatlasentpackage.
2.13.0 — 2026-05-28
- Added
TrustRootManager(atlasent.trust_root). It loads a bundled trust-root snapshot at startup and refreshes it in the background fromhttps://keys.atlasent.io/.well-known/every 4 hours.get_global_trust_root_manager()returns the process-wide instance, andcheck_expiry()returns"ok","half_life", or"expired". verify_bundle()now uses the global trust-root snapshot automatically when you don’t pass atrust_rootargument.- Added the
BundleVerificationErrorexception, the"permit_signing_key_revoked"value forPermitOutcome, and theAtlaSentDeniedError.is_signing_key_revokedproperty. - Breaking:
verify_audit_bundle()now raisesBundleVerificationErroron trust failures instead of returning a falsy result. In air-gapped environments, passallow_expired_snapshot=Trueto opt out of expiry enforcement.
2.12.0 — 2026-05-28
- Added the
client.ssosub-client (SsoClient) for managing SSO connections, JIT rules, SSO enforcement (enforce), and readiness status (get_status). - Added the
client.access_governance_logsub-client (AccessGovernanceLogClient), whose paginatedlist()acceptslimit,cursor,event_type,actor_id,from_, andtofilters. - Added the
client.evidence_bundlessub-client (EvidenceBundlesClient) withlist,create,get, anddownloadmethods. - Added the read-only
client.api_keyandclient.base_urlproperties onAtlaSentClient.
2.11.0 — 2026-05-27
- Added the
atlasent.authmodule withrefresh_token(),refresh_with_idp(), andlist_idp_connections(). - Added the
atlasent.scim_clientmodule (ScimClient, with.usersand.groupssub-clients) for SCIM 2.0 provisioning. - Added the
atlasent.evidence_bundlemodule withcreate_evidence_bundle(),get_evidence_bundle(), anddownload_evidence_bundle(). - Added
verify_evidence_bundle()andEvidenceVerificationResult(inatlasent.replay) for verifying evidence bundles offline, without a call to the backend. - Added the
DecisionValuetype alias,Permit.permit_expires_at, andEvaluateResult.reasons. When the server returns only a singlereason,reasonsholds it as a one-element list.
2.7.0 — 2026-05-24
- Added
EvaluateResult.risk_envelope(EvaluateRiskEnvelope) withweighted_score,engine_decision,envelope_decision,promoted,hard_blocks, andfactors. It isNoneon responses from older servers. - Added
EvaluateRequest.explain. Set it toTrueto have the server populaterisk_envelope.factorswithEvaluateRiskEnvelopeFactorentries. EvaluateRiskEnvelopeandEvaluateRiskEnvelopeFactorare exported fromatlasent.
2.6.0 — 2026-05-24
- Added
AtlaSentClient.replay(*, evaluation_id), which re-evaluates a recorded decision against its originally pinned policy bundle and engine version. Replay writes no audit record and mints no permit. - Added the
ReplayResponsemodel and theReplayVarianceKindliteral (NONE,DECISION_CHANGED,ENVELOPE_DRIFT,POLICY_DRIFT,CHAIN_TAMPER,ENGINE_DRIFT, andBUNDLE_MISSING). - Fixed an
ImportErrorwhen importingatlasent.async_client.
2.5.0 — 2026-05-22
- Added read methods for advisory governance agents on
AtlaSentClientandAsyncAtlaSentClient:list_governance_agents(),list_governance_findings(*, change_id, agent_slug=None), andlist_governance_evaluations(*, change_id, agent_slug=None). - Added the
GovernanceAgent,GovernanceAgentFinding,GovernanceAgentEvaluation, andAgentEvidenceRefmodels, plus thehighest_agent_finding_severity()helper.
2.4.0 — 2026-05-14
- Added the
PRODUCTION_DEPLOY_ACTIONconstant ("production.deploy"), the canonical Deploy Gate action. - Examples and docstrings now use
"production.deploy". The legacy"deployment.production"action string still works.
2.2.0 — 2026-05-05
- Added identity assertion models:
IdentityAssertionV1,IdentityAssertionBinding,IdentityIssuer,IdentitySubject,IdentityIssuerKey, andIdentityTrustedIssuersConfig. ApprovalArtifactV1gained an optionalidentity_assertionfield. The server requires it whenever human approval is required.
2.1.0 — 2026-05-05
- Added approval artifact models, including
ApprovalArtifactV1,ApprovalReference, andPermitApprovalBinding. evaluate()gained theresource_id,amount,approval, andrequire_approvalkeyword arguments, andverify()gainedrequire_approval.- Added
EvaluateResult.permit_approval,VerifyResult.consumed, andVerifyResult.approval. IfconsumedisTrueon anAPPROVAL_LINKAGE_MISSINGresult, the permit has been used up, so don’t retry.
2.0.0 — 2026-04-30
- Breaking: The SDK now sends the canonical wire format (
action_type,actor_id,context) and no longer includesapi_keyin request bodies. This requires an AtlaSent API deployment that accepts the canonical format. - Breaking:
EvaluateResult.decisionis now a string ("allow","deny","hold", or"escalate") instead of abool. The boolean is still available asresult.permitted. - Added canonical result attributes:
permit_token,request_id,expires_at, anddenialonEvaluateResult, andvalid,outcome, andverify_error_codeonVerifyResult. Legacy result attributes are still populated. BuildingEvaluateRequestorVerifyRequestwith the legacy keyword names still works but emits aDeprecationWarning.