API Explorer 936 endpoints

Get Dynamic Change Requests

GET /obp/v7.0.0/management/dynamic-change-requests

OBPv7.0.0-getDynamicChangeRequests Roles: CanGetDynamicChangeRequests Dynamic-Change-RequestDynamic

Returns all Dynamic Change Requests, newest first. The table is never pruned: it is the audit log of every proposed, approved, rejected, withdrawn, expired and failed change.

Optional query parameters: status (INITIATED, APPROVED, REJECTED, WITHDRAWN, EXPIRED, FAILED), target_type, target_id, requestor_user_id.

Maker/checker for runtime-supplied code and configuration (dynamic resource docs, connector methods, dynamic message docs, ABAC rules).

When dynamic_code_requires_approval is true and the target type is listed in dynamic_code_approval_target_types, the v4.0.0 / v6.0.0 create, update and delete endpoints validate and compile the body as before but return 202 Accepted with a Dynamic Change Request instead of applying it. A DIFFERENT user holding CanApproveDynamicChangeRequest approves the request by its payload_hash; only then is the change applied, and the runtime executes only rows whose body hash equals the approved hash.

Approval is system level. Dynamic code runs in the shared JVM, so a bank-level artefact is approved by the same system-level checker; there are no bank-level change request endpoints.

User Authentication is Required. The User must be logged in. The Application must also be authenticated.

JSON response body fields (19)
actioned_at
actioned_at
business_justification
business_justification
checker_comment
checker_comment
checker_user_id
checker_user_id
created_at
created_at
current_payload
current_payload
current_payload_hash
current_payload_hash
dynamic_change_request_id
dynamic_change_request_id
dynamic_change_requests
dynamic_change_requests
expires_at
expires_at
operation
operation
payload_hash
payload_hash
proposed_payload
proposed_payload
request_path
request_path
request_verb
POST
requestor_user_id
requestor_user_id
status
target_id
target_id
target_type
target_type
Example success response
{
  "dynamic_change_requests": [
    {
      "dynamic_change_request_id": "0d1c9e3c-6c2b-4c1e-9a53-2d5b2f0d7f11",
      "target_type": "DYNAMIC_RESOURCE_DOC",
      "target_id": "",
      "operation": "CREATE",
      "status": "INITIATED",
      "request_verb": "POST",
      "request_path": "/obp/v4.0.0/management/dynamic-resource-docs",
      "payload_hash": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
      "current_payload_hash": "",
      "proposed_payload": {
        "request_url": "/my_user/MY_USER_ID",
        "success_response_body": {
          "my_user_id": "some_id_value",
          "name": "Jhon",
          "age": 12,
          "hobby": [
            "coding"
          ],
          "_optional_fields_": [
            "hobby"
          ]
        },
        "example_request_body": {
          "name": "Jhon",
          "age": 12,
          "hobby": [
            "coding"
          ],
          "_optional_fields_": [
            "hobby"
          ]
        },
        "programming_lang": "Scala",
        "bank_id": "gh.29.uk",
        "roles": "CanCreateMyUser",
        "summary": "Create My User",
        "error_response_bodies": "OBP-50000: Unknown Error.,OBP-20001: User not logged in. Authentication is required!,OBP-20006: User is missing one or more roles: ,OBP-10001: Incorrect json format.",
        "request_verb": "POST",
        "description": "Create one User",
        "tags": "Create-My-User",
        "method_body": "%20%20%20%20val%20Some(resourceDoc)%20%3D%20callContext.resourceDocument%0A%20%20%20%20val%20hasRequestBody%20%3D%20callContext.httpBody.exists(_.nonEmpty)%0A%0A%20%20%20%20%2F%2F%20get%20Path%20Parameters%2C%20example%3A%0A%20%20%20%20%2F%2F%20if%20the%20requestUrl%20of%20resourceDoc%20is%20%2Fhello%2Fbanks%2FBANK_ID%2Fworld%0A%20%20%20%20%2F%2F%20the%20request%20path%20is%20%2Fhello%2Fbanks%2Fbank_x%2Fworld%0A%20%20%20%20%2F%2FpathParams.get(%22BANK_ID%22)%20will%20get%20Option(%22bank_x%22)%20value%0A%0A%20%20%20%20val%20myUserId%20%3D%20pathParams(%22MY_USER_ID%22)%0A%0A%0A%20%20%20%20val%20requestEntity%20%3D%20callContext.httpBody.filter(_.nonEmpty)%20match%20%7B%0A%20%20%20%20%20%20case%20Some(rawBody)%20%3D%3E%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20com.openbankproject.commons.util.JsonAliases.parse(rawBody).extract%5BRequestRootJsonClass%5D%0A%20%20%20%20%20%20%20%20%7D%20catch%20%7B%0A%20%20%20%20%20%20%20%20%20%20case%20e%3A%20MappingException%20%3D%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20errorResponse(s%22%24InvalidJsonFormat%20%24%7Be.msg%7D%22)%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20case%20None%20%3D%3E%0A%20%20%20%20%20%20%20%20return%20errorResponse(s%22%24InvalidRequestPayload%20Current%20request%20has%20no%20payload%22)%0A%20%20%20%20%7D%0A%0A%0A%20%20%20%20%2F%2F%20please%20add%20business%20logic%20here%0A%20%20%20%20val%20responseBody%3AResponseRootJsonClass%20%3D%20ResponseRootJsonClass(s%22%24%7BmyUserId%7D_from_path%22%2C%20requestEntity.name%2C%20requestEntity.age%2C%20requestEntity.hobby)%0A%20%20%20%20Future.successful%20%7B%0A%20%20%20%20%20%20(responseBody%2C%20HttpCode.%60200%60(callContext.callContext))%0A%20%20%20%20%7D",
        "dynamic_resource_doc_id": "vce035ca-9a0f-4bfa-b30b-9003aa467f51",
        "partial_function_name": "createUser"
      },
      "requestor_user_id": "9ca9a7e4-6d02-40e3-a129-0b2bf89de9b1",
      "business_justification": "Expose the new loan quote endpoint for the mobile app.",
      "checker_user_id": "",
      "checker_comment": "",
      "created_at": "1100-01-01T01:01:01.000Z",
      "actioned_at": "",
      "expires_at": "1100-01-01T01:01:01.000Z"
    }
  ]
}
Possible errors (3)
  • OBP-20001: User not logged in. Authentication is required!
  • OBP-20006: User is missing one or more roles:
  • OBP-50000: Unknown Error.
Implemented by OBPv7.0.0 getDynamicChangeRequests