{"id":27273,"date":"2021-03-10T12:10:02","date_gmt":"2021-03-10T12:10:02","guid":{"rendered":"https:\/\/www.inogic.com\/blog\/?p=27273"},"modified":"2021-09-03T07:30:34","modified_gmt":"2021-09-03T07:30:34","slug":"work-with-the-all-available-parameter-types-in-the-custom-api","status":"publish","type":"post","link":"https:\/\/www.inogic.com\/blog\/2021\/03\/work-with-the-all-available-parameter-types-in-the-custom-api\/","title":{"rendered":"Work with all available parameter types in Custom API"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p>In our previous blog, we have shown <a href=\"https:\/\/www.inogic.com\/blog\/2021\/03\/introducing-custom-api-the-new-way-of-creating-custom-actions-in-dataverse\/\" target=\"_blank\" rel=\"noopener noreferrer\">brief of custom API<\/a> and have executed one Custom API request. In this blog, we will be discussing about the different data types available for the Custom API. We will also be explaining to you each one of them, and how we can incorporate it into our solution.<\/p>\n<p>We have already created parameters with all the data types and for the reference to create parameters you have to have one Custom API. For that Custom API you can create Custom API request Parameters and Custom API Response Properties.<\/p>\n<p>Move to Make.Powerapps.com&gt;&gt;Solutions&gt;&gt;Open your solution and Add New Item&gt;&gt;Select Custom API, Custom API Request Parameter or Custom API Response Property. The form will appear as shown below.<\/p>\n<p><a href=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/03\/1-execute-all-available-data-types-in-Custom-API.jpeg\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" class=\"aligncenter wp-image-27271 size-full\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/03\/1-execute-all-available-data-types-in-Custom-API.jpeg\" alt=\"execute all available data types in Custom API\" width=\"757\" height=\"609\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/03\/1-execute-all-available-data-types-in-Custom-API.jpeg 757w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/03\/1-execute-all-available-data-types-in-Custom-API-300x241.jpeg 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/03\/1-execute-all-available-data-types-in-Custom-API-660x531.jpeg 660w\" sizes=\"(max-width: 757px) 100vw, 757px\" \/><\/a><\/p>\n<p>Following are the data types available at the time of writing this blog for the custom API request parameter and custom API response property<\/p>\n<p>\u2022 Value: 0 Label: Boolean<br \/>\n\u2022 Value: 1 Label: DateTime<br \/>\n\u2022 Value: 2 Label: Decimal<br \/>\n\u2022 Value: 3 Label: Entity<br \/>\n\u2022 Value: 4 Label: EntityCollection<br \/>\n\u2022 Value: 5 Label: EntityReference<br \/>\n\u2022 Value: 6 Label: Float<br \/>\n\u2022 Value: 7 Label: Integer<br \/>\n\u2022 Value: 8 Label: Money<br \/>\n\u2022 Value: 9 Label: Picklist<br \/>\n\u2022 Value: 10 Label: String<br \/>\n\u2022 Value: 11 Label: StringArray<br \/>\n\u2022 Value: 12 Label: Guid<\/p>\n<p>We will see each different type of data type with an example.<\/p>\n<p>As mentioned above, we have already created Custom API and its parameters. The below Image shows the metadata information of the Custom API Action<\/p>\n<p><a href=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/03\/2-execute-all-available-data-types-in-Custom-API.png\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" class=\"aligncenter wp-image-27272 size-full\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/03\/2-execute-all-available-data-types-in-Custom-API.png\" alt=\"execute all available data types in Custom API\" width=\"834\" height=\"480\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/03\/2-execute-all-available-data-types-in-Custom-API.png 834w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/03\/2-execute-all-available-data-types-in-Custom-API-300x173.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/03\/2-execute-all-available-data-types-in-Custom-API-768x442.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/03\/2-execute-all-available-data-types-in-Custom-API-660x380.png 660w\" sizes=\"(max-width: 834px) 100vw, 834px\" \/><\/a><\/p>\n<p>1) Entity Logical Name can only be set for Entity and Entity Reference type of parameter on Custom API Request Parameter form.<br \/>\n2) Entity Logical Name field is optional even if the parameter type is Entity or Entity Reference.<br \/>\n3) If you set Entity Logical Name for any Entity and Entity Reference then it must only contain defined Entity data and Entity Reference.<br \/>\n4) Picklist and integer type parameter defined as the same in metadata similarly Decimal and Money type are same in metadata<\/p>\n<p>Please Note: &#8211; Executing Custom API from plugin and workflow are very straightforward so we will not be looking into that. We will check in the script how we can execute our Custom API with all possible parameters.<\/p>\n<p>We will be using the Xrm.WebApi.online.execute function to execute our Custom API and in order to execute, we have to create a Request and that request must define our parameter types using Entity Data Model. e.g. Edm.String<br \/>\nParameter Types require three properties viz enumProperties(Optional), structuralProperty and typeName. For more details, refer to <a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/developer\/model-driven-apps\/clientapi\/reference\/Xrm-WebApi\/online\/execute\" target=\"_blank\" rel=\"noopener noreferrer\">this<\/a>.<\/p>\n<p>Structural Property: Structural Property is divided into 5 category and we have to define the value of one them for each parameter.<\/p>\n<p>\u2022 Value 0 for Unknown<br \/>\n\u2022 Value 1 for Primitive Type<br \/>\n\u2022 Value 2 for Complex Type<br \/>\n\u2022 Value 3 for Enumeration Type<br \/>\n\u2022 Value 4 for Collection<br \/>\n\u2022 Value 5 for Entity Type<\/p>\n<p>Type Name: Must be string and it is the qualified name of the parameter type. (Shown into the above image. e.g. Edm.Double )<\/p>\n<p>For Boolean, String, Double, Decimal, Money (Decimal), Date Time, Float, and Integer:<\/p>\n<p>1) Passing as Input Parameter from the script:<\/p>\n<p>var Sdk = window.Sdk || {};<br \/>\nSdk.PrimitiveRequest = function(stringattribute ,datetimeattribute,moneyattribute,booleanattribute,floatattribute,integerattribute) {<br \/>\nthis.stringattribute = stringattribute;<br \/>\nthis.datetimeattribute = datetimeattribute;<br \/>\nthis.moneyattribute = moneyattribute;<br \/>\nthis.booleanattribute = booleanattribute;<br \/>\nthis.floatattribute = floatattribute;<br \/>\nthis.integerattribute =integerattribute;<br \/>\n};<br \/>\n\/\/ NOTE: The getMetadata property should be attached to the function prototype instead of the<br \/>\n\/\/ function object itself.<br \/>\nSdk.PrimitiveRequest.prototype.getMetadata = function () {<br \/>\nreturn {<br \/>\nboundParameter: null,<br \/>\nparameterTypes: {<br \/>\n&#8220;stringattribute&#8221;: {<br \/>\n&#8220;typeName&#8221;: &#8220;Edm.String&#8221;,<br \/>\n&#8220;structuralProperty&#8221;: 1 \/\/ Primitive Type<br \/>\n},<br \/>\n&#8220;datetimeattribute&#8221;: {<br \/>\n&#8220;typeName&#8221;: &#8220;Edm.DateTimeOffset&#8221;,<br \/>\n&#8220;structuralProperty&#8221;: 1 \/\/ Primitive Type<br \/>\n},<br \/>\n&#8220;moneyattribute&#8221;: {<br \/>\n&#8220;typeName&#8221;: &#8220;Edm.Decimal&#8221;,<br \/>\n&#8220;structuralProperty&#8221;: 1 \/\/ Primitive Type<br \/>\n},<br \/>\n&#8220;booleanattribute&#8221;: {<br \/>\n&#8220;typeName&#8221;: &#8220;Edm.Boolean&#8221;,<br \/>\n&#8220;structuralProperty&#8221;: 1 \/\/ Primitive Type<br \/>\n},<br \/>\n&#8220;floatattribute&#8221;: {<br \/>\n&#8220;typeName&#8221;: &#8220;Edm.Double&#8221;,<br \/>\n&#8220;structuralProperty&#8221;: 1 \/\/ Primitive Type<br \/>\n},<br \/>\n&#8220;integerattribute&#8221;: {<br \/>\n&#8220;typeName&#8221;: &#8220;Edm.Int32&#8221;,<br \/>\n&#8220;structuralProperty&#8221;: 1 \/\/ Primitive Type<br \/>\n}<br \/>\n},<br \/>\noperationType: 0, \/\/ This is an action. Use &#8216;1&#8217; for functions and &#8216;2&#8217; for CRUD<br \/>\noperationName: &#8220;new_passandretrievealldatatypes&#8221;,<br \/>\n};<br \/>\n};<br \/>\nvar request =new Sdk.PrimitiveRequest(&#8220;string value&#8221;,new Date(),500,true,20.5,5);<br \/>\nvar result = await Xrm.WebApi.online.execute(request);<\/p>\n<p>2) Read and pass as output parameter from plugin<\/p>\n<p>public void Execute(IServiceProvider serviceProvider)<br \/>\n{<br \/>\ntry<br \/>\n{ \/\/ tracing object<br \/>\nITracingService tracing = (ITracingService)serviceProvider.GetService(typeof(ITracingService));<br \/>\n\/\/ ExecutionContext object<br \/>\nIPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));<br \/>\n\/\/ object Organization service factory object<br \/>\nIOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));<br \/>\n\/\/ object organization object<br \/>\nIOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);<\/p>\n<p>\/\/check the key is present<br \/>\n\/\/Check the input parameter of string type<br \/>\nif (context.InputParameters.Contains(&#8220;stringattribute&#8221;))<br \/>\n{<br \/>\nstring inputString = context.InputParameters[&#8220;stringattribute&#8221;] as string;<br \/>\ntracing.Trace($&#8221;String Input {inputString}&#8221;);<br \/>\n\/\/Pass string attribute to the output parameter<br \/>\ncontext.OutputParameters[&#8220;stringresponse&#8221;] = $&#8221;This is the response of string parameter {inputString}&#8221;;<br \/>\n}<br \/>\n\/\/Check the input parameter of Money type<br \/>\nif (context.InputParameters.Contains(&#8220;moneyattribute&#8221;))<br \/>\n{<br \/>\nMoney moneyValue = context.InputParameters[&#8220;moneyattribute&#8221;] as Money;<br \/>\ntracing.Trace($&#8221;Money input value {(moneyValue != null ? moneyValue.Value.ToString() : &#8221; : Money value is null &#8220;)}&#8221;);<br \/>\n\/\/Pass money value in the output parameter<br \/>\ncontext.OutputParameters[&#8220;moneyresponse&#8221;] = moneyValue;<br \/>\n}<br \/>\n\/\/Check the input parameter of boolean type<br \/>\nif (context.InputParameters.Contains(&#8220;booleanattribute&#8221;))<br \/>\n{<br \/>\nbool booleanAttributeInput = Convert.ToBoolean(context.InputParameters[&#8220;booleanattribute&#8221;]);<br \/>\ntracing.Trace($&#8221;Boolean input value : {booleanAttributeInput}&#8221;);<br \/>\n\/\/Pass the boolean value to output parameter<br \/>\ncontext.OutputParameters[&#8220;booleanresponse&#8221;] = booleanAttributeInput;<br \/>\n}<br \/>\n\/\/Check the input parameter of Date and Time type<br \/>\nif (context.InputParameters.Contains(&#8220;datetimeattribute&#8221;))<br \/>\n{<br \/>\nDateTime dateInput = Convert.ToDateTime(context.InputParameters[&#8220;datetimeattribute&#8221;]);<br \/>\ntracing.Trace($&#8221;Date and Time input value : {dateInput}&#8221;);<br \/>\n\/\/pass guid to output parameter<br \/>\ncontext.OutputParameters[&#8220;datetimeresponse&#8221;] = dateInput;<br \/>\n}<br \/>\n\/\/Check the input parameter of integer type<br \/>\nif (context.InputParameters.Contains(&#8220;integerattribute&#8221;))<br \/>\n{<br \/>\nint integerInput = Convert.ToInt32(context.InputParameters[&#8220;integerattribute&#8221;]);<br \/>\ntracing.Trace($&#8221;integer input value : {integerInput}&#8221;);<br \/>\n\/\/pass interger output parameter<br \/>\ncontext.OutputParameters[&#8220;integerresponse&#8221;] = integerInput;<br \/>\n}<br \/>\n\/\/Check the input parameter of double type<br \/>\nif (context.InputParameters.Contains(&#8220;floatattribute&#8221;))<br \/>\n{<br \/>\ndouble doubleValue = Convert.ToDouble(context.InputParameters[&#8220;floatattribute&#8221;]);<br \/>\ntracing.Trace($&#8221;value in double : {doubleValue}&#8221;);<br \/>\n\/\/pass double output parameter<br \/>\ncontext.OutputParameters[&#8220;floatresponse&#8221;] = doubleValue;<br \/>\n}<\/p>\n<p>}<br \/>\ncatch (Exception ex)<br \/>\n{<br \/>\nthrow new InvalidPluginExecutionException(ex.InnerException != null &amp;&amp; ex.InnerException.Message != null ? ex.InnerException.Message : ex.Message);<br \/>\n}<\/p>\n<p>}<\/p>\n<p>For Guid, StringArray, Entity, EntityCollection, EntityReference, PickList:<\/p>\n<p>1) Passing as Input Parameter from script:<\/p>\n<p>var Sdk = window.Sdk || {};<br \/>\nSdk.Request = function(stringarrayattribute,entityattribute,entitycollectionattribute,entityreferenceattribute,guidattribute,picklistattribute) {<br \/>\nthis.stringarrayattribute = stringarrayattribute;<br \/>\nthis.entitycollectionattribute = entitycollectionattribute;<br \/>\nthis.entityreferenceattribute = entityreferenceattribute;<br \/>\nthis.entityattribute = entityattribute;<br \/>\nthis.guidattribute = guidattribute;<br \/>\nthis.picklistattribute = picklistattribute;<br \/>\n};<\/p>\n<p>\/\/ NOTE: The getMetadata property should be attached to the function prototype instead of the<br \/>\n\/\/ function object itself.<br \/>\nSdk.Request.prototype.getMetadata = function () {<br \/>\nreturn {<br \/>\nboundParameter: null,<br \/>\nparameterTypes: {<br \/>\n&#8220;stringarrayattribute&#8221;: {<br \/>\n&#8220;typeName&#8221;: &#8220;Collection(Edm.String)&#8221;,<br \/>\n&#8220;structuralProperty&#8221;: 4 \/\/ Enumeration<br \/>\n},<br \/>\n&#8220;entityattribute&#8221;: {<br \/>\n&#8220;typeName&#8221;: &#8220;mscrm.crmbaseentity&#8221;,<br \/>\n&#8220;structuralProperty&#8221;: 5 \/\/ Entity Type<br \/>\n},<br \/>\n&#8220;entitycollectionattribute&#8221;: {<br \/>\n&#8220;typeName&#8221;: &#8220;Collection(mscrm.crmbaseentity)&#8221;,<br \/>\n&#8220;structuralProperty&#8221;: 4 \/\/ Collection<br \/>\n},<br \/>\n&#8220;entityreferenceattribute&#8221;:{<br \/>\n&#8220;typeName&#8221;: &#8220;mscrm.crmbaseentity&#8221;,<br \/>\n&#8220;structuralProperty&#8221;: 5 \/\/ Entity Type<br \/>\n},<br \/>\n&#8220;guidattribute&#8221;:{<br \/>\n&#8220;typeName&#8221;: &#8220;Edm.Guid&#8221;,<br \/>\n&#8220;structuralProperty&#8221;: 1 \/\/ Primitive Type<br \/>\n},<br \/>\n&#8220;picklistattribute&#8221;:{<br \/>\n&#8220;typeName&#8221;: &#8220;Edm.Int32&#8221;,<br \/>\n&#8220;structuralProperty&#8221;: 1 \/\/ Primitive Type<br \/>\n}<br \/>\n},<br \/>\noperationType: 0, \/\/ This is an action. Use &#8216;1&#8217; for functions and &#8216;2&#8217; for CRUD<br \/>\noperationName: &#8220;new_passandretrievealldatatypes&#8221;,<br \/>\n};<br \/>\n};<br \/>\n\/\/Define Entity Record<br \/>\nvar contactRecord = {<br \/>\n&#8220;@odata.type&#8221;: &#8220;Microsoft.Dynamics.CRM.contact&#8221;,<br \/>\n&#8220;firstname&#8221;: &#8220;Test&#8221;,<br \/>\n&#8220;lastname&#8221;: &#8220;Account&#8221;<br \/>\n};<br \/>\n\/\/Define Entity Collection<br \/>\nvar entityCollection = [contactRecord];<br \/>\n\/\/Define Entity reference<br \/>\nvar entityRef = {<br \/>\n&#8220;@odata.type&#8221;: &#8220;Microsoft.Dynamics.CRM.contact&#8221;,<br \/>\n&#8220;contactid&#8221;: &#8220;d6208772-d545-eb11-a813-0022481eae24&#8221;<br \/>\n};<br \/>\n\/\/Define String Array<br \/>\nvar stringArray =[&#8220;str1&#8243;,&#8221;str2&#8243;,&#8221;str3&#8221;];<br \/>\n\/\/Define Guid<br \/>\nguid={guid: &#8220;E8C656B7-6AD1-E811-A967-000D3A30D5DB&#8221;};<br \/>\n\/\/pass all parameter to request object created.<br \/>\nvar requestObj=new Sdk.Request(stringArray,contactRecord,[contactRecord],contactref,guidParameter,5);<br \/>\nvar result = await Xrm.WebApi.online.execute(requestObj);<br \/>\nvar response =await result.json();<\/p>\n<p>2) Read and pass as output parameter from plugin:<\/p>\n<p>public void Execute(IServiceProvider serviceProvider)<br \/>\n{<br \/>\ntry<br \/>\n{ \/\/ tracing object<br \/>\nITracingService tracing = (ITracingService)serviceProvider.GetService(typeof(ITracingService));<br \/>\n\/\/ ExecutionContext object<br \/>\nIPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));<br \/>\n\/\/ object Organization service factory object<br \/>\nIOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));<br \/>\n\/\/ object organization object<br \/>\nIOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);<\/p>\n<p>\/\/check the key is present<br \/>\n\/\/Check the input parameter of PickList type<br \/>\nif (context.InputParameters.Contains(&#8220;picklistattribute&#8221;))<br \/>\n{<br \/>\nOptionSetValue optionSetInput = context.InputParameters[&#8220;picklistattribute&#8221;] as OptionSetValue;<br \/>\ntracing.Trace($&#8221;Pick List input value : {(optionSetInput != null? optionSetInput.Value.ToString(): &#8220;option set value is null&#8221;)}&#8221;);<br \/>\n\/\/pass optionset value parameter<br \/>\ncontext.OutputParameters[&#8220;picklistresponse&#8221;] = optionSetInput != null ? optionSetInput.Value : 0;<br \/>\n}<br \/>\n\/\/Check the input parameter of StringArray type<br \/>\nif (context.InputParameters.Contains(&#8220;stringarrayattribute&#8221;))<br \/>\n{<br \/>\nstring[] inputArrayString = context.InputParameters[&#8220;stringarrayattribute&#8221;] as string[];<br \/>\ntracing.Trace($&#8221;Array Of String Value {string.Join(&#8220;,&#8221;, inputArrayString)}&#8221;);<br \/>\n\/\/Pass string array attribute to the output parameter<br \/>\ncontext.OutputParameters[&#8220;stringarrayresponse&#8221;] = new string[] { &#8220;Response data provided&#8221; };<br \/>\n}<br \/>\n\/\/Check the input parameter of Entity type<br \/>\nif (context.InputParameters.Contains(&#8220;entityattribute&#8221;))<br \/>\n{<br \/>\nEntity entity = context.InputParameters[&#8220;entityattribute&#8221;] as Entity;<\/p>\n<p>tracing.Trace($&#8221;EntityId Input {(entity != null ? entity.Id.ToString() : &#8220;Entity input is null&#8221;)}&#8221;);<br \/>\n\/\/Pass entity Attribute to the output parameter<br \/>\ncontext.OutputParameters[&#8220;entityresponse&#8221;] = entity;<br \/>\n}<br \/>\n\/\/Check the input parameter of Entity Collection type<br \/>\nif (context.InputParameters.Contains(&#8220;entitycollectionattribute&#8221;))<br \/>\n{<br \/>\nEntityCollection entityColl = context.InputParameters[&#8220;entitycollectionattribute&#8221;] as EntityCollection;<br \/>\ntracing.Trace($&#8221;Entity Collection count {(entityColl != null ? entityColl.TotalRecordCount.ToString() : &#8220;Entity Collection is null &#8220;)}&#8221;);<br \/>\n\/\/pass entity collection to the output parameter<br \/>\ncontext.OutputParameters[&#8220;entitycollectionresponse&#8221;] = entityColl;<br \/>\n}<br \/>\n\/\/Check the input parameter of Entity Reference type<br \/>\nif (context.InputParameters.Contains(&#8220;entityreferenceattribute&#8221;))<br \/>\n{<br \/>\nEntityReference entityRef = context.InputParameters[&#8220;entityreferenceattribute&#8221;] as EntityReference;<br \/>\ntracing.Trace($&#8221;Entity Refernce {(entityRef != null ? entityRef.Id.ToString() : &#8221; : Entity Ref is null &#8220;)}&#8221;);<br \/>\n\/\/Should be contact<br \/>\ncontext.OutputParameters[&#8220;entityreferenceresponse&#8221;] = entityRef;<br \/>\n}<br \/>\n\/\/Check the input parameter of Guid type<br \/>\nif (context.InputParameters.Contains(&#8220;guidattribute&#8221;))<br \/>\n{<br \/>\nGuid guidInput = new Guid(Convert.ToString( context.InputParameters[&#8220;guidattribute&#8221;]));<br \/>\ntracing.Trace($&#8221;Guid input value : {guidInput}&#8221;);<br \/>\n\/\/pass guid to output parameter<br \/>\ncontext.OutputParameters[&#8220;guidresponse&#8221;] = guidInput;<br \/>\n}<br \/>\n}<br \/>\ncatch (Exception ex)<br \/>\n{<br \/>\nthrow new InvalidPluginExecutionException(ex.InnerException != null &amp;&amp; ex.InnerException.Message != null ? ex.InnerException.Message : ex.Message);<br \/>\n}<br \/>\n}<\/p>\n<h2>Conclusion<\/h2>\n<p>Above, we have shown how we can use and execute our Custom API with all possible parameters. In the next blog we will be checking how we can register other plugins on the custom API.<\/p>\n<p><a href=\"https:\/\/www.inogic.com\/product\/productivity-apps\/click-2-export-microsoft-dynamics-crm-reports\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" class=\"aligncenter wp-image-27274 size-full\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/03\/C2E-1.jpg\" alt=\"\" width=\"800\" height=\"200\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/03\/C2E-1.jpg 800w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/03\/C2E-1-300x75.jpg 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/03\/C2E-1-768x192.jpg 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/03\/C2E-1-660x165.jpg 660w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction In our previous blog, we have shown brief of custom API and have executed one Custom API request. In this blog, we will be discussing about the different data types available for the Custom API. We will also be explaining to you each one of them, and how we can incorporate it into our\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.inogic.com\/blog\/2021\/03\/work-with-the-all-available-parameter-types-in-the-custom-api\/\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":13,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[16,19],"tags":[2169,545,592],"class_list":["post-27273","post","type-post","status-publish","format-standard","hentry","category-dynamics-365","category-dynamics-crm","tag-custom-api","tag-dynamics-365-crm","tag-dynamics-crm"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/posts\/27273","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/comments?post=27273"}],"version-history":[{"count":0,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/posts\/27273\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/media?parent=27273"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/categories?post=27273"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/tags?post=27273"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}