How to deal with 2 different Data streams into the same API call

Hi all,

Quite a newbie to Data Actions and the way to deal with them in Genesys as well API's in general.

My question is that we query a backend system for customer contracts and depending on the type they can come back as a RunningAccount tree or a FixedTermFixedSum one.

The initiating call for either product is the same with a product line variable that determine the product type:
Input Contract:
{
"title": "Input",
"type": "object",
"properties": {
"agreementid": {"type": "string"}, //This is the customers agreement e.g. 00123498
"custAuthGuid": {"type": "string"}, //Unique token allows temporary access to the data. e.g. 2703680b-2519-4b5b-8b86-9e2367ac403d
"interactionid": {"type": "string"}, //This is the ID of the interaction e.g. 7842b42f-a940-4ae4-a6a6-918edba68b40
"shopCode": {"type": "string"}, //Identifies the shop. e.g. 9802
"clientCode": {"type": "string"}, //Identifies the customer e.g. LX5
"productLine": {"type": "string"} //Either RunningAccount or FixedTermFixedSum
},
"additionalProperties": true
}

The Output looks like this For FixedTermFixedSum:
{
"title": "Output",
"type": "object",
"properties": {
"agreementId": {"type": "string"},
"motorData": null,
"runningAccountData": null,
"ipfData": null,
"fixedTermFixedSumData": {
"type": "object",
"properties": {
"financialData": {
"hasThirdPartyAccess": {"type": "boolean"},
"agreementCount": {"type": "Integer"},
// MANY VARIABLES AND ARRAYS
"creditProductType": {"type": "string"},
"creditProductTypeDescription": {"type": "string"}
},
"additionalProperties": true
},
},
"purchasedItems": {
"type": "array",
"items": {
"title": "purchasedItems",
"type": "object",
"properties": {
"skuCode": {"type": "string"},
"productDescription": {"type": "string"},
"make": {"type": "string"},
"model": {"type": "string"},
"quantity": {"type": "integer"},
"totalPrice": {"type": "integer"}
},
"additionalProperties": true
}
},
"cardsData": null
}
}

For RunningAccount the returned data looks like this:
{
"title": "Output",
"type": "object",
"properties": {
"agreementId": {"type": "string"},
"runningAccountData": {
"type": "object",
"properties": {
financialData": {
"type": "object",
"properties": {
"hasThirdPartyAccess": {"type": "boolean"},
"agreementCount": {"type": "integer"},
// MANY VARIABLES AND ARRAYS
"creditProductType": {"type": "string"},
"creditProductTypeDescription": {"type": "string"}
},
"additionalProperties": true
},
},
},
"purchasedItems": []
},
"ipfData": null,
"fixedTermFixedSumData": null,
"cardsData": null
}

How do I create a translation map

{
"translationMap": {
"has3rdPartyAccess": "$.fixedTermFixedSumData.financialData.hasThirdPartyAccess",
"agreementCount": "$.fixedTermFixedSumData.financialData.agreementCount",
"creditProductType": "$.fixedTermFixedSumData.financialData.creditProductType",
"creditProductTypeDescription": "$.fixedTermFixedSumData.financialData.creditProductTypeDescription"
},
-- OR --
"translationMap": {
"has3rdPartyAccess": "$.runningAccountData.financialData.hasThirdPartyAccess",
"agreementCount": "$.runningAccountData.financialData.agreementCount",
"creditProductType": "$.runningAccountData.financialData.creditProductType",
"creditProductTypeDescription": "$.runningAccountData.financialData.creditProductTypeDescription"
},

"translationMapDefaults": {
"has3rdPartyAccess": ""Not Found"",
"agreementCount": ""Not Found"",
"creditProductType": ""Not Found"",
"creditProductTypeDescription": ""Not Found""
},
"successTemplate": "{\n "has3rdPartyAccess": ${has3rdPartyAccess},\n "agreementCount": ${agreementCount}\n "creditProductType": ${creditProductType}\n "creditProductTypeDescription": ${creditProductTypeDescription}\n }"
}

Hello,

There is maybe an easier way to address this, and I don't know if the following will work with your API server (I could not check all possible response contents) but here is an idea using Velocity If/else/end in the successTemplate.

I have assumed that your API server would return fixedTermFixedSumData content or runningAccountData content (but not both).
The purpose to trigger the translationMapDefaults - set to -1 - so that we can leverage it easily in the successTemplate with a Velocity if/else/end.

This is how my Output Contract looks like:
isFixedTerm is just a boolean output I have added to distinguish Fixed Term from Running Account.

{
  "type": "object",
  "properties": {
    "has3rdPartyAccess": {
      "type": "boolean"
    },
    "agreementCount": {
      "type": "integer"
    },
    "creditProductType": {
      "type": "string"
    },
    "creditProductTypeDescription": {
      "type": "string"
    },
    "isFixedTerm": {
      "type": "boolean"
    }
  },
  "additionalProperties": true
}

And the Response Configuration (testing value of ftAgreementCount in successTemplate, to decide if Fixed Term related data is returned, or if it is Running Account related data):

{
  "translationMap": {
    "isFixedTerm": "false",
    "ftHas3rdPartyAccess": "$.fixedTermFixedSumData.financialData.hasThirdPartyAccess",
    "ftAgreementCount": "$.fixedTermFixedSumData.financialData.agreementCount",
    "ftCreditProductType": "$.fixedTermFixedSumData.financialData.creditProductType",
    "ftCreditProductTypeDescription": "$.fixedTermFixedSumData.financialData.creditProductTypeDescription",
    "ruHas3rdPartyAccess": "$.runningAccountData.financialData.hasThirdPartyAccess",
    "ruAgreementCount": "$.runningAccountData.financialData.agreementCount",
    "ruCreditProductType": "$.runningAccountData.financialData.creditProductType",
    "ruCreditProductTypeDescription": "$.runningAccountData.financialData.creditProductTypeDescription"
  },
  "translationMapDefaults": {
    "isFixedTerm": "false",
    "ftHas3rdPartyAccess": "false",
    "ftAgreementCount": "-1",
    "ftCreditProductType": "\"Not Found\"",
    "ftCreditProductTypeDescription": "\"Not Found\"",
    "ruHas3rdPartyAccess": "false",
    "ruAgreementCount": "-1",
    "ruCreditProductType": "\"Not Found\"",
    "ruCreditProductTypeDescription": "\"Not Found\""
  },
  "successTemplate": "{\n \"isFixedTerm\": #if( $ftAgreementCount > 0 ) true #else false #end ,\n   \"has3rdPartyAccess\": #if( $ftAgreementCount > 0 ) ${ftHas3rdPartyAccess} #else ${ruHas3rdPartyAccess} #end ,\n \"agreementCount\": #if( $ftAgreementCount > 0 ) ${ftAgreementCount} #else ${ruAgreementCount} #end ,\n   \"creditProductType\": #if( $ftAgreementCount > 0 ) ${ftCreditProductType} #else ${ruCreditProductType} #end ,\n   \"creditProductTypeDescription\": #if( $ftAgreementCount > 0 ) ${ftCreditProductTypeDescription} #else ${ruCreditProductTypeDescription} #end \n }"
}

Hope this helps.

Regards,

Hi Jerome,

Many thanks for your response, I'm going to try this out!

Your assumption is correct in regards to only one response set coming back.

Ok, so I did created your Output Contract exactly to your example

For the FixedTermFixedSum it returns data but the boolean isn't set:
{
"creditProductType": "FICO",
"creditProductTypeDescription": "INT FREE FURNITURE",
"agreementCount": 0,
"has3rdPartyAccess": false,
"isFixedTerm": false
}

For a RunningAccount it unfortunately throws an error

{
"message": "JSON failed output schema validation for the following reasons: Schema: # @/properties/agreementCount. Error location: /agreementCount. instance type (string) does not match any allowed primitive type (allowed: ["integer"]),\nSchema: # @/properties/has3rdPartyAccess. Error location: /has3rdPartyAccess. instance type (string) does not match any allowed primitive type (allowed: ["boolean"])",
"code": "invalid.schema",
"status": 400,
"messageParams": {},
"contextId": "f08d6ed3-673f-4b4f-9aa4-9fc980e4aaeb",
"details": [
{
"errorCode": "ACTION.PROCESSING"
}
],
"errors": []
}

I've compared the original API's that work and it definitely is an integer

The returned data is
agreementId: 00215292
runningAccountData.financialData.hasThirdPartyAccess: false
runningAccountData.financialData.agreementCount: 1
runningAccountData.financialData.creditProductType: ARP
runningAccountData.financialData.creditProductTypeDescription: RETAIL W2P

What did I miss?

Again thanks for your help!

Kind regards
Ruud

Hello,

It is hard to debug without seeing the response contents you get from your backend system.
Could you post a Fixed Term response and a RunningAccount response?
This way, I can try to run my data action with the exact same response/data.

It does seem that translationMap is complaining about types for agreementCount and has3rdPartyAccess.
If the expected response attribute is an integer, you should see this in the response body from your backend: "myproperty": 1234
If you see "myproperty": "1234", the type is then string (even if it contains digits only).

Regards,

I've uploaded 3 responses

FTFS.json (5.2 KB)
RA1.json (5.6 KB)
RA2.json (6.9 KB)

Note that we do need the "agreementId" as identifier in the returned data.

Hello,

I was doing a test in the successTemplate with > 0 as I thought your agreementCount would have values > 0.
Modifying to -1 solves it.

I have been able to run your 3 responses properly.
Note that RA2.json is not a Running Account but an FTS.

Output Contract:

{
  "type": "object",
  "properties": {
    "has3rdPartyAccess": {
      "type": "boolean"
    },
    "agreementCount": {
      "type": "integer"
    },
    "creditProductType": {
      "type": "string"
    },
    "creditProductTypeDescription": {
      "type": "string"
    },
    "isFixedTerm": {
      "type": "boolean"
    }
  },
  "additionalProperties": true
}

Response Configuration:

{
  "translationMap": {
    "isFixedTerm": "false",
    "ftHas3rdPartyAccess": "$.fixedTermFixedSumData.financialData.hasThirdPartyAccess",
    "ftAgreementCount": "$.fixedTermFixedSumData.financialData.agreementCount",
    "ftCreditProductType": "$.fixedTermFixedSumData.financialData.creditProductType",
    "ftCreditProductTypeDescription": "$.fixedTermFixedSumData.financialData.creditProductTypeDescription",
    "ruHas3rdPartyAccess": "$.runningAccountData.financialData.hasThirdPartyAccess",
    "ruAgreementCount": "$.runningAccountData.financialData.agreementCount",
    "ruCreditProductType": "$.runningAccountData.financialData.creditProductType",
    "ruCreditProductTypeDescription": "$.runningAccountData.financialData.creditProductTypeDescription"
  },
  "translationMapDefaults": {
    "isFixedTerm": "false",
    "ftHas3rdPartyAccess": "false",
    "ftAgreementCount": "-1",
    "ftCreditProductType": "\"Not Found\"",
    "ftCreditProductTypeDescription": "\"Not Found\"",
    "ruHas3rdPartyAccess": "false",
    "ruAgreementCount": "-1",
    "ruCreditProductType": "\"Not Found\"",
    "ruCreditProductTypeDescription": "\"Not Found\""
  },
  "successTemplate": "{\n \"isFixedTerm\": #if( $ftAgreementCount > -1 ) true #else false #end ,\n   \"has3rdPartyAccess\": #if( $ftAgreementCount > -1 ) ${ftHas3rdPartyAccess} #else ${ruHas3rdPartyAccess} #end ,\n \"agreementCount\": #if( $ftAgreementCount > -1 ) ${ftAgreementCount} #else ${ruAgreementCount} #end ,\n   \"creditProductType\": #if( $ftAgreementCount > -1 ) ${ftCreditProductType} #else ${ruCreditProductType} #end ,\n   \"creditProductTypeDescription\": #if( $ftAgreementCount > -1 ) ${ftCreditProductTypeDescription} #else ${ruCreditProductTypeDescription} #end \n }"
}

Regards,

Many thanks Jerome, that indeed seems to work.
I will now extend to get a all the additional data- I might have another question later related to this.

Kind regards
Ruud

I've added more data to the translation table and now I get an truncation error:

\n "lastPaymentDate": "2025-03-14" ,
\n "t"[truncated 462 chars]; line: 29, column: 3]'
\n Template:'{\n "isFixedTerm":

Is there a limit to the translation table?

Full error:
{
"message": "Transform failed to process result using 'successTemplate' template due to error:'Unexpected character ('}' (code 125)): was expecting double-quote to start field name\n at [Source: (String)"{\n "isFixedTerm": false ,\n "has3rdPartyAccess": false ,\n "agreementCount": 0 ,\n "creditProductType": "FICO" ,\n "creditProductTypeDescription": "INT FREE FURNITURE" ,\n "totalPaidAmount": 0 ,\n "lastPaidAmount": 0 ,\n "arrearsAmount": 0 ,\n "specialOfferDate": null ,\n "agreementDate": "2023-03-14" ,\n "firstPaymentDate": "2023-04-14" ,\n "nextPaymentDueDate": "2023-04-14" ,\n "lastPaymentDueDate": "2025-03-14" ,\n "lastPaymentDate": "2025-03-14" ,\n "t"[truncated 462 chars]; line: 29, column: 3]'\n Template:'{\n "isFixedTerm": #if( $ftAgreementCount > -1 ) true #else false #end ,\n "has3rdPartyAccess": #if( $ftAgreementCount > -1 ) ${ftHas3rdPartyAccess} #else ${ruHas3rdPartyAccess} #end ,\n "agreementCount": #if( $ftAgreementCount > -1 ) ${ftAgreementCount} #else ${ruAgreementCount} #end ,\n "creditProductType": #if( $ftAgreementCount > -1 ) ${ftCreditProductType} #else ${ruCreditProductType} #end ,\n "creditProductTypeDescription": #if( $ftAgreementCount > -1 ) ${ftCreditProductTypeDescription} #else ${ruCreditProductTypeDescription} #end ,\n "totalPaidAmount": #if( $ftAgreementCount > -1 ) ${ftTotalPaidAmount} #else ${ruTotalPaidAmount} #end ,\n "lastPaidAmount": #if( $ftAgreementCount > -1 ) ${ftLastPaidAmount} #else ${ruLastPaidAmount} #end ,\n "arrearsAmount": #if( $ftAgreementCount > -1 ) ${ftArrearsAmount} #else ${ruArrearsAmount} #end ,\n "specialOfferDate": #if( $ftAgreementCount > -1 ) ${ftSpecialOfferDate} #else ${ruSpecialOfferDate} #end ,\n "agreementDate": #if( $ftAgreementCount > -1 ) ${ftAgreementDate} #else ${ruAgreementDate} #end ,\n "firstPaymentDate": #if( $ftAgreementCount > -1 ) ${ftFirstPaymentDate} #else ${ruFirstPaymentDate} #end ,\n "nextPaymentDueDate": #if( $ftAgreementCount > -1 ) ${ftNextPaymentDueDate} #else ${ruNextPaymentDueDate} #end ,\n "lastPaymentDueDate": #if( $ftAgreementCount > -1 ) ${ftLastPaymentDueDate} #else ${ruLastPaymentDueDate} #end ,\n "lastPaymentDate": #if( $ftAgreementCount > -1 ) ${ftLastPaymentDate} #else ${ruLastPaymentDate} #end ,\n "totalCashPrice": #if( $ftAgreementCount > -1 ) ${ftTotalCashPrice} #else ${ruTotalCashPrice} #end ,\n "totalPayableAmount": #if( $ftAgreementCount > -1 ) ${ftTotalPayableAmount} #else ${ruTotalPayableAmount} #end ,\n "outstandingBalanceAmount": #if( $ftAgreementCount > -1 ) ${ftOutstandingBalanceAmount} #else ${ruOutstandingBalanceAmount} #end ,\n "cashSettlePrice": #if( $ftAgreementCount > -1 ) ${ftCashSettlePrice} #else ${ruCashSettlePrice} #end ,\n "installmentAmount": #if( $ftAgreementCount > -1 ) ${ftInstallmentAmount} #else ${ruInstallmentAmount} #end ,\n "totalInstallmentCount": #if( $ftAgreementCount > -1 ) ${ftTotalInstallmentCount} #else ${ruTotalInstallmentCount} #end ,\n "remainingInstallmentCount": #if( $ftAgreementCount > -1 ) ${ftRemainingInstallmentCount} #else ${ruRemainingInstallmentCount} #end ,\n "paymentMethod": #if( $ftAgreementCount > -1 ) ${ftPaymentMethod} #else ${ruPaymentMethod} #end ,\n "totalCreditLimit": #if( $ftAgreementCount > -1 ) ${ftTotalCreditLimit} #else ${ruTotalCreditLimit} #end ,\n "currentApplicationStatus": #if( $ftAgreementCount > -1 ) ${ftCurrentApplicationStatus} #else ${ruCurrentApplicationStatus} #end ,\n "clientCodeDescription": #if( $ftAgreementCount > -1 ) ${ftClientCodeDescription} #else ${ruClientCodeDescription} #end ,\n "shopCode": #if( $ftAgreementCount > -1 ) ${ftShopCode} #else ${ruShopCode} #end ,\n "fundReleaseDate": #if( $ftAgreementCount > -1 ) ${ftFundReleaseDate} #else ${ruFundReleaseDate} #end ,\n }'.",
"code": "bad.request",
"status": 400,
"messageParams": {},
"contextId": "841d8203-4835-4cd7-bed7-fbf056012e38",
"details": [
{
"errorCode": "ACTION.PROCESSING"
}
],
"errors": []
}

Kind regards
Ruud

Hello,

The error says: Unexpected character ('}
You seem to have a single-quote extra character at the end of your Response Configuration.
-> } #else ${ruFundReleaseDate} #end ,\n }'."
Maybe also a period - it should end with the }

Just for sharing. Another way of doing this but this time leveraging JSONPath expressions a bit more.
Some thing like: $..financialData.hasThirdPartyAccess will select all financialData.hasThirdPartyAccess entries (no matter if they are under runningAccountData or fixedTermFixedSumData). The result is an array (empty if it couldn't find any).
The macro ${successTemplateUtils.firstFromArray("${has3rdPartyAccessArray}", "false")} will allow to take the first element from the array (and use false as default).

I have modified the Output Contract - isFixedTerm defined as an integer this time.
This is to make it easier to determine if it is a runningAccountData or a fixedTermFixedSumData.
It will try to retrieve $.fixedTermFixedSumData.financialData.agreementCount or use the default value (translationMapDefaults - set to -1).
So if it is a runningAccountData, isFixedTerm will be equal to -1. If it is a fixedTermFixedSumData, it will be equal to agreementCount (meaning >= 0).

Output Contract:

{
  "type": "object",
  "properties": {
    "has3rdPartyAccess": {
      "type": "boolean"
    },
    "agreementCount": {
      "type": "integer"
    },
    "creditProductType": {
      "type": "string"
    },
    "creditProductTypeDescription": {
      "type": "string"
    },
    "isFixedTerm": {
      "type": "integer"
    }
  },
  "additionalProperties": true
}

Response Configuration:

{
  "translationMap": {
    "isFixedTerm": "$.fixedTermFixedSumData.financialData.agreementCount",
    "has3rdPartyAccessArray": "$..financialData.hasThirdPartyAccess",
    "agreementCountArray": "$..financialData.agreementCount",
    "creditProductTypeArray": "$..financialData.creditProductType",
    "creditProductTypeDescriptionArray": "$..financialData.creditProductTypeDescription"
  },
  "translationMapDefaults": {
    "isFixedTerm": "-1",
    "has3rdPartyAccessArray": "[]",
    "agreementCountArray": "[]",
    "creditProductTypeArray": "[]",
    "creditProductTypeDescriptionArray": "[]"
  },
  "successTemplate": "{\n \"isFixedTerm\": ${isFixedTerm} ,\n   \"has3rdPartyAccess\": ${successTemplateUtils.firstFromArray(\"${has3rdPartyAccessArray}\", \"false\")} ,\n \"agreementCount\": ${successTemplateUtils.firstFromArray(\"${agreementCountArray}\", \"-1\")} ,\n   \"creditProductType\": ${successTemplateUtils.firstFromArray(\"${creditProductTypeArray}\", \"${esc.quote}NOT FOUND${esc.quote}\")} ,\n   \"creditProductTypeDescription\": ${successTemplateUtils.firstFromArray(\"${creditProductTypeDescriptionArray}\", \"${esc.quote}NOT FOUND${esc.quote}\")} \n }"
}

Regards,

Although this kind of gives the results back when you run the wrong Query (eg a running account against a fixed term API, it is then marked as being fixed term what's incorrect.

Is there a way to define just whether or not is is a fixed term or running account and set that as a boolean so the flow then can figure out what the correct API is it needs to call.

so when the response comes back in the runningAccount.financialData tree the isRunAcc is true and when it comes back in the fixedTermFixedSum.financialData tree the isFixedTerm is true.

I tried to set that using the if then else but it still gave me the worng type when I cross test the account.

Additional the variable I test against is currencyISO as that always must contain a value, either 'GBP' or 'EUR'

It worked for the 3 samples you gave me using the 2 approaches I have posted above.
I don't know if you are getting another form of response content or if you made a modification that breaks something (as I don't know what you are using for Input/Output contracts and Request/Response configurations).

What's available are JSONPath or Velocity macros.
As far as I know, there is no JSONPath expression to test presence of an attribute and return true/false.

If you need to do advanced parsing, you might want to consider leveraging a Lambda Data Action Integration (or GCP or ...) and do the processing via code in the function before returning it to Genesys Cloud.

Regards,

Let me try to explain what happens.
When I use the RA1 details and use the data action that is supposed to lookup the fixedTermFixedSum the data action runs and completes and the back end returns the data in the runningAccounts format

Your approach then returns the information but the boolean then returns a valid tick tor the fixedTerm value, what is incorrect.

That's because the back end system should really send an 500 (account not found) error for the lookup against the wrong product.

I really don't know what you mean here.

I have just emulated your server with a site I use for this and the RA1.json file you attached.

This is what I get with the first method I described (velocity approach):
isFixedTerm output parameter is false. which seems correct.

And what I get with the second method (JSONPath):
isFixedTerm output parameter is -1. which seems correct.
In this approach, I had modified isFixedTerm output parameter to be an integer instead of boolean. -1 means it is a running account, otherwise (if >= 0) it is a Fixed Term.

I don't know if using your web server creates some other changes or if you have made modifications to the contract/configuration which gives you this behavior.
As posted above, this is what I observe.

So nothing much I can add...







The above screenshots are against the first solution
The second set is against the second solution






You can see that when the wrong data is used against the query the outcome also is wrong.

I am sorry but I don't understand your question, what you are trying to do or what you mean by "the outcome also is wrong". You're showing screenshots of your input and of your output. But I don't know how your Web Services is behaving, what the response looks like, what you are expecting as a result, ...

My point with the 2 approaches I provided was to show how to retrieve data - based on what you had sent as samples.
The Output Contract and Response configurations only care about what comes back from your Web Server (regardless of what values you have sent in your input contract/parameters).

Based on the attributes you wanted to retrieve (hasThirdPartyAccess, agreementCount, creditProductType and creditProductTypeDescription) and the sample responses you provided, my understanding was that the response will have (fixedTermFixedSumData = null and hasThirdPartyAccess/agreementCount/creditProductType/creditProductTypeDescription attributes under runningAccountData.financialData) OR (runningAccountData = null and hasThirdPartyAccess/agreementCount/creditProductType/creditProductTypeDescription attributes under fixedTermFixedSumData.financialData).

In the first method, I was trying to get to the values using the full path trying fixedTermFixedSumData.financialData and trying runningAccountData.financialData.
In order to determine ("guess") if the data was under fixedTermFixedSumData.financialData or under runningAccountData.financialData, I used one of the attributes as a test value -> ftAgreementCount ($.fixedTermFixedSumData.financialData.agreementCount). I assumed that if present, fixedTermFixedSumData.financialData.agreementCount would have a value greater or equal to zero (>= 0). If missing, JSONPath $.fixedTermFixedSumData.financialData.agreementCount will fail and take the default value (-1) from the translationMapDefaults.
isFixedTerm is just a custom variable/output I had added, to test this, and return true if response contains fixedTermFixedSumData.financialData or false if it contains runningAccountData.financialData.

In the second method, I used a JSONPath expression to retrieve hasThirdPartyAccess, agreementCount, creditProductType and creditProductTypeDescription from anywhere in the response (as long as it is under financialData structure). If financialData is under fixedTermFixedSumData, it will retrieve it. If it is under runningAccountData, it will retrieve it as well.
But my assumption here, based on the sample responses you provided, is that financialData is present in one or the other (i.e. always present in the response, under fixedTermFixedSumData or runningAccountData, but not in both).
This time, to simplify, the custom variable/output I added (isFixedTerm) is an integer. It is also based on retrieving fixedTermFixedSumData.financialData.agreementCount. If it is present (assuming >= 0), then isFixedTerm >= 0. If it is not there (then use translationMapDefaults value), isFixedTerm = -1.

If what you expect in terms of processing of the response is different, just adapt the response configuration to your needs.
What matters is the response body from your web server, and if/how you can extract info from it using JSONPath expressions and Velocity macros.
To play with JSONPath, I usually use this site: https://jsonpath.com/
To emulate a Web Service, I use this site (copying responses you gave in samples and querying this service): Console | Mockable

Regards,

This topic was automatically closed 31 days after the last reply. New replies are no longer allowed.