Monday, November 17, 2025

#1103 - Retrieving Scheduled Integration schedules via the OIC Factory API

Introduction

This is a customer ask, that I will implement via the factory api. We would like an overview of the schedule status of scheduled integrations, e.g. -

{
"Schedules" : [ { "project_id" : "AA_PROJECT2", "integration_id" : "LOADNEWORDERS|01.00.0000", "scheduleCreated" : false, "scheduleActive" : "No schedule defined" }, { "project_id" : "AA_PROJECT2", "integration_id" : "CONCURRENTASYNCR_CLONE|01.00.0000", "scheduleCreated" : true, "scheduleActive" : "CANCELLED" }, { "project_id" : "AA_PROJECT2", "integration_id" : "CONCURRENTASYNCREQUESTS|01.00.0000", "scheduleCreated" : true, "scheduleActive" : "ACTIVE" }...

Using the Factory APIs to retrieve the salient data

First step is to retrieve projects - 

Then, for each project, get the scheduled integrations and check if they have active schedules.

My demo project, AA_PROJECT2, contains the following 3 scheduled integrations -

The first integration, loadNewOrders, has no schedule attached to it. ConcurrentAsyncRequests_Clone has a schedule, but it is stopped. ConcurrentAsyncRequests has a schedule attached and it is started.

Now to the api - 

I execute this an get the following response for loadNewOrders -

{
            "code": "LOADNEWORDERS",
           ...
            "id": "LOADNEWORDERS|01.00.0000",
            ...
            "name": "loadNewOrders",
            "pattern": "Scheduled",
            "patternDescription": "Scheduled",
            "payloadTracingEnabledFlag": false,
            "percentageComplete": 100,
            "projectId": "AA_PROJECT2",
            "projectType": "DEVELOPED",
            "recordEnabledFlag": false,
            "scheduleApplicableFlag": true,
            "scheduleDefinedFlag": false,
            "scope": "Private",
            "smartTags": "style:scheduled orchestration",
            "softDeactivated": false,
            "status": "ACTIVATED",
          ...
            "version": "01.00.0000"
        },

Here is the extract for ConcurrentAsyncRequests_Clone -

  {
            "code": "CONCURRENTASYNCR_CLONE",
         ...
            "id": "CONCURRENTASYNCR_CLONE|01.00.0000",
          ...
            "lockedFlag": false,
            "name": "ConcurrentAsyncRequests_Clone",
            "pattern": "Scheduled",
            "patternDescription": "Scheduled",
            "payloadTracingEnabledFlag": false,
            "percentageComplete": 100,
            "projectId": "AA_PROJECT2",
            "projectType": "DEVELOPED",
            "recordEnabledFlag": false,
            "scheduleApplicableFlag": true,
            "scheduleDefinedFlag": true,
            "scope": "Private",
           ...
"softDeactivated": false,
            "status": "ACTIVATED",
            "style": "FREEFORM",
            "styleDescription": "Orchestration",
         ...
            "version": "01.00.0000"
        },

Here we see that scheduleDefinedFlag has been set to true.

Now to getting the status of the schedule - 

https://yourOIC/ic/api/integration/v1/projects/AA_PROJECT2/integrations/CONCURRENTASYNCREQUESTS|01.00.0000/schedule?integrationInstance=yourOICInstance

{
   ...  "frequency": {
        "frequencyType": "DAILY",
        "interval": 1
    },
    "id": "Schedule_CONCURRENTASYNCREQUESTS_01_00_0000",
  ...
    "scheduleTZ": "Europe/Berlin",
    "scheduleTZDisplayName": "Central European Standard Time",
    "scheduleType": "BASIC",
    "startDate": "2025-11-17|12:54:29",
    "state": "ACTIVE",
   ...
}

The field, state can have the following values -

  • ACTIVE
  • CANCELLED - denotes the schedule has been stopped. This value is also returned if I create a schedule and do not start it. 
What happens if I invoke the above api and the integration does not have a schedule defined?

{
    "status": "HTTP 404 Not Found",
    "title": "Schedule is not found.",
    "type": "https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5"
}

I will invoke all of these in an integration, and, for this invoke, I'll need to catch the above fault.


Invoking the APIs from an Integration

Now let's use these apis in an integration - for this I create a sync app driven integration. I've defined the following request / response payloads -


  {
"Schedules" : [ { "project_id" : "1", "integration_id" : "NiallC", "scheduleCreated" : true, "scheduleActive" : "Active" }, { "project_id" : "1", "integration_id" : "NiallC", "scheduleCreated" : true, "scheduleActive" : "Active" }, { "project_id" : "1", "integration_id" : "NiallC", "scheduleCreated" : true, "scheduleActive" : "Active" } ]
}

 The first actions are as follows -

Here is the SWITCH route when user has set allProjects to true in the request payload - 

Invoke 1 retrieves projects, then, I iterate over each project and do invoke 2, getProjectIntegrations - 

For each integration, here I switch on scheduled integrations - 

I include a scope, for retrieving the schedule state - 




 






I assign the state - No Schedule Defined - in the Fault Handler.

I then append the response for this integration to a global variable via Data Stitch - 

So which global variables do we require?


Note the use of Append in the data stitch for the complex structure -


I run the integration and get the following response - 

{
"Schedules" : [ { "project_id" : "AA_PROJECT2", "integration_id" : "LOADNEWORDERS|01.00.0000", "scheduleCreated" : false, "scheduleActive" : "No schedule defined" }, { "project_id" : "AA_PROJECT2", "integration_id" : "CONCURRENTASYNCR_CLONE|01.00.0000", "scheduleCreated" : true, "scheduleActive" : "CANCELLED" }, { "project_id" : "AA_PROJECT2", "integration_id" : "CONCURRENTASYNCREQUESTS|01.00.0000", "scheduleCreated" : true, "scheduleActive" : "ACTIVE" }...

What if I'm not using Projects?

What though, if I'm one of the few OIC customers who has yet to adopt Projects?

Here are the apis you need to call - 

Then iterate over the integrations returned. For each integration, check for "pattern":"Scheduled", 

then get the value of  "scheduleDefinedFlag".

For the scheduled integrations - invoke -

This will give you the  "state": "ACTIVE", value. 

Net, net - same modus operandi as with projects, without the overhead of iterating over projects.



Summa Summarum

As you can see, the OIC Factory APIs are a powerful resource. This is just one of the plethora of use cases in which it can be used. Make sure to bookmark the docs page. You can download my OIC project, containing the integration, here.



 

 





 



Tuesday, November 11, 2025

#1102 - OCI Health Check for OIC

Introduction 

This is a follow up on a previous post I wrote on this subject. I realised that post was somewhat incomplete, so I hope I've filled the gap.   

My health check will be configured to do a GET on an HTTP endpoint.





I will do a GET - on the following metadata url - 

I create the health check as follows - 

I enter my OIC instance base url as the target - e.g. myOIC.integration.us-phoenix-1.ocp.oraclecloud.com

Then I press enter to add this to the list. 

I specify the vantage point - 
Request type = HTTP



Wait a minute and then click on Health Check History - 

Click on Monitoring

Drill into the HTTP(S) Response Status Code -

I now stop the OIC instance - 


Summa Summarum

This is a great feature, naturally, with the caveat, that the integration needs to be activated. 

Note also, one does not need to specify OAuth creds etc. for this HTTP request.

Also, consider creating an alarm based on this; simply go to Service Metrics -

The above screenshot shows - HTTP(s) Response Status Code.
Here I create the alarm, based on the query - 

I stop my OIC instance again, see the alarm is in "firing" state and also check my email.

Cool!







 












Monday, November 3, 2025

#1101 - OIC 25.10 New Features - Exposing Integrations as AI Agent Tools

This is a really cool new feature in 25.10, enabling your project as an MCP Server, thus allowing its integrations to be exposed as Agentic AI tools.

Let's try this out - 

Exposing Integrations as AI Agent Tools

I have created a new project and clicked the Enable MCP Server, via project properties.

I add a simple integration that processes an order - 

Essentially, I just echo the request payload, but also add an orderNr value.

I test the integration - 

Sehr gut, as we say in Bayern.

Now to creating the tool - 

I choose Integration - 

So what are these guidelines? Guidelines are sent to the LLM as part of the system prompt. They will help the LLM in deciding when or how to use the tool, e.g. I could add a guideline such as only use this tool for non-US customers.

Also note the ability to manage the  parameters - 

Now that I have the tool, let's use it.

Invoking Integrations as AI Agent Tools 

Step one is to create a confidential app for your OIC instance. You may already have one, so that's good. This app will support client credentials and will be assigned the Service Invoker role.


Looks good, now to testing the tool in Postman - 

Testing the AI Agent Tool in Postman


The MCP URL is available in the project properties, however, we need to massage this somewhat. The correct format is as follows - 

https://yourOICURL/mcp-server/v1/projects/AI_AGENT_TOOLS/mcp

Don't forget to replace my project name with yours!     

Set up the client credentials authorization in Postman -

Execute the request - first Connect



Select the tool and click Run -
Check out the response in Postman - 


Some of you may be asking about the other option shown in the tool creation list - API. 

The plan here is to expose apis as tools. For example, I have a Fusion ERP connection in my project. The ERP adapter supports REST apis - the query, update, inserts and deletes of this world. If I select type = API, I will then be asked to select a project connection, e.g. my Fusion ERP connection. Once selected, I can now choose which api I want to expose as a tool e.g. the create Purchase Order api. 

Summa Summarum

This is the first of many new features in this space. Agentic AI is on everyone's agenda, so roll on the 26 Q1 release and the next iteration of new features in this space!