CaseForge Platform API
Enterprise REST API for case management, compliance workflows, policy automation, and graph analytics. Integrate alerts, manage investigations, and automate compliance operations at scale.
Authentication
CaseForge uses session-based authentication with CSRF protection. To authenticate, send a POST request with your credentials to the login endpoint. On success, the server returns a session cookie and a CSRF token in the response headers. Include both on all subsequent requests.
All API requests must be made over HTTPS. Calls made over plain HTTP will be rejected. API requests without authentication will return 401 Unauthorized.
For service-to-service integrations, use API key authentication by including your key in the X-API-Key header. API keys can be created in Administration → API Keys.
+ CSRF Token
on Every Request
curl -X POST https://acme.caseforge.io/api/v1/auth/login \ -H "Content-Type: application/json" \ -d '{"username": "analyst@acme.com", "password": "••••••••"}' \ -c cookies.txt # Save session cookie # Use session cookie + CSRF token on subsequent requests: curl https://acme.caseforge.io/api/v1/work-items/WI-20250001 \ -b cookies.txt \ -H "X-CSRF-Token: <token-from-login-response>"
Error Handling
CaseForge returns standard HTTP status codes. Errors include a structured JSON body with a machine-readable code, a human-readable message, and a request_id for support ticket reference.
{
"error": {
"type": "validation_error",
"code": "missing_required_field",
"message": "The 'workItemTypeIdentifier' field is required.",
"param": "workItemTypeIdentifier",
"request_id": "req_8xK9mRtL3vN2"
}
}HTTP Status Codes
Rate Limits
Rate limits are enforced per authenticated session. When exceeded, subsequent requests return 429 Too Many Requests. Check the Retry-After header for wait time in seconds. Bulk operations (ingest, export) have separate, lower limits.
10 concurrent sessions
50 concurrent sessions
Max 200 items per request
Rate limit headers are included in every response: X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset. Monitor these proactively.
Pagination
List endpoints support offset-based pagination with startIndex and maxNumOfRows query parameters. Responses include a rowLimitExceeded flag indicating whether additional pages are available. The default page size is 20 and the maximum is 200.
// First page GET /api/v1/work-items?maxNumOfRows=50&startIndex=0 // Next page GET /api/v1/work-items?maxNumOfRows=50&startIndex=50 // Check response: "rowLimitExceeded": true → more pages available
Data Querying (DDQ) endpoints additionally support a timeoutInSeconds parameter. Results are capped at the configured maximum result set size (default: 10 MB).
Permissions & Licensing
Most endpoints require specific permissions and/or active license modules. If a required permission is missing, the API returns 403 Forbidden. If a required license is missing, you'll receive 402 Payment Required. This documentation marks required permissions and licenses on each endpoint.
Common permission categories include: Execute Web Services Work Item View Work Item Edit Policy Manager Graph Analytics Self Services
Session Authentication
Authenticates a user with explicit username and password. On success, creates a user session and returns a session cookie and a CSRF token in the response headers. Both must be included in all subsequent requests.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
| username | string | Required | The login name or email address of the user. |
| password | string | Required | The user's password. Transmitted securely over HTTPS. |
Request
curl -X POST https://acme.caseforge.io/api/v1/auth/login \ -H "Content-Type: application/json" \ -d '{"username": "analyst@acme.com", "password": "s3cur3P@ss"}'
Response Headers
Set-Cookie: CFSESSION=abc123xyz...; Path=/; Secure; HttpOnly; SameSite=Strict X-CSRF-Token: f7d2a9c1-4e8b-4f3a-a6d1-9e7c2b8f0d4e
Status Codes
Ends the current user session and invalidates the session cookie. After logout, the client must re-authenticate to make further API calls. No request body is required.
Sessions automatically expire after 30 minutes of inactivity (configurable). Explicit logout is recommended to free server resources.
Changes a user's password before login. This is typically used for password reset flows or first-time login scenarios where the user must set a new password.
Admin Util — Change Password
| Parameter | Type | Required | Description |
|---|---|---|---|
| loginName | string | Required | Login name of the user to change the password for. |
| oldPassword | string | Required | Current password for verification. |
| newPassword | string | Required | New password. Must meet complexity requirements configured in system settings. |
Work Items
Work items are the core objects in CaseForge — representing alerts, cases, SARs, and investigation records. Each work item has a type, a workflow lifecycle, custom fields, relations to other items, and a full audit trail.
Creates a new work item (alert, case, or entity) of the specified type. The work item is initialized in the first workflow step with default field values. Custom field values can be provided at creation time.
Execute Web Services Create Work Item
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
| alertName | string | Required | Display name for the work item. Max 255 characters. |
| alertTypeIdentifier | string | Required | The identifier of the work item type (e.g., SAR, ALERT, CASE). |
| alertTypeVersion | string | Optional | Version of the work item type. Defaults to latest version. |
| score | string | Optional | Risk score. Numeric string value. |
| priorityIdentifier | string | Optional | Priority level: high, medium, low. |
| ownerIdentifier | string | Optional | User identifier of the assigned owner. |
| buIdentifier | string | Optional | Business unit identifier for multi-tenant isolation. |
| content | string | Optional | XML or JSON payload containing the work item's source data. |
| customFields | array | Optional | Array of {identifier, value} objects for setting custom field values. |
| reasons | array | Optional | Array of reason codes explaining why this work item was generated. |
Request
curl -X POST https://acme.caseforge.io/api/v1/work-items \ -H "Content-Type: application/json" \ -H "X-CSRF-Token: f7d2a9c1-..." \ -b cookies.txt \ -d '{ "alertName": "Suspicious Wire Transfer — $250,000", "alertTypeIdentifier": "SAR", "score": "87", "priorityIdentifier": "high", "ownerIdentifier": "analyst_jsmith", "customFields": [ {"identifier": "Transaction_Amount", "value": "250000"}, {"identifier": "Originator_Country", "value": "US"} ], "reasons": [ {"identifier": "velocity_check", "name": "Velocity threshold exceeded"}, {"identifier": "geo_risk", "name": "High-risk geography"} ] }'
Response
{
"status": true,
"workItemIdentifier": "WI-20250227-0042",
"message": "Work item created successfully"
}Retrieves the full details of an existing work item including all field values, current workflow state, assigned owner, audit history, and related entities.
Work Item View
| Parameter | Type | Required | Description |
|---|---|---|---|
| workItemId | string | Required | Unique identifier of the work item, e.g. WI-20250227-0042 |
{
"alertIdentifier": "WI-20250227-0042",
"alertName": "Suspicious Wire Transfer — $250,000",
"alertTypeIdentifier": "SAR",
"alertDate": "2025-02-27 14:32:07",
"state": "Open",
"statusIdentifier": "UNDER_REVIEW",
"score": "87",
"priorityIdentifier": "high",
"ownerIdentifier": "analyst_jsmith",
"buIdentifier": "compliance_us",
"customFields": [
{"identifier": "Transaction_Amount", "value": "250000"},
{"identifier": "Originator_Country", "value": "US"}
],
"reasons": [
{"identifier": "velocity_check", "name": "Velocity threshold exceeded"}
],
"lastUpdateDate": "2025-02-27 15:10:44",
"lastUpdateUserIdentifier": "analyst_jsmith"
}Updates one or more fields on an existing work item. Only the fields provided in the request body are modified — omitted fields retain their current values. Fields restricted by the current workflow step cannot be updated.
Work Item Edit
Some fields are read-only in certain workflow steps. Attempting to modify a restricted field returns 422 Unprocessable Entity with the specific field listed in the error response.
Searches work items using a flexible filter object. Supports filtering by type, status, owner, date range, custom field values, and full-text search on the work item content. Results are paginated.
Work Item View
| Parameter | Type | Required | Description |
|---|---|---|---|
| workItemTypeIdentifier | string | Optional | Filter by work item type. |
| statusIdentifier | string | Optional | Filter by current workflow status. |
| ownerIdentifier | string | Optional | Filter by assigned owner. |
| dateFrom | string | Optional | Start date filter (ISO 8601). Format: yyyy-MM-dd HH:mm:ss |
| dateTo | string | Optional | End date filter (ISO 8601). |
| maxNumOfRows | integer | Optional | Page size (1–200). Default: 20. |
| startIndex | integer | Optional | Zero-based offset for pagination. |
Changes the workflow step (status) of a work item. The target step must be a valid next step from the current position in the workflow. The response includes the list of permitted actions, any unresolved mandatory tasks, and available next steps.
Work Item Edit Change Workflow Step
| Parameter | Type | Required | Description |
|---|---|---|---|
| targetStepIdentifier | string | Required | Identifier of the target workflow step to transition to. |
| comment | string | Optional | Audit comment for the transition. Max 4,000 characters. |
All mandatory tasks for the current workflow step must be completed before transitioning. If unresolved tasks exist, the API returns 422 with the list of blocking tasks in unresolvedMandatoryTasks.
Data Ingestion
Ingests a work item from an external source system using a pre-defined field mapping. The API maps incoming JSON fields to the corresponding platform fields, validates data types, and creates the work item with all associated entities in a single atomic operation.
Execute Web Services Easy Ingest
Mapping definitions must be created first via the Save Mapping endpoint. The mapping name specified in the request must match an existing mapping for the target work item type.
| Parameter | Type | Required | Description |
|---|---|---|---|
| mappingName | string | Required | Name of the pre-defined field mapping to apply. |
| workItemTypeIdentifier | string | Required | Target work item type for the ingested data. |
| payload | object | Required | JSON payload containing the source data. Structure must match the mapping definition. |
Saves a field mapping definition for a work item type. Mappings define how incoming data fields from external systems are mapped to platform fields. Each mapping has a unique name and can be saved as draft (for testing) or production (for live use).
Execute Web Services
{
"name": "external-sar-v2",
"description": "Maps SAR data from upstream detection engine",
"fileType": "JSON",
"dateFormat": "yyyy-MM-dd HH:mm:ss",
"draft": false,
"root": {
"path": "alert",
"fields": [
{"identifier": "alertId", "path": "alertId"},
{"identifier": "score", "path": "riskScore"}
],
"children": [
{
"workItemTypeIdentifier": "Party",
"path": "parties[*]",
"relationTypeIdentifier": "alert-to-party",
"fields": [
{"identifier": "First_Name", "path": "fname"},
{"identifier": "Last_Name", "path": "lname"}
]
}
]
}
}Groups & Users
Adds the specified users to a group. The response separates successfully added users from unrecognized user identifiers. Supports batch operations up to 200 users per request.
Assign Users to Groups
| Parameter | Type | Required | Description |
|---|---|---|---|
| groupId | string | Required | Path parameter. The identifier of the target group. |
| removeOthers | boolean | Optional | If true, removes users not in this request from the group. Default: false. |
| [body] | string[] | Required | JSON array of user identifier strings to add. |
assignedObjects in response.notFoundObjects.Removes the specified users from a group. The response separates successfully removed users from unrecognized identifiers.
Assign Users to Groups
Policy Engine
The Policy Engine enables rule-based automation of compliance decisions. Define rules with conditions and actions, simulate their impact, and activate them to run against live work items. Supports dynamic workflow policies and custom rule types.
Returns a list of all policy types configured in the system. Each policy type contains rules, a workflow lifecycle, and associated work item types.
Policy Manager — View Draft Tab, View Active Tab Policy Manager — Run Time
Returns a maximum of 200 policy types. For systems with more types, use the search/filter endpoint.
Retrieves the full configuration of a policy rule including conditions, actions, associated work item types, audit events, version history, and current activation state.
Policy Manager — View Rule, Edit Rule Policy Manager — Run Time
| Parameter | Type | Required | Description |
|---|---|---|---|
| ruleId | string | Required | The unique identifier of the rule. |
| ruleVersionNumber | integer | Optional | Specific version to retrieve. Defaults to latest version. |
Creates a new rule within the specified policy type. The rule is created in Draft state and must be activated via the workflow step update endpoint. Alert type and audit events are applicable only for Dynamic Workflow policy types.
Policy Manager — Edit Rule Policy Manager — Run Time
Initiates a simulation run for the specified policy type. Simulations evaluate draft rules against historical data without affecting live operations. Returns a simulation identifier for tracking progress and retrieving results.
Policy Manager — Edit Rule Policy Manager — Design Time, Run Time, Advanced
System Configuration
Creates a new data source connection. Connections define how CaseForge communicates with analytics engines, external databases, and upstream detection systems. Supports Standard, Virtual (multi-tenant routing), and Tenant connection types.
Add Connection
| Parameter | Type | Required | Description |
|---|---|---|---|
| type | string | Required | Connection type: Standard, Virtual, or Tenant. |
| identifier | string | Required | Unique identifier for this connection. |
| url | string | Required | Connection URL to the target server. |
| user | string | Required | Username for authentication. |
| password | string | Required | Password for authentication. |
| keepAlive | boolean | Optional | Enable connection keep-alive. Default: false. |
| poolSize | integer | Optional | Connection pool size. Default: 10. |
| callTimeoutMs | integer | Optional | Connection timeout in milliseconds. Default: -1 (no timeout). |
Adds one or more custom fields (up to 20 per request) to a specified work item type. Custom fields extend the schema of work items with business-specific data points. Virtual fields can reference external entities.
| Parameter | Type | Required | Description |
|---|---|---|---|
| fields | array | Required | Array of field definitions. At least one required. |
| fields[].displayName | string | Required | Human-readable field label. |
| fields[].fieldType.type | string | Required | Data type: string, number, date, boolean. |
| fields[].fieldType.sizeCode | string | Conditional | Required if type is string. Size code: S (50), M (255), L (4000). |
| fields[].indexed | boolean | Optional | Enable search indexing. Default: true. Always false for virtual fields. |
| fields[].targetWorkItemTypeIdentifier | string | Conditional | Required for virtual fields. Specifies the external entity type. |
Graph Analytics
Graph Analytics enables investigation of entity relationships using graph database queries. Define queries against a connected graph database (e.g., TigerGraph, Neo4j), map parameters to work item fields, and execute investigations to discover hidden connections between entities.
Returns all configured graph database query definitions including their parameters, associated work item type mappings, and active status.
Graph Analytics Graph Analytics — View
Executes the specified query against the configured graph database instance. Parameters are passed as an array of name-value pairs. The response contains the graph traversal results mapped to platform entity types.
Graph Analytics Execute Query
| Parameter | Type | Required | Description |
|---|---|---|---|
| queryId | string | Required | Path parameter. The identifier of the graph query to execute. |
| [body] | array | Required | Array of {name, value} parameter objects matching the query definition. |
Compliance & Security
ENTERPRISECaseForge is engineered for regulated environments. Our infrastructure, access controls, and data handling practices meet the compliance requirements of financial institutions, government agencies, and global enterprises subject to AML, fraud investigation, and case management mandates.
Regulatory Framework Alignment
| Framework | Scope | CaseForge Coverage |
|---|---|---|
| BSA / FinCEN | SAR filing, CTR monitoring, recordkeeping | SAR Management API, automated BSA e-filing integration, 7-year record retention |
| EU AMLD6 | AML directive — criminal prosecution predicate offenses | goAML-compatible SAR export, entity relationship mapping, EU data residency |
| FATF Rec. 20 | Mandatory suspicious transaction reporting to FIUs | Configurable STR/SAR workflows with multi-jurisdiction FIU routing |
| FINRA Rule 3310 | AML programme for broker-dealers | Audit-ready case documentation, supervisory review workflows, evidence chains |
| GDPR / CCPA | Personal data handling, right-to-erasure | PII field-level encryption, data subject request workflows, configurable retention |
Data Residency
Encryption & Data Integrity
All data in transit uses TLS 1.3. Data at rest is encrypted with AES-256. PII fields (names, account numbers, tax identifiers) are encrypted at the field level with tenant-managed keys via AWS KMS. Audit logs use SHA-256 hash chaining — any tampering is cryptographically detectable.
CaseForge never stores raw passwords. Credentials are hashed with bcrypt (cost factor 12+). API keys are stored as SHA-256 hashes — they cannot be retrieved after initial issuance.
Sandbox Environment
Every CaseForge contract includes a dedicated sandbox tenant, pre-loaded with synthetic work items, policies, and user groups. The sandbox is fully isolated from production — no data crosses the boundary in either direction.
Access Details
| Setting | Value | Notes |
|---|---|---|
| Base URL | https://{org}-sandbox.caseforge.io/api/v1 | Replace {org} with your organization slug |
| Test Username | sandbox.analyst@{org}.test | Pre-created with all permissions — contact support to reset |
| Test API Key | cf_test_xxxxxxxxxxxxxxxxxxxx | Available in Administration → API Keys on the sandbox tenant |
| Rate Limit | 200 req/min | Lower than production — not suitable for load testing |
Pre-loaded Work Item Types
| Type | Identifier | Description |
|---|---|---|
| Suspicious Activity Report | SAR | Full lifecycle with mandatory FinCEN fields and simulated BSA e-filing |
| AML Investigation | AML_INV | Multi-step investigation workflow with graph analytics integration |
| Fraud Case | FRAUD | Card fraud and identity theft investigation template |
| KYC Review | KYC_REV | Customer due diligence review with risk-scoring integration |
Sandbox SARs are never transmitted to FinCEN or any external system. SAR filing in the sandbox returns a simulated reference number in the format SANDBOX-SAR-XXXXXXXX.
SAR Management
v10.2CaseForge automates the full Suspicious Activity Report lifecycle — from drafting through mandatory supervisor review to FinCEN BSA e-filing. Workflows enforce the 30-day filing window (extendable to 60 days) and route through configurable approval chains before transmission to the relevant FIU.
SAR Status Lifecycle
Creates a new SAR from an existing work item. The work item must be of a SAR-type with all mandatory FinCEN fields populated. Supports direct association with an investigation work item for full traceability.
Request Body
| Parameter | Type | Req. | Description |
|---|---|---|---|
| workItemIdentifier | string | Required | Work item ID of the SAR case, e.g. WI-20250227-0042 |
| filingType | string | Required | initial, correct_prior, or continuing_activity |
| jurisdiction | string | Required | fincen (US), ncis (UK), goaml (EU/UNODC), or custom FIU code |
| priorReportIdentifier | string | Optional | BSA ID of the prior SAR — required for correct_prior and continuing_activity |
| submitForReview | boolean | Optional | Set true to immediately submit for supervisor review. Default false saves as draft. |
{
"status": true,
"sarIdentifier": "SAR-2025-00847",
"workItemIdentifier": "WI-20250227-0042",
"sarStatus": "draft",
"jurisdiction": "fincen",
"deadline": "2025-03-29T23:59:59Z",
"message": "SAR created. Filing deadline in 30 days."
}The FinCEN 30-day window starts from the detection date on the originating work item, not the SAR creation date. CaseForge tracks this automatically and calculates the accurate deadline.
Returns a paginated list of SARs, sorted by creation date (newest first). Filter by status, jurisdiction, or upcoming deadline to build urgency queues.
Query Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
| status | string | Optional | draft, pending_review, approved, filed, returned, withdrawn |
| jurisdiction | string | Optional | Filter by jurisdiction: fincen, ncis, goaml |
| deadlineBefore | string | Optional | ISO 8601 date — return SARs with filing deadline before this date |
| pageSize | integer | Optional | Results per page. 1–100, default 25. |
| page | integer | Optional | Page number, 1-indexed. Default 1. |
Advances or reverts the SAR to a new status. Transitions are validated against the configured workflow — invalid transitions return 422 Unprocessable Entity.
Request Body
| Parameter | Type | Req. | Description |
|---|---|---|---|
| newStatus | string | Required | pending_review, approved, returned, or withdrawn |
| reason | string | Required | Mandatory for returned and withdrawn. Written to the tamper-evident audit trail. |
| reviewerIdentifier | string | Optional | Assign to a specific reviewer. If omitted, routes to next available in the configured queue. |
The filed status is set exclusively by the CaseForge system upon confirmed receipt from FinCEN. Attempting to set it via API returns 403 Forbidden.
Audit Trail
CaseForge maintains an immutable, tamper-evident audit log of every platform action — case creation, field edits, workflow transitions, logins, SAR filings, and policy changes. Every record includes the actor, timestamp, IP address, and before/after values for modified fields.
Audit logs use SHA-256 hash chaining. Each record includes the hash of the previous record — any deletion or modification is cryptographically detectable. Records are retained for 7 years to meet BSA recordkeeping requirements.
Returns a paginated audit event log, newest first. Scope by entity, actor, action type, or date range.
Query Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
| entityType | string | Optional | work_item, sar, policy, user, group, system |
| entityId | string | Optional | Retrieve full history for a specific entity. |
| actorIdentifier | string | Optional | Filter events performed by a specific user. |
| action | string | Optional | created, updated, deleted, status_changed, login, sar_filed |
| from | string | Optional | ISO 8601 start datetime (inclusive). |
| to | string | Optional | ISO 8601 end datetime (inclusive). |
{
"page": 1, "pageSize": 25, "total": 4821,
"events": [
{
"eventId": "evt_9xK3LmN2vR7t",
"timestamp": "2025-02-27T14:31:05Z",
"actor": "analyst.jsmith",
"actorIp": "203.0.113.45",
"action": "status_changed",
"entityType": "work_item",
"entityId": "WI-20250227-0042",
"changes": { "status": { "from": "open", "to": "pending_sar" } },
"hash": "sha256:a3f9b2c1..."
}
]
}Generates a signed, tamper-evident audit export for regulatory submissions, external audits, or legal discovery. Exports are queued asynchronously — an audit.export_ready webhook fires when complete.
Request Body
| Parameter | Type | Req. | Description |
|---|---|---|---|
| format | string | Required | json, csv, or pdf (PDF includes digital signature for court admissibility) |
| from | string | Required | ISO 8601 start datetime. |
| to | string | Required | ISO 8601 end datetime. Max range: 12 months per export. |
| entityType | string | Optional | Scope to a specific entity type. Omit for full audit export. |
| includeHashChain | boolean | Optional | Include SHA-256 hash chain for tamper verification. Default true. |
{
"exportId": "exp_4Nq7TxLm2kRv",
"status": "queued",
"estimatedReadyAt": "2025-02-27T15:05:00Z",
"message": "Export queued. Webhook notification sent when ready."
}Notifications & Webhooks
CaseForge delivers real-time event notifications to your configured HTTPS endpoints. All payloads are signed with HMAC-SHA256 — verify the X-CF-Signature header on every incoming request. Failed deliveries retry up to 10 times with exponential backoff over 48 hours.
Registers a new HTTPS endpoint to receive CaseForge events. A ping event is delivered immediately to verify reachability. Endpoints must respond with HTTP 200 within 10 seconds.
Request Body
| Parameter | Type | Req. | Description |
|---|---|---|---|
| url | string | Required | HTTPS endpoint URL. HTTP is not accepted. |
| events | array | Required | Event types to subscribe to. Use ["*"] for all events. |
| description | string | Optional | Human-readable label for this registration. |
| active | boolean | Optional | Enable/disable immediately. Default true. |
Returns all webhook registrations on the tenant, including active status, last delivery outcome, and subscribed event list.
Webhook Event Types
Subscribe to the specific events relevant to your integration. All events deliver the full resource payload in the data field alongside event metadata and a verifiable HMAC signature.
Verify webhooks by checking X-CF-Signature: t={timestamp},v1={hmac_sha256_hex}. Reject payloads with timestamps older than 5 minutes to prevent replay attacks.